Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Auf die Befehle eines Buttons zugreifen (https://www.delphipraxis.net/126031-auf-die-befehle-eines-buttons-zugreifen.html)

ark4869 16. Dez 2008 16:18


Auf die Befehle eines Buttons zugreifen
 
Hi!
Ich wollte mal fragen, ob es möglich ist, die Befehle, die ich in einem ButtonClick Ereignis ausführe, weiter irgendwo zu verwenden, indem ich dann, wie bei einer Prozedur, auf den Button irgendwie zugreife?

Sonst muss ich daraus wohl oder übel ganz doll viele Prozeduren machen.

Ob das eine oder andere weniger/mehr OOP ist, ist mir relativ egal- hauptsache es funktioneirt :D Unser Lehrer mag eh kein OOP sagt er ständig- auch wenn er es uns trotzdem beibringen muss. Aber erstmal will ich dass es funktioniert.

Achja: Wann brauch ich Klammern um If / If Not abfragen?

mkinzler 16. Dez 2008 16:22

Re: Auf die Befehle eines Buttons zugreifen
 
Du kannst mehrere Bedienelemente(Button) mit der selben Eventmethode verbinden. Im Parameter Sender befindet sich dann eine Referenz auf das auslösenden Element

ark4869 16. Dez 2008 16:23

Re: Auf die Befehle eines Buttons zugreifen
 
...? Bahnhof :D
Wenn ich das auch nur etwas verstanden hab, hab ich mich unklar oben ausgedrückt: Die verschiedenen Buttons haben verschiedenen Befehler, aber ich möchte gerne in einer neuen "Prozedur" alle davon neu benutzen.

mkinzler 16. Dez 2008 16:25

Re: Auf die Befehle eines Buttons zugreifen
 
Du kannst bei mehreren Button die selbe Methode im OI auswählen. im Code verweist dann Sender auf den Button der angeklickt wurde

mkinzler 16. Dez 2008 16:30

Re: Auf die Befehle eines Buttons zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure T<Form>.Button1Click(Sender: TObject);
begin
    //Methode für mehrere Buttons
    if (Sender as TButton).Name = 'Button1' then
    begin
      //Button1
    end
    else
    begin
      //Button2
    end;
end;

DeddyH 16. Dez 2008 16:31

Re: Auf die Befehle eines Buttons zugreifen
 
Ich denke, Du meinst so etwas:
Delphi-Quellcode:
procedure TFormBla.ButtonWuppdiClick(Sender: TObject);
begin
  Button1Click(Button1);
  Button2Click(Button2);
  Button3Click(Button3);
end;
Damit werden die Events der Buttons nacheinander ausgeführt.

ark4869 16. Dez 2008 16:31

Re: Auf die Befehle eines Buttons zugreifen
 
Tut mir Leid, aber ich glaub ich werd echt einfach eigene Prozeduren schreiben. Auch wenn ich zumindest zu Recht nicht schlecht in Informatik stehe versteh ich echt nicht, was mir das bringen soll, wennich im OI(WO im OI?) irgendeine Methode irgendwie reinschreibe und dass dann im Sender der Buttons steht. Ich will auf die verscheienden Aktionen(es geht darum, ähnlich den Türmen von Hanoi Sachen von einem Stack ins andere zu verschieben, und die Buttons haben wir da schon im Programm, mit den verschiedenen Sachen, von A nach B, von B nach C etc. pp, und ich möcht diese Sachen gerne weiterverwenden ohne jedes Mal die ganzen Befehle neu zu schreiben)

ED:

Deddy, danke! So funktioniert es! Aus welchem Grund muss man den Button als Sender in die Klammern schreiben, warum reicht nicht Button1Click?

DeddyH 16. Dez 2008 16:37

Re: Auf die Befehle eines Buttons zugreifen
 
Das sind TNotifyEvents, die verlangen nunmal einen Sender-Parameter.

Noedel 16. Dez 2008 16:41

Re: Auf die Befehle eines Buttons zugreifen
 
Zitat:

Zitat von ark4869
Achja: Wann brauch ich Klammern um If / If Not abfragen?

wie du schon sagtest, wenn du nen "zusatz" wie
Code:
and
or
not
usw.

in deine If abfrage brauchst, dann setz da klammern drum
Bsp

Delphi-Quellcode:
  if (not zahl1 = 1) and ( (zahl2 <> 3) or (zahl3 = 10) ) then...

jfheins 16. Dez 2008 16:42

Re: Auf die Befehle eines Buttons zugreifen
 
Weil du mit dem Befehl die Funktion aufrufst und diese nunmal einen Parameter erwartet.

Alternativen sind:

Button1.Click;

oder

Button1Click(nil);

Sauberer ist aber folgende Variante:
Delphi-Quellcode:
procedure TForm1.MoveAtoC
begin // Methode des Formulars. Oben muss unter private ein "procedure MoveAtoC;" (ohne die ")
  // Code
end;

procedure TForm1.Button1Click(Sender: TObject)
begin // Button Event ruft nur die Prozedur auf
  MoveAtoC;
end;

procedure Blablabla
begin
  MoveAtoC;
end;
Damit hast du den eigentlichen Zug (etwas von A nach C zu bewegen) in eine seperate Prozedur ausgelagert, und rufst diese dann auf ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 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