AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Array of TObject - Bei Ereignis abfragen der Position
Thema durchsuchen
Ansicht
Themen-Optionen

Array of TObject - Bei Ereignis abfragen der Position

Ein Thema von Hallo_Thomas · begonnen am 31. Mai 2010 · letzter Beitrag vom 1. Jun 2010
Antwort Antwort
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#1

Array of TObject - Bei Ereignis abfragen der Position

  Alt 31. Mai 2010, 11:51
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Array of TObject - Bei Ereignis abfragen der Position

  Alt 31. Mai 2010, 11:55
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).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Array of TObject - Bei Ereignis abfragen der Position

  Alt 31. Mai 2010, 12:15
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
Klaus
  Mit Zitat antworten Zitat
raga-man

Registriert seit: 21. Nov 2006
1 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Array of TObject - Bei Ereignis abfragen der Position

  Alt 31. Mai 2010, 12:26
Über TButton(Sender).left und TButton(Sender).top kommst du auf die gewünschten Daten.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#5

Re: Array of TObject - Bei Ereignis abfragen der Position

  Alt 31. Mai 2010, 16:45
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...
  Mit Zitat antworten Zitat
Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Array of TObject - Bei Ereignis abfragen der Position

  Alt 31. Mai 2010, 22:09
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?
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: Array of TObject - Bei Ereignis abfragen der Position

  Alt 1. Jun 2010, 01:29
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz