Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Ganz doofe frage TEdit / function / procedure


uranop - Mo 25.08.08 14:58
Titel: Ganz doofe frage TEdit / function / procedure
Hi leute,

ich habe mal ne janz doofe Frage ...

Im Zuge des Auslesens von Rechnern lokal fuer Geraetebuecher ( Daten aus WMI )
mach ich das nun zusaetzlich noch mit einer Remotefunktion.

Remotehost angeben und auslesen lassen ....

klappt ja soweit auch ganz gut ...

lediglich steh ich momentan etwas aufn schlauch ....

Hier mein problem ...

die meisten meiner abfrage routinen sind functions ausserhalb von procedures
wenn ich nun hergehen moechte und den hostnamen der - in meinem fall - in der Edit25 steht
an die functions uebergeben will ... streikt delphi...

Einzigste moeglichkeit in den funktions zusaetzlich in den vars noch Edit25 : TEdit; mit anzugeben.

dann laeuft der compiler auch ohne meckern durch...

sooo nun komme ich aber zu fehlermeldungen die immer auf
"Read of Adress 000000BE" raus laufen ....

weiss einer was der mist sein koennte ?


Gausi - Mo 25.08.08 15:07

Warum übergibst du der Funktion das Edit? Der String, der in Edit.Text drinsteht, sollte doch ausreichen, oder?

Oder (ganz böse Befürchtung), machst du sowas?

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure meineProc;
var Edit25: TEdit;
begin
  hostname := Edit25.Text;
end;
Das kann ja gar nicht funktionieren.

Besser wäre sowas:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure meineProc(hostname: String);
begin
   // machwas mit hostname
end;

// Aufruf von der Form aus:
meineProc(Edit25.Text);


uranop - Mo 25.08.08 15:22

neehm ne so einfach denn doch nicht ...

hier mal nen auszug


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
// Inventory nummer

function GetInventorynr: string;
var
regist: TRegistry;
s: string;
Edit25: TEdit;
begin
  regist:=TRegistry.Create(KEY_READ);
  try
    regist.RootKey:=HKEY_LOCAL_MACHINE;
    regist.RegistryConnect(Edit25.Text); //voreingestellt ist HKEY_CURRENT_USER
    regist.OpenKey('SOFTWARE\Roche\SMS',true);
      //bei true wird Schlüssel erzeugt, wenn er noch nicht existiert
     s:= regist.ReadString('ComputerInventoryNumber');
  finally
    regist.Free;
  end;
  GetInventorynr := s;
end;


das ding wird erst viel viel spaeter mit


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
   begin
   Edit1.Text := Edit25.Text; //GetHostname;
ProgressBar1.StepIt;
   Edit2.Text := GetInventorynr;
.
.
.


aufgrufen


wenn ich das Edit25 : TEdit;
da nicht mit rein mache in der function denn kommt
undeclared identifier Edit25 bla bla


Gausi - Mo 25.08.08 15:26

...also hat sich meine ganz böse Vermutung bestätigt. Meine Glaskugel funktioniert also doch. :mrgreen:

Füge der Funktion GetInventorynr einen Parameter vom Typ String hinzu, den du dann weiter benutzt. Beim Aufruf der Funktion übergibst du dann den Text aus Edit25.


uranop - Mo 25.08.08 18:59

jawoll ja ... naja is montag da kann man bissl neben sich stehen : P