![]() |
Eine Procedur für viele Buttons, wie? (gelöst)
Na toll ich muss den Artikel nochma schreiben, I-Net hat gespackt :(
Also: Ich hab ne bestimmte Anzahl von Buttons und (der Code stimmt nicht, aber zur Verdeutlichung) jedesmal wenn auf einen Button geklickt wird, soll dessen Länge verdoppelt werden... Also müsste ich:
Delphi-Quellcode:
Jetzt frage ich mich:
Procedure Btn1Click;
Begin bla; end; Procedure Btn2Click; Begin bla; end; Procedure Btn3Click; Begin bla; end; //und so ewig weiter machen Könnte man nicht mit der schon mitgelieferten Sender VARiable das irgwndwie dynamisch machen? also:
Delphi-Quellcode:
So was is der Art???
procedure btn1Click(sender:Object);
begin sender.width:=sender.width*2; end; Thx schonmal MfG simon |
Re: Eine Procedur für viele Buttons, wie?
Jepp.
Delphi-Quellcode:
(Sender as TButton).Width := (Sender as TButton).Width * 2;
|
Re: Eine Procedur für viele Buttons, wie?
Aso ok cool^^
Muss man angeben welcher "typ" von TObject das is? Also was denn das nen bitBtn ist? kann man das abfragen und dann ändern? ein BitBtn hat ja z.B auch width... Geht das? mfg und thx schonmal simon |
Re: Eine Procedur für viele Buttons, wie?
Ja, das geht auch
Delphi-Quellcode:
Und wenn Du Dir das Leben weiter vereinfachen möchtest, dann nimm die Prozedur Btn1Click und verwende sie für alle Deine Button auf einmal. Durch den übergebenen Sender weiss der Event wen er breiter machen muß. Alle Buttons auswählen und als Ereignis für OnClick einfach Btn1Click wählen. Damit fallen die Prozeduren Btn2Click / Btn3Click aus Deinem Quellcode weg!
If Sender is TButton then...
begin TypeCast end; If Sender is TBitButton then begin TypeCast end; |
Re: Eine Procedur für viele Buttons, wie?
Zitat:
Zitat:
Delphi-Quellcode:
Sender.ClassName
|
Re: Eine Procedur für viele Buttons, wie?
TObject ist die Mutter aller Objekte und kennt nur das, was in ihr eingeführt wurde.
Willst du aber auf etwas zugeifen, welches erst in einem Nachfahren definiert wurde, dann mußt du mindestens die Klasse angeben, in welcher die gewünschte Eigenschaft eingeführt wurde. Für .Width wäre das also mindestens TControl (von welchem TButton ja irgendwann mal abgeleitet wurde) |
Re: Eine Procedur für viele Buttons, wie?
:thumb: :thumb:
Danke Leute, super, genau danach hab ich gesucht^^ bis denne simon |
Re: Eine Procedur für viele Buttons, wie?
ok, noch ne kleine frage, hab jetzt:
Delphi-Quellcode:
So weit so gut, wenn ich auf nen Button klicke wird er doppelt so breit
procedure TForm1.Button1Click(Sender: TObject);
begin If Sender is TButton then begin (Sender as TButton).Width := (Sender as TButton).Width * 2; end; If Sender is TBitBtn then begin (Sender as TBitBtn).Width := (Sender as TBitBtn).Width * 2; end; end; ABER, wenn ich auf nen BitButton klicke wird er viermal so breit!!! HÄ? Warum das? simon |
Re: Eine Procedur für viele Buttons, wie?
Du musst generell auf den Typ Casten und kannst dann auf deren Eigenschaften zugreifen. Einen Cast kannst du generell über
Delphi-Quellcode:
machen. Wenn Sender jetzt aber nicht mit TButton kompatibel ist (also kein TButton ist oder nicht von TButton abgeleitet wurde) bekommst du eine hässliche Zugriffsverletzung. Um das ein bisschen schöner zu gestalten kannst du den Cast so machen:
TButton(Sender).Width
Delphi-Quellcode:
Wenn das jetzt fehlschlägt kommt eine vielsagende schöne Fehlermeldung. Überprüfen, ob du Sender auf TButton casten kannst, geht über
(Sender as TButton).Width
Delphi-Quellcode:
Zu deinem Width-Problem: Width wird in TControl eingeführt. Du kannst also über
if (Sender is TButton) then
Delphi-Quellcode:
die Breite von TButton und von TBitBtn ändern, da TBitBtn auch von TControl abgeleitet ist.
if (Sender is TControl) then
(Sender as TControl).width := 55; |
Re: Eine Procedur für viele Buttons, wie?
Vielleicht weil ein TBitBtn auch ein TButton ist :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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