Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Array of TObject - Bei Ereignis abfragen der Position (https://www.delphipraxis.net/151751-array-tobject-bei-ereignis-abfragen-der-position.html)

Hallo_Thomas 31. Mai 2010 10:51


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

DeddyH 31. Mai 2010 10:55

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).

Klaus01 31. Mai 2010 11:15

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

raga-man 31. Mai 2010 11:26

Re: Array of TObject - Bei Ereignis abfragen der Position
 
Über TButton(Sender).left und TButton(Sender).top kommst du auf die gewünschten Daten.

Blup 31. Mai 2010 15:45

Re: Array of TObject - Bei Ereignis abfragen der Position
 
Zitat:

Zitat von raga-man
Über TButton(Sender).left und TButton(Sender).top kommst du auf die gewünschten Daten.

Nach Bildschirmkoordinaten wurde hier aber nicht gefragt... :roll:

Hallo_Thomas 31. Mai 2010 21:09

Re: Array of TObject - Bei Ereignis abfragen der Position
 
Noch mal kurz zum Thema,

im Moment lös ich es so

Delphi-Quellcode:
Button[x,y].Tag:=x
Button[x,y].Designinfo:=y
Geht das wirklich nicht eleganter?

HeZa 1. Jun 2010 00:29

Re: Array of TObject - Bei Ereignis abfragen der Position
 
Zitat:

Zitat von Hallo_Thomas
Geht das wirklich nicht eleganter?

Warum brauchst du das eleganter? Was verstehst du unter eleganter?

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