| Autor |
Beitrag |
jaenschi
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Fr 25.02.05 18:19
Hallo,
ich erstelle in meinen Programm dynamisch Fenster. Dazu verwende ich diesen Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| with TForm.Create(Application) do begin Width := 347; Height := 320; name:='test'; onclose:=testprocedure(name); end; |
mit dem onclose-event rufe ich folgende procedure auf:
Delphi-Quelltext 1: 2: 3: 4:
| procedure testprocedure(id:string); begin blablabla... end; |
Wenn ich das nun compile, sagt er mir "Incompatible types: 'TCloseEvent' and 'procedure, untyped pointer or untyped parameter'
Wie kann ich das nun passend machen? Moderiert von Christian S.: Topic aus VCL (Visual Component Library) verschoben am Fr 25.02.2005 um 18:30
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 25.02.05 18:31
Hallo!
OnClose ist ein TCloseEvent, welches wie folgt definiert ist:
Delphi-Quelltext 1:
| TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object; |
Die Prozedur, welche Du OnClose zuweist, muss also die obigen Parameter besitzen und eine Methode sein.
MfG
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
jaenschi 
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Fr 25.02.05 18:34
Ehrlich gesagt, kann ich mir noch nicht vorstellen, wie dann meine procedure aussehen muss.
Kannst du mir vielleicht mal eine Beispiel-Procedure erstellen?
THX
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 25.02.05 18:44
Hallo!
Deine Prozedur muss Teil einer Klasse sein, also eine Methode. Lass Dir doch von Delphi einfach mal eine OnClose-Methode erstellen, dann siehst Du ja, wie sie aussehen muss
MfG
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
jaenschi 
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Fr 25.02.05 18:51
Also meine Procedure sieht jetzt so aus:
Delphi-Quelltext 1:
| procedure TForm1.loeschefenster(Sender: TObject; var Action: TCloseAction; id:string); |
In der Private-Declaration hab ich das auch entsprechend eingefügt.
Nur wie rufe ich die Procedure jetzt auf? Ich muss ja auch Parameter für
Sender: TObject; var Action: TCloseAction; übergeben!?
|
|
jaenschi 
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Fr 25.02.05 19:45
Ich rufe das nun so auf:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var action:TCloseAction; begin with TForm.Create(Application) do begin Width := 347; Height := 320; name:='test'; action:=caFree; onclose:=testprocedure(nil,action,name); |
Jetzt sagt mir der Compiler aber "Incompatible types: 'TBasicAction' and 'TCloseAction'".
Wie kann ich das denn nun beheben?
Zuletzt bearbeitet von jaenschi am Fr 25.02.05 20:01, insgesamt 1-mal bearbeitet
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Fr 25.02.05 19:52
Warum willst du das Ereignis OnClose selber aufrufen? Die VCL löst das Ereignis aus, wenn die VCL die Nachricht WM_CLOSE von Windows empfangen hat.
_________________ Ciao, Sprint.
|
|
jaenschi 
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Fr 25.02.05 20:03
Sorry, ich hab in meinem post eben ein Fehler eingebaut. Muss natürlich
onclose:=testprocedure(nil,action,name); heißen.
Ich will ja nicht das Ereignis aufrufen sondern eine Procedure beim OnClose-Ereignis!
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Fr 25.02.05 20:09
| jaenschi hat folgendes geschrieben: | | Ich will ja nicht das Ereignis aufrufen sondern eine Procedure beim OnClose-Ereignis! |
Tja... So sah dein Code aber nicht aus. Jetzt schon, nachdem du ihn geändert hast.
_________________ Ciao, Sprint.
|
|
jaenschi 
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Fr 25.02.05 20:11
Jetzt sieht er aber so aus und funktioniert trotzdem noch nicht 
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Fr 25.02.05 20:28
Hallo,
das Ereignis hat eben ein bestimmtes Schema das du nicht erweitern kannst. Es sieht so aus, wie es Christian oben bereits geschrieben hat. Du möchtest folgendes haben: procedure TForm1.loeschefenster(Sender: TObject; var Action: TCloseAction; id:string);Der letzte Parameter ist aber nicht vorgesehen und deshalb bekommst du eine Fehlermeldung. Wenn du tatsächlich was übergeben möchtest, dann musst du das zum Beispiel per globaler Variablen anstellen.
Achja, die Zuweisung sieht auch anders aus: OnClose := LoescheFenster;Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
jaenschi 
      
Beiträge: 89
Win XP, Debian
D7
|
Verfasst: Fr 25.02.05 20:43
Hab das jetzt mit einer globalen Variable gemacht.
Aber die optimalste und sauberste Möglichkeit ist das ja nicht gerade.
Könnte man ja fast als "Bug" von Delphi bezeichnen!(Betonung liegt auf "fast") 
|
|