Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Prozedur zur Laufzeit erzeugen
chrissivo - Mi 13.07.05 13:37
Titel: Prozedur zur Laufzeit erzeugen
Hallihallo,
ich bin gerade auf folgende Problematik gestoßen:
Ich habe ein "Menü" das einfach auf ein Formular mehrere Buttons setzt. Nun soll diesen Buttons noch eine OnClick-Prozedur zugewiesen werden.
Ich habe mittlerweile mitbekommen, dass diese Prozedur vom Typ TNotifyEvent sein muss.
Soweit so gut ich habe versucht das so zu schreiben. Allerdings meckert der Compiler :
[Fehler] : Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Meine Frage nun: Wie muss die richtige Methodenzuweisung lauten? Ist die Prozedur so richtig geschrieben, wenn ich die Nummer des Buttons herausfinden möchte?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| ... var Form5 : TForm5; knoepfe : Array[0..9] of TButton; auswahl : Integer;
function menue(menue : Array of String) : Integer;
implementation
{$R *.DFM}
class procedure klick(Sender : TObject); begin auswahl := StrToInt((Sender as TButton).Name[8]); Form5.Close end;
function menue(menue : Array of String) : Integer; var i : Integer; begin Form5 := TForm5.Create(nil); i := 0; while (i<=9) and (menue[i]<> '') do begin knoepfe[i] := TButton.Create(nil); with knoepfe[i] do begin Parent := Form5; Caption := menue[i]; Height := 50; Width := 150; Left := Parent.Width div 2 - Width div 2; if i <> 0 then Top := Height div 2 * i + (i-1)*Height else Top := Parent.Height - Height * 3 div 2; OnClick := klick; Show; Repaint end; Inc(i) end; Form5.ShowModal; Form5.Release; result := auswahl end; ... |
Vielen Dank im Vorraus
Chrissi
retnyg - Mi 13.07.05 13:43
schreib mal hier um:
Delphi-Quelltext
1:
| class procedure klick(Sender : TObject); |
das sollte reichen
funktioniert das "
return auswahl" ? müsste eigentlich
result := auswahl heissen
verwende bitte in zukunft delphi tags
chrissivo - Mi 13.07.05 13:51
Vielen Dank für die schnelle Hilfe.
Leider funktioniert es noch immer nicht. :roll:
Ich habe den Quelltext angepasst. Oben steht schon die veränderte Version! Der Compiler liefert denselben Fehler!
Das mit return funktionierte wahrscheinlich auch nicht. War ich irgendwie noch von Java gewöhnt...
chrissivo - Mi 13.07.05 14:21
Ok,
das war einigermaßen hilfreich!
Das mit der Dummy-Klasse habe ich auch probiert, hatte da aber nur Fehler. Habe deswegen der "klick"-Prozedur noch das TForm5 hinzugefügt.
Dem Hinweis in dem anderen Thread bin ich gefolgt und habe dann beim OnClick-Ereignis Form5.klick und nicht TForm5.klick zugewiesen. Änderungen habe ich weitgehend gehighlighted!
Vielen vielen Dank
Chrissi
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| ... type TForm5 = class(TForm) procedure klick(Sender : TObject); private public
end;
var Form5 : TForm5; knoepfe : Array[0..9] of TButton; auswahl : Integer;
function menue(menue : Array of String) : Integer;
implementation
{$R *.DFM}
procedure TForm5.klick(Sender : TObject); begin auswahl := StrToInt((Sender as TButton).Name[8]); Close end;
function menue(menue : Array of String) : Integer; var i : Integer; begin auswahl := -1; Form5 := TForm5.Create(nil); i := 0; while (i<=9) and (menue[i]<> '') do begin knoepfe[i] := TButton.Create(nil); with knoepfe[i] do begin Parent := Form5; Caption := menue[i]; Height := 50; Width := 150; Left := Parent.Width div 2 - Width div 2; if i <> 0 then Top := Height div 2 * i + (i-1)*Height else Top := Parent.Height - Height * 3 div 2; OnClick := Form5.klick; Show; Repaint end; Inc(i) end; Form5.ShowModal; Form5.Release; result := auswahl; end; ... |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!