Entwickler-Ecke
Sonstiges (Delphi) - Problem mit Arrays und Prozeduren
Ich Bins - So 05.10.03 23:45
Titel: Problem mit Arrays und Prozeduren
Hallo! Habe da ein Problem und weis nicht wie ich es hinkriegen soll
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| implementation
var Speed:Array[1..10,1..10] of TSpeedButton;
procedure Testprozedur; begin ...... end;
procedure TForm1.FormCreate(Sender: TObject); var x,y : Integer; begin for x:=1 to 10 do for y:=1 to 10 do begin Speed[x,y]:=TSpeedButton.Create(Self); Speed[x,y].OnClick:=TestProzedur; end; end; |
Wie kriege ich es jetzt hin, dass ich in der 3. Zeile von unten jedem SpeedButton die Prozedur Testprozedur als OnClick-Ereignis zuweisen kann, ich kann sie ja nicht im Obejktinspektor zuweisen!
Danke schon mal im Vorraus für die Hilfe!
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Christian S. - So 05.10.03 23:58
Hallo und herzlich Willkommen im Forum!
Deine Prozedur muss erstens eine Methode sein, dass heißt zu einem Objekt gehören, beispielsweise TForm1. Außerdem muss sie zu einem TNotifyEvent passen, das heißt, es muss der Parameter Sender : TObject übergeben werden.
Bis dann
Peter
P.S.: Bitte verwende für Deinen Code im Forum demnächst Delphi-Tags, das erhöht die Lesbarkeit!
Ich Bins - Mo 06.10.03 20:27
Und wie müsste ich das machen wenn ich der Test-Prozedur noch die Werte x und y übergeben will? Ich hab nämlich schon probiert eine neuen Button zu machen, bei dem dann eine OnClick-Prozedur erstellet und im FormCreate diese Prozedur jedem SpeedButton zugeordnet.
Allerdings kann ich so keine Werte x und y übergeben.
Ich will also irgendwie eine Testprozedur haben, die erkennt, von welchem SpeedButton sie aufgerufen wurde, weis aber absolut nicht wie das geht, hab grade erst mit Delphi angefangen!
kasi - Mo 06.10.03 21:36
Dafür kannst Du die Eigenschaft Tag des TSpeedButton benutzen.
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:
| procedure TForm1.SpeedButton1Click(Sender: TObject); var p: TSmallPoint; begin p := TSmallPoint(TSpeedButton(Sender).Tag); ShowMessage('Das war SpeedButton: '+IntToStr(p.x)+'/'+IntToStr(p.y)); end;
procedure TForm1.FormCreate(Sender: TObject); var x,y : Integer; p: TSmallPoint; begin for x:=1 to 10 do for y:=1 to 10 do begin Speed[x,y]:=TSpeedButton.Create(Self); Speed[x,y].OnClick:=SpeedButton1Click; Speed[x,y].Top := y*25; Speed[x,y].Left := x*25; Speed[x,y].Parent := Self; Speed[x,y].Caption := IntToStr(x)+'/'+IntToStr(y); p.x := x; p.y := y; Speed[x,y].Tag := integer(p); end; end; |
KASI
Moderiert von
UGrohne: Code- durch Delphi-Tags ersetzt
Christian S. - Mo 06.10.03 21:39
Schicke Lösung! :)
//edit: was dagegen, wenn ich Dich mit der Lösung (irgendwann) in meinem Tutorial zu Arrays und Komponentenarrays zitiere?
MSCH - Mo 06.10.03 21:39
Gebe jedem button ein TAG (integer) mit, andem du erkennen kannst, welcher der Buttons gedrückt wurde.
bsp:
Delphi-Quelltext
1: 2: 3: 4:
| MyForm = Class(TForm) procedure MyButtonClick(Sender:TObjekt); ... end; |
in deiner For-Schleife:
Delphi-Quelltext
1: 2:
| Speed[][].OnClick := MyButtonClick; Speed[][].Tag:= 1; |
...
in der Methode Click;
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure MyForm.MyButtonClick(); begin with sender as TSpeedButton do case Tag of 1: 2: end; end; |
// sind nur Fragmente, so aus'm Schädel geschrieben
grez
msch
//EDIT Da war wohl jemand schneller :-)
kasi - Mo 06.10.03 21:52
Zitat: |
was dagegen, wenn ich Dich mit der Lösung (irgendwann) in meinem Tutorial zu Arrays und Komponentenarrays zitiere?
|
kein Problem.
KASI
Ich Bins - Di 07.10.03 16:45
Thx very much, klappt jetzt wunderbar
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!