Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eine Procedure auf 22 Buttons... (https://www.delphipraxis.net/142736-eine-procedure-auf-22-buttons.html)

beanbear6 2. Nov 2009 23:03


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

fkerber 2. Nov 2009 23:06

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

Klaus01 2. Nov 2009 23:06

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

beanbear6 2. Nov 2009 23:13

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:

Sir Rufo 2. Nov 2009 23:14

Re: Eine Procedure auf 22 Buttons...
 
Zitat:

Zitat von Klaus01
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

Jeder Button hat von Haus aus einen eigenen Namen, der sich auch bei einer Lokalisierung nicht ändert.
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:
procedure TForm1.Button1OnClick( Sender : TObject );
begin
  if Sender = Button1 then MachWas;
  if Sender = Button2 then MachWasAnderes;
end;
Diese procedure muss dann natürlichem im OI jedem Button zugewiesen werden (siehe links bei Ereignisse)

mkinzler 3. Nov 2009 05:37

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.

himitsu 3. Nov 2009 06:16

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ß.

mkinzler 3. Nov 2009 06:32

Re: Eine Procedure auf 22 Buttons...
 
Die möglichen Werte der Tags kann man auch in Konstanten hinterlegen

hoika 3. Nov 2009 07:06

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:
procedure TForm1.OnButtonClick(Sender : TObject);
begin
  with Sender As TButton do
  begin
    TuWas(Tag);
  end;
end;



procedure TForm1.TuWas(Nummer: Integer);
begin
end;
Diese im Object-Inspector Prozedur beim OnClick
der einzelnen Buttons auswähhlen (über die ComboBox)


Heiko

bernau 3. Nov 2009 07:14

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 13:37 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