![]() |
Array of TObject - Bei Ereignis abfragen der Position
Hallo Leute,
ich habe eine Array of Array of :TButton, allen Buttons wird die selbe OnClick Procedur zugewiesen. Wie kann ich von Button[x,y] , im OnClick Ereignis x & y bestimmen! Welcher der Button wurde gerückt? Ich wollte nicht unendlich viele OnClick Proceduren schreiben! Danke für die Hilfe! Gruß Thomas |
Re: Array of TObject - Bei Ereignis abfragen der Position
Du könntest den Sender-Parameter auswerten. Wenn Du aber noch X- und Y-Index brauchst, wirst Du um 2 Schleifen wohl nicht herumkommen (zumindest fällt mir gerade nichts anderes ein).
|
Re: Array of TObject - Bei Ereignis abfragen der Position
Mahlzeit,
wie groß kann denn das Array werden? Ich würde eventuell TButton.tag entsprechend der Position vorbelegen. Button.tag mod ? = xPosition Button.tat div ? = yPosition. Grüße Klaus |
Re: Array of TObject - Bei Ereignis abfragen der Position
Über TButton(Sender).left und TButton(Sender).top kommst du auf die gewünschten Daten.
|
Re: Array of TObject - Bei Ereignis abfragen der Position
Zitat:
|
Re: Array of TObject - Bei Ereignis abfragen der Position
Noch mal kurz zum Thema,
im Moment lös ich es so
Delphi-Quellcode:
Geht das wirklich nicht eleganter?
Button[x,y].Tag:=x
Button[x,y].Designinfo:=y |
Re: Array of TObject - Bei Ereignis abfragen der Position
Zitat:
Es fallen einem leicht 5 und mehr Wege ein dieses Problem zu lösen, die Frage ist, wofür brauchst du das? Ob eine Lösung elegant ist, ist von der Problemstellung abhängig (die wir noch nicht kennen). Vielleicht ist schon das array of array of TButton unelegant? Vielleicht musst du nur deine Buttons in der Form btn001x001 benennen? Vielleicht ist es sinnvoll einene eigne Button-Klasse mit X und Y Eigenschaft zu entwickeln? Oder es reich doch X und Y in der Tag Eigenschaft zu codieren. Ausgehend von dem was ich bisher über das Problem weiß, würde ich zu Schleifen-Methode tendieren. Das Array of Array of TButton enthält bereits die benötigte Information, wozu also noch ein Tag in Abhängigkeit davon setzen. Da du hier von Button-Clicks sprichst sollte das ganze auch nicht zeitkritsch sein. Aber ob es elegant ist...?
Delphi-Quellcode:
function TForm1.TrySenderToXY(Sender: TObject; var X, Y: Integer): Boolean;
var i, j: Integer; btn: TButton; begin Result := False; if not (Sender is TButton) then Exit; btn := TButton(Sender); for i := Low(xyButtons) to High(xyButtons) do for j := Low(xyButtons[i]) to High(xyButtons[i]) do if xyButtons[i, j] = btn then begin X := i; Y := j; Result := True; Break; end; end; procedure TForm1.ButtonClick(Sender: TObject); var x, y: Integer; begin if TrySenderToXY(Sender, X, Y) then Caption := Format('Clicked at %d x %d', [x, y]) else Caption := 'Unknown clicked'; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:58 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