Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eine Procedur für viele Buttons, wie? (gelöst) (https://www.delphipraxis.net/150139-eine-procedur-fuer-viele-buttons-wie-geloest.html)

SimonRap 8. Apr 2010 13:46


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:
Procedure Btn1Click;
Begin
  bla;
end;
Procedure Btn2Click;
Begin
  bla;
end;
Procedure Btn3Click;
Begin
  bla;
end;
//und so ewig weiter machen
Jetzt frage ich mich:
Könnte man nicht mit der schon mitgelieferten Sender VARiable das irgwndwie dynamisch machen?
also:
Delphi-Quellcode:
procedure btn1Click(sender:Object);
begin
  sender.width:=sender.width*2;
end;
So was is der Art???

Thx schonmal
MfG simon

DeddyH 8. Apr 2010 13:48

Re: Eine Procedur für viele Buttons, wie?
 
Jepp.
Delphi-Quellcode:
(Sender as TButton).Width := (Sender as TButton).Width * 2;

SimonRap 8. Apr 2010 13:56

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

DelphiBandit 8. Apr 2010 13:59

Re: Eine Procedur für viele Buttons, wie?
 
Ja, das geht auch
Delphi-Quellcode:
If Sender is TButton then...
begin
  TypeCast
end;

If Sender is TBitButton then
begin
  TypeCast
end;
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!

mkinzler 8. Apr 2010 14:00

Re: Eine Procedur für viele Buttons, wie?
 
Zitat:

Muss man angeben welcher "typ" von TObject das is?
Ja denn jede Klasse ist von TObject direkt oder indirekt abgeleitet
Zitat:

kann man das abfragen und dann ändern?
Abfragen ja, aber ändern nicht. Wäre auch nicht sinnvoll
Delphi-Quellcode:
Sender.ClassName

himitsu 8. Apr 2010 14:01

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)

SimonRap 8. Apr 2010 14:03

Re: Eine Procedur für viele Buttons, wie?
 
:thumb: :thumb:
Danke Leute, super, genau danach hab ich gesucht^^
bis denne simon

SimonRap 8. Apr 2010 14:10

Re: Eine Procedur für viele Buttons, wie?
 
ok, noch ne kleine frage, hab jetzt:
Delphi-Quellcode:
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;
So weit so gut, wenn ich auf nen Button klicke wird er doppelt so breit
ABER, wenn ich auf nen BitButton klicke wird er viermal so breit!!!
HÄ?
Warum das?

simon

dominikkv 8. Apr 2010 14:11

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:
TButton(Sender).Width
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:
Delphi-Quellcode:
(Sender as TButton).Width
Wenn das jetzt fehlschlägt kommt eine vielsagende schöne Fehlermeldung. Überprüfen, ob du Sender auf TButton casten kannst, geht über
Delphi-Quellcode:
if (Sender is TButton) then
Zu deinem Width-Problem: Width wird in TControl eingeführt. Du kannst also über
Delphi-Quellcode:
if (Sender is TControl) then
  (Sender as TControl).width := 55;
die Breite von TButton und von TBitBtn ändern, da TBitBtn auch von TControl abgeleitet ist.

mkinzler 8. Apr 2010 14:12

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 04:09 Uhr.
Seite 1 von 2  1 2      

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