Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Fehler: Undeclared Identifier


volvox - Fr 01.01.10 20:22
Titel: Fehler: Undeclared Identifier
Ich versteh grad nicht wo der Syntaxfehler in diesen paar kleinen Zeilen ist. Vieleicht sieht ja jemand mehr als ich. Delphi meldet Undeclared Identifier :'handle'. Ich hab keine Ahnung wieso, da ich es an anderen Stellen im Quelltext genauso habe und es keine Probleme gibt.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure MehrStart;
begin
  case frmHaupt.libMehr.ItemIndex of
    0: ShellExecute(Handle, nil'MeinProgramm.exe'nilnil, SW_SHOW);
    1: ShellExecute(Handle, nil'AnderesProgramm.exe'nilnil, SW_SHOW);
    end;
end;

ShellAPI ist in den uses

(PS: Ja das gehört so mit dem Case. Steht eigentlich noch mehr darunter, habs aber rausgenommen weils nichts zur Sache tut.)

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


MaPsTaR - Fr 01.01.10 20:43

Auf jeden Fall liegt es an den NIL-Pointern.
Schau dir mal das an http://www.delphi-forum.de/topic_Shellexecute+und+Parameter_96733.html

Oder frag mal das WIN-SDK nach ShellExecute.http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx


volvox - Fr 01.01.10 20:59

Danke erstmal, auch wenn ich kaum was versteh da ich seit zwei Jahren das erste mal wieder mit Delphi arbeite...

Ich glaub aber es ist was viel simpleres. Wenn ich den Inhalt der Prozedur in nen Button kopiere klappts nämlich. Nur aus dieser eigenen Prozedur eben nicht.


MaPsTaR - Fr 01.01.10 21:01

Dann versuch mal als ersten Parameter Application.Handle


volvox - Fr 01.01.10 21:14

Passt. Vielen Dank!


jaenicke - Fr 01.01.10 21:56

Der Grund für die Fehlermeldung ist, dass deine Routine keine Methode des Formulars war. Und deshalb hast du natürlich auch kein Handle, da innerhalb des Formulars du dessen Handle benutzt. ;-)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  TFormX = class
  private
  public
    procedure TestAlpha;
  end;

procedure TFormX.TestAlpha;
begin
  Handle // --> Handle vom Formular
end;

procedure TestBeta;
begin
  Handle // --> gibts nicht, da die Prozedur separat von einem Formular ist
end;