Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Puertos disponibles -2 (https://www.clubdelphi.com/foros/showthread.php?t=25975)

CelestronFan 10-10-2005 07:12:39

Puertos disponibles -2
 
No se porque se borro mi post anterior, pero lo vuelvo a colocar.

Utilicé el código mostrado abajo que encontré en Internet, a fin de determinar que puertos seriales existen en la PC que corre mi aplicación y rellenar un combo box para que el usuario escoja solo de los que están disponibles.

Sin embargo, obtengo un error al compilar que dice: [Error] NGFS.pas(47): Undeclared identifier: 'TRegistry'
Se que se debe a la declaración y creación de la clase. ¿Podrían sugerirme que es lo que falta?

Muchas Gracias.
Código:

var
i:integer;

 with TRegistry.create do
  try
  rootkey:=HKEY_LOCAL_MACHINE;
  if keyexists('HARDWARE') then begin
    if openkey('HARDWARE',false)then begin
    if keyexists('DEVICEMAP') then begin
      if openkey('DEVICEMAP',false)then begin
      if keyexists('SERIALCOMM') then begin
        if openkey('SERIALCOMM',false)then begin
        GetValueNames(SerialCombo.items);
        for i:=0 to SerialCombo.items.count-1 do
          begin
          SerialCombo.items[i]:=ReadString(SerialCombo.items[i]);
          end;
        end
        end;
      end;
      end;
    end;
  end;
  finally free;
  end;


DarkByte 10-10-2005 08:08:20

Pues te falta añadir Registry a las uses

Código Delphi [-]
uses
  Registry;

Sotrono 10-10-2005 08:15:21

Tenes que declarar una variable de tipo TRegistry y trabajar con ella. No podes trabajar directamente con la clase TRegistry:

Código Delphi [-]
var Registro: TRegistry;
begin
  Registro:= TRegistry.Create;
  with Registro do
  //Lo que sigue...

Salu2..

dec 10-10-2005 13:47:13

Hola,


Cita:

Empezado por Sotrono
Tenes que declarar una variable de tipo TRegistry y trabajar con ella.

En el código de más arriba se crea una instancia de la clase "TRegistry" y es con esta instancia con la que se trabaja. El error que se refiere tiene como solución la que plantea DarkByte. Yo suelo hacer lo que dices Sotrono, pero, con los defectos y virtudes que tenga, lo cierto es que el código de más arriba parece funcionar correctamente, una vez el compilador sabe dónde se encuentra la clase "TRegistry", esto es, una vez se añade la unidad "Registry" a alguna de las cláusulas "Uses".

roman 10-10-2005 17:30:41

Además de lo ya dicho (incluir la unidad Registry), creo que el código es innecesariamente largo. Podría intentar algo así:

Código Delphi [-]
var
  Registry: TRegistry;
  I: Integer;

begin
  Registry := TRegistry.Create;

  try
    Registry.RootKey := HKEY_LOCAL_MACHINE;
    if Registry.OpenKey('HARDWARE\DEVICEMAP\SERIALCOMM', false) then
    begin
      Registry.GetValueNames(SerialCombo.Items);
      for I := 0 to SerialCombo.Items.Count - 1 do
        SerialCombo.Items[i] := Registry.ReadString(SerialCombo.Items[i]);
    end;
  finally
    Registry.Free;
  end;
end;

// Saludos


La franja horaria es GMT +2. Ahora son las 12:14:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi