![]() |
Den Index zurückbekommen
OK Edit:
Ich benutze ein ein paar selbsgenerierte Buttons. Es handelt sich hierbei um ein Zweidimensionales Array.
Delphi-Quellcode:
Erst mal's Danke für die Info's.
procedure erzeugen;
begin for i:= 1 to 9 do for j:= 1 to 9 do begin Buttons[i,j]:=TButton.Create(Form1); Buttons[i,j].Parent:=Form1; Buttons[i,j].OnClick:=Form1.Button1.OnClick; Buttons[i,j].Caption:='X'; Buttons[i,j].Left:=10+i*40; Buttons[i,J].Top:=10+j*40; Buttons[i,j].Width:=20; Buttons[i,j].height:=20; end; Das mit dem Sender brachte ich ihrgendwie nur bei eindimensionalen Array's zustande. Kann ich die ihrgendwie verknüpfen so nach dem Motto "(x,y):=" ? Und dass von Maja hab ich leider auch nicht so ganz verstanden. Mein Problem ist nun, wie kann ich rausfinden welcher Button gedrückt wurde? Oder mit anderen Worten gibt es einen Befehl um an die zwei Indexzahlen ranzukommen? Wäre super wenn ihr mir helfen könntet. merci Magu_ |
Re: Den Index zurückbekommen
Im Parameter Sender erhälst du eine Referenz auf den gedrückten Button. In diesem kannst du .Tag verwenden um den Index abzulegen.
|
Re: Den Index zurückbekommen
Hi und herzlich Willkommen in der DP :dp:
Leider ist es in der DP nicht all zu weit mit dem Hellsehen her (glaube da vermisst jmd. seine Glaskugel), aber auch Teesatzlesen u.A. klappt nur bedingt gut. Deshalb ist es immer schön, wenn die Leute die Hilfe wollen möglichst selbstständig auf die Idee kommen, zu sagen was genau ihr Problem ist. Zitat:
Zitat:
Zitat:
Gruß Der Unwissende (nicht falsch verstehen, wollte hier nur deutlich zeigen, dass du echt wenig Infos rausgibst. Mehr Informationen sind immer gut!) |
Re: Den Index zurückbekommen
Hallo
Eventuell hilft dir dieses ein wenig weiter!?
Delphi-Quellcode:
MJ
Procedure ButtonWerBistDu(Sender: TObject);
begin if sender is TButton Then ShowMessage(TButton(sender).Caption); end; |
Re: Den Index zurückbekommen
Tja Danke erstmalls.
Ich verstehe das letzte Post nicht wirklich. Inwiefern nützt mir diese Procedure etwas, da ja eh überall das gleiche in den Proceduren steht? Ich meine bei den Click's der einzelnen Buttons. Könnt ihr mir hier mir noch etwas unter die Arme greifen und mich auf das Offensichtliche hinweissen. Danke |
Re: Den Index zurückbekommen
Hast du für jeden Button eine eigene Methode? Dann würde ich dein Problem nicht verstehen.
Wenn du die selbe nimmst, was besser wäre, dann erhltst du wie erwähnt im Parameter Sender eine Referenz (Zeiger) auf den Button. |
Re: Den Index zurückbekommen
Zitat:
|
Re: Den Index zurückbekommen
Hi,
du könntest bei der Erstellung der Buttons jedem Button, wie schon vorgeschlagen wurde, über eine Laufvariable eine Identnummer in .TAG mitgeben.
Delphi-Quellcode:
MJ
...
var x : Integer; x := 0; ... begin inc(x); Buttons[i,j]:=TButton.Create(Form1); Buttons[i,j].Parent:=Form1; Buttons[i,j].Tag:=x; ... Procedure ButtonWerBistDu(Sender: TObject); begin if sender is TButton Then ShowMessage('Ich bin Button '+IntToStr(TButton(sender).Tag)); end; |
Re: Den Index zurückbekommen
Delphi-Quellcode:
Buttons[i,j].Tag:=i + (j shl 8);
Delphi-Quellcode:
Procedure ButtonWerBistDu(Sender: TObject);
var x, y : integer; begin if sender is TComponent Then begin x := TComponent(sender).Tag and 255; y := TComponent(sender).Tag shr 8; ShowMessageFmt('Ich bin Button x=%d, y=%d', [x,y]); end; end; |
Re: Den Index zurückbekommen
Hallo,
du hast den Index für jede Dimension (i und j) bereits an den Button geknüpft:
Delphi-Quellcode:
Du kannst im Ereignis-Code für OnClick() des Buttons jederzeit wieder auf Zeilen- und Spaltenindex zurückgreifen:
const
LEFT_MARGIN = 10; HORZ_DISTANCE = 40; TOP_MARGIN = 10; VERT_DISTANCE = 40; function TMainForm.CreateButton(iCol, iRow: Integer): TButton; begin Result := TButton.Create(self); with Result do begin // ... Left := LEFT_MARGIN + iCol * HORZ_DISTANCE; Top := TOP_MARGIN + iRow * VERT_DISTANCE; end; end;
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TMainForm.ButtonClick(Sender: TButton);
var iCol, iRow: Integer; begin with Sender as TButton do begin iCol := (Left - LEFT_MARGIN) div HORZ_DISTANCE; iRow := (TOP - TOP_MARGIN) div VERT_DISTANCE; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz