Dynamische Buttons auslesen

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Dynamische Buttons auslesen

Beitrag von theo »

Die Möglichkeit, welche mir als erstes einfallen würde wäre, durch "feld" rattern und die schauen welcher Button dem Sender entspricht (Pointer vergleichen). Das ginge auch ohne zusätzliche Daten und müsste bei 8x8 auch "drin liegen".

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Dynamische Buttons auslesen

Beitrag von pluto »

Code: Alles auswählen

inherided OnClick := MyButtonClick;
Das ist gar nicht notwendig. Du kannst die Methode Click direkt überschreiben, Theoretisch. Es gibt ja auch Methoden wie MouseDown, daher sollte es auch Click als Methode geben....

Ich meinte, jetzt, je nach seinen Fähigkeiten, dürfte das einfach oder schwer bzw. ungewohnt sein. Jedoch ist dürfte das Parsen noch aufwendiger sein bzw. schwerer sein....
MFG
Michael Springwald

m3zz0m1x
Beiträge: 12
Registriert: Do 25. Feb 2010, 13:50

Re: Dynamische Buttons auslesen

Beitrag von m3zz0m1x »

hm also danke auf jeden fall an alle, am besten gefällt mir die methode, eine neue button klasse zu erstellen, allerdings ist mir ncoh nicht ganz klar wie das funktioniert,
also kann ich dann einfach schreiben:

Code: Alles auswählen

feld[x][y].onclick:=@globalclick(x,y)
So hab cih das jetz zumindest verstanden...
oder muss ich trotzdem noch zusätzlich was machen?

Ich habs mittlerweile auch anders gelöst wobei das sicherlich der schlechteste weg ist, ich hab einfach für jeden x,y eine eigenes überweisen geschreiben^^ sprich

Code: Alles auswählen

feld[1][1].onclick:=@click11
feld[1][2].onclick:=@click12
[...]
feld[8][8].onclick:=@click88
und dann in clickxy jeweils

Code: Alles auswählen

globalclick(x,y)
das ganze is natürlich keine gute lösung alleine wegen dem eiwig langem quelltext^^
Werd auf jeden fall versuchen einen der hier geannten lösungsvorschläge umzusetzen :)

MFG m3zz0

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Dynamische Buttons auslesen

Beitrag von pluto »

Code: Alles auswählen

So hab cih das jetz zumindest verstanden...
oder muss ich trotzdem noch zusätzlich was machen?
Das kannst du so weiter hin machen, ist aber nicht erforderlich. Du kannst direkt die Click Methode überschreiben in der abgeleiteten Klasse.
Ich habs mittlerweile auch anders gelöst wobei das sicherlich der schlechteste weg ist, ich hab einfach für jeden x,y eine eigenes überweisen geschreiben^^ sprich

Code: Alles auswählen

feld[1][1].onclick:=@click11
feld[1][2].onclick:=@click12
[...]
feld[8][8].onclick:=@click88
Eigentlich brauchst du nur einen "Namen" zu vergeben beim erstellen. Die OnClick Procedure hat einen Sender, der beinhaltet die Komponente die Angeklickt wurde:
(Sender as TButton). So kommst du an den Werten ran. So gesehen brauchst du das 2D Array gar nicht mehr...
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Dynamische Buttons auslesen

Beitrag von mschnell »

pluto hat geschrieben:

Code: Alles auswählen

inherided OnClick := MyButtonClick;
Das ist gar nicht notwendig. Du kannst die Methode Click direkt überschreiben,
Der Sinn hier ist ein und dieselbe Methode für alle Instanzen zu verwenden. Geht das so ?

-Michael

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Dynamische Buttons auslesen

Beitrag von pluto »

Theoretisch müsste das so gehen, da ja alle Komponenten von der selben Klasse abgeleitet sind. Es kommt drauf an, ob es Sinvoll ist, die Methode zu überschreiben oder ein Externes Event zu verwenden.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Dynamische Buttons auslesen

Beitrag von theo »

Warum so kompliziert?

Durch's Array rattern und

if feld[X][Y]=Sender then //X und Y zurückgeben.

reicht doch?

m3zz0m1x
Beiträge: 12
Registriert: Do 25. Feb 2010, 13:50

Re: Dynamische Buttons auslesen

Beitrag von m3zz0m1x »

also ich habe das ganze nun (mit hendy_'s hilfe :D) gelöst.
ich gebe jedem button ein tag bestehend aus

Code: Alles auswählen

tag:=strtoint(inttostr(x)+inttostr(y))
dann kann ich über

Code: Alles auswählen

x:=(Sender as Tbutton).tag div 10;
y:=(sender as Tbutton).tag MOD 10;
x bzw y auslesen :)
Ich glaube das wurde auch versucht mir zu erklären, leider habe ich das ganze an der stelle nicht so recht verstanden^^
naja danke an alle für die hilfe :)
m3zz0

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: Dynamische Buttons auslesen

Beitrag von hendy »

nu ja, die eigentliche hilfe kam von hier, nur ich hatte das Pech, das dir erklären zu müssen :D
Dankt monta !!

Antworten