Autor Beitrag
Ich Bins
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 197

Win XP Prof
D5 Prof
BeitragVerfasst: So 05.10.03 23:45 
Hallo! Habe da ein Problem und weis nicht wie ich es hinkriegen soll
ausblenden 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..10of 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 user profile iconTino: Delphi-Tags hinzugefügt.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ich Bins Threadstarter
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 197

Win XP Prof
D5 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

Win XP
D5 Ent
BeitragVerfasst: Mo 06.10.03 21:36 
Dafür kannst Du die Eigenschaft Tag des TSpeedButton benutzen.

ausblenden 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 user profile iconUGrohne: Code- durch Delphi-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".


Zuletzt bearbeitet von Christian S. am Mo 06.10.03 21:40, insgesamt 1-mal bearbeitet
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Mo 06.10.03 21:39 
Gebe jedem button ein TAG (integer) mit, andem du erkennen kannst, welcher der Buttons gedrückt wurde.

bsp:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
MyForm = Class(TForm)
  procedure MyButtonClick(Sender:TObjekt);
...
end;


in deiner For-Schleife:

ausblenden Delphi-Quelltext
1:
2:
Speed[][].OnClick := MyButtonClick;
Speed[][].Tag:= 1;
...

in der Methode Click;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure MyForm.MyButtonClick();
begin
  with  sender as TSpeedButton do
  case Tag of
    1// tue was;
    2://
  end;
end;


// sind nur Fragmente, so aus'm Schädel geschrieben
grez
msch

//EDIT Da war wohl jemand schneller :-)

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?


Zuletzt bearbeitet von MSCH am Di 07.10.03 15:32, insgesamt 1-mal bearbeitet
kasi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

Win XP
D5 Ent
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 197

Win XP Prof
D5 Prof
BeitragVerfasst: Di 07.10.03 16:45 
Thx very much, klappt jetzt wunderbar