![]() |
Eine Procedure auf 22 Buttons...
Hallo Profis,
ich versuch nun mal meine Frage verständlich zu formulieren... Ich hab 22 Buttons (Name: cb10 bis cb31), dazu entsprechend 22 Proceduren, welche bis auf eine Kleinigkeit abweichen. Nun wie kann ich alles in eine Procedure stecken? ich muss bei Klick auf einen der Buttons feststellen können, welchen der Buttons ich geklickt habe und die Nummer des Buttons extrahieren. Beispiel: Klicke ich auf cb27 muss ich die 27 extrahieren. Klicke ich auf cb12 muss ich die 12 extrahieren. Wie könnte man das lösen? Sorry, bin noch ziemlicher Anfänger in Sachen Delphi und bitte Euch daher um Hilfe. Gruß beanbear6 |
Re: Eine Procedure auf 22 Buttons...
Hi!
Sicher, dass diese Frage, was mit Datenbanken zu tun hat? Schau dir mal den Paramter "Sender" an. Der enthält das auslösende Objekt. Du musst dann nur allen Buttons die selbe Prozedur zuweisen. Grüße, Frederic |
Re: Eine Procedure auf 22 Buttons...
Guten Abend,
jeder Butten hat eine Caption darin ist der Name enthalten. Alternativ kannst Du auch den Button.Tag mit entsprechenden Werten belegen - dann brauchst Du nicht extrahieren. Grüße Klaus |
Re: Eine Procedure auf 22 Buttons...
Hallo Leute,
wie gesagt, ich bin da einfach noch zu frisch in Delphi. Mit Sender kann ich nichts anfangen... Hilfe in Delphi ist auch sehr dürftig... Und mit .Tag... :shock: Muss ich da alle Buttons gleichzeitig markieren oder oh wie? Gruß beanbear6 Könnt Ihr mir eventuell mit ein oder zwei Zeilen Quellcode helfen? Ich will ja keine Lösung, nur nen Ansatz dazu... :stupid: |
Re: Eine Procedure auf 22 Buttons...
Zitat:
Gut, Tags würden sich auch nicht ändern, ist aber doch sehr mühsam, jedem Button auch noch ein Tag zu vergeben. (... und welches Pferd springt höher als es muss ...) Auf jeden Fall würde ich den ausführenden Code nicht direkt im OnClick-Ereignis ausführen, sondern in einer eigenen procedure mit entsprechenden Parametern. Das OnClick-Ereignis stellt dann nur noch die Parameter anhand des benutzten Buttons zusammen und ruft dann die procedure auf. Dadurch schafft man auch die empfohlene Trennung von Ein-/Ausgabe und Verarbeitung. cu Oliver
Delphi-Quellcode:
Diese procedure muss dann natürlichem im OI jedem Button zugewiesen werden (siehe links bei Ereignisse)
procedure TForm1.Button1OnClick( Sender : TObject );
begin if Sender = Button1 then MachWas; if Sender = Button2 then MachWasAnderes; end; |
Re: Eine Procedure auf 22 Buttons...
Wie gesagt ist aber <Button>.Tag bzw. dann Sender.Tag die bessere Option.
Dabei handelt es sich um eine Integer-Eigenschaft jeder Komponente, die frei belegt werden kann. |
Re: Eine Procedure auf 22 Buttons...
Und das Beste: einfache Integer-Vergleiche lassen a) einfacher vergleichen und b) kann man auch CASE verwenden.
Hab mal 'ne komplette GUI nud auf .Tag aufgebaut. Hat zwar einige Zeit gebraucht, bis alle Komponenten ihren Tag definiert hatten, aber danach ging es um so einfacher. In .Tag war die Komponenten ID und in den höheren Dezimalstellen einige Zusatzinfos kodiert, so lassen sich locker mehrere hundert Komponenten über 'ne Hand voll Funktionen verwalten, vom Speichern und Laden der Werte über die Eingabeprüfungen, bis hin zur Auswertung. Im .Tag waren alle nötigen Infos dafür kodiert, so daß man nirgendwo weitere Infos ablegen muß. |
Re: Eine Procedure auf 22 Buttons...
Die möglichen Werte der Tags kann man auch in Konstanten hinterlegen
|
Re: Eine Procedure auf 22 Buttons...
Hallo,
Tag im Object-Inspector setzen. cb17 bekommt also die 17 Dann eine neue Prozedur definieren, also im Interface + im Implementation
Delphi-Quellcode:
Diese im Object-Inspector Prozedur beim OnClick
procedure TForm1.OnButtonClick(Sender : TObject);
begin with Sender As TButton do begin TuWas(Tag); end; end; procedure TForm1.TuWas(Nummer: Integer); begin end; der einzelnen Buttons auswähhlen (über die ComboBox) Heiko |
Re: Eine Procedure auf 22 Buttons...
Hier teilen sich wieder die Meinungen ;-)
Die finde die Abfragen über "if sender = BtnMachwas" lesbarer und weniger fehleranfälliger, als die Arbeit mit Tags. Wenn ein Button "aus irgendeinem Grund" gelöscht wird (Kann ja auch eine Checkbox o.ä. sein) meldet der Compiler zumindest eine Fehlermeldung. Bei Abfrage über Tags kompiliert der einfach durch. Aber wie gesagt: Geschmackssache! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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 by Thomas Breitkreuz