Autor Beitrag
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Sa 08.03.03 19:11 
Hi Leute,

ich habe da ein Problem, ich erstelle zur Laufzeit mehrere TSpeedButtons, was ja auch hervorragend funktioniert. Nur ist das Problem, dass die Anzahl niemals Konstant sein wird. Wenn auf einen der Button geklickt wird soll ein SELECT-Befehl ausgeführt werden und das ergebnis soll in einem DBGrid angezeigt werden. Die Button haben die Namen der einzelnen Tabellen. Nun möchte ich gerne, dass wenn ich Button "A" anklicke der SELECT-Befehl für die Tabelle A ausgeführt wird. Wie kann ich das machen, dass ich jedem zur Laufzeit erstellten Button die gleiche Procedure zuweise und den Namen des angeklickten Buttons in den SELECT-Befehl aufnehme ?
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Sa 08.03.03 19:20 
Hallo,

Du kannst einfach die Variable Sender verwenden. Diese enthällt den Namen des aufrufenden Objektes:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure MyButtonClick(Sender : tObject);
BEGIN
  IF (Sender IS tSpeedButton) THEN BEGIN
    ShowMessage(tSpeedButton(Sender).Caption);
  END;
END;

Wenn du in der Funktion häufiger auf das Objekt zugreifen musst, dann ist ein Hilfsvariable vom entsprechenden Typ recht praktisch;
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure MyButtonClick(Sender : tObject);
  VAR
    Helfer : tSpeedButton;
BEGIN
  IF (Sender IS tSpeedButton) THEN BEGIN
    Helfer := tSpeedButton(Sender);
    ShowMessage(Helfer.Caption);
  END;
END;


Gruß
Klabautermann
bis11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Sa 08.03.03 19:30 
Ich danke Dir Klabautermann für Deine schnelle Antwort, funktioniert hervorragend. Kann ich das gleiche Prinzip auch anwenden um jedem Button eine andere Funktion zuzuweisen ?
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 09.03.03 16:02 
Hallo,
bis11 hat folgendes geschrieben:
Kann ich das gleiche Prinzip auch anwenden um jedem Button eine andere Funktion zuzuweisen ?

ich verstehe die Frage nicht ganz. Wie willst du jeden Button eine andere Funktion zuweisen? Das must du ja schon beim erstellen machen.

Wenn du aber Abhängig vom Button etwas anderes machen willst ist es genau das obeb beschriebene Prinziep.
Nehem wir an, du hast mehrere Button Gruppen. Gruppe 1 ist für Designfragen zuständig, Gruppe macht Berechnungen und Gruppe drei ist für Datenbankanfragen zuständig.
Alle drei Gruppen werden Dynamisch erzeugt.
Jetzt hast du 2 Möglichkeiten: Entweder du weist diesen direcht beim erzeugen unterschiedliche Behandlungsmethoden zu oder du markierst sie ihrer Gruppe ensprechend (z.B. unter zurhilfenahme der Eigenschft .Tag) und klabüserst dass dann in einer Zentralen behandlungsroutine wieder auseinander:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure MyButtonClick(Sender : tObject);
 VAR
  Helfer : tSpeedButton;
BEGIN
 IF (Sender IS tSpeedButton) THEN BEGIN
  Helfer := tSpeedButton(Sender);
  CASE Helfer.Tag OF
    1 : DoDesignJob(Helfer);
    2 : DoCalcJob(Herlfer);
    3 : DoDBJob(Helfer);
    ELSE
       Panic;
  END;
 END;
END;


Ich weiß zwar nicht ob diese Antwort deiner Frage entspricht, aber vieleicht war es das ja ;).

Gruß
Klabautermann
bis11 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: So 09.03.03 17:14 
Die Antwort ist genau, dass was ich gesucht habe. Ich danke Dir.