2015-01-05 10 views
6

Ich suche nach einer Möglichkeit, ein Verfahren für mehrere Tasten zu verwenden. Es ist für ein Quiz, dass Sie Knopf 1 für Frage 1 drücken müssen, aber den gesamten Code für 36 Knöpfe kopieren und einfügen und die Variablen für 36 Knöpfe ändern ist nicht wirklich lustig für irgendjemanden.Gibt es eine Möglichkeit, ein Verfahren für mehrere Tasten in Pascal zu verwenden?

Also dachte ich, so etwas wie dies möglich wäre:

procedure TForm1.Button[x]Click(Sender: TObject); 
begin 
    DoTask[x]; 
end; 

X ist die Variable.

Ist so etwas möglich oder gibt es andere Möglichkeiten, das gleiche Ergebnis zu erhalten?

+0

Retrieve "x" von TButton (Sender) statt .name? Suchen Sie einfach rückwärts nach numerischen Ziffern. –

Antwort

6

Der einfachste Weg, dies zu tun ist:

  1. Nummerieren Sie die Tasten, um die Tag Eigenschaft im Objektinspektor (oder in Code, wenn sie erstellt wurden), um sie leicht auseinander halten verwenden. (Oder geben Sie den Wert an, der an Ihre Prozedur/Funktion übergeben werden soll, wenn auf diese Schaltfläche geklickt wird.)

  2. Erstellen Sie einen Ereignishandler und weisen Sie ihn allen Schaltflächen zu, die mit demselben Code behandelt werden sollen.

  3. Der Sender Parameter, den das Ereignis empfängt, ist die Schaltfläche, auf die geklickt wurde, die Sie dann als TButton umwandeln können.

    procedure TForm1.ButtonsClick(Sender: TObject); 
    var 
        TheButton: TButton; 
    begin 
        TheButton := Sender as TButton; 
        DoTask(TheButton.Tag); 
    end; 
    
+0

Nun, ich danke Ihnen, Sir, für die Hilfe. Aber ich bin ziemlich, wenn nicht wirklich unerfahren mit Pascal so ... Könnte Schritt 2 weiter ausführen, wenn Sie so nett wären? Ich weiß nicht wirklich, wie man den Event Handler benutzt, geschweige denn einen von Grund auf neu zu erstellen, auch wenn es ein grundlegender ist. – Pascalerino

+0

Doppelklicken Sie auf eine der Schaltflächen in der IDE, um die Shell der Routine zu erstellen (z. B. "Button1Click"). Verwenden Sie die Registerkarte "Ereignisse" für diese Schaltfläche im Objektinspektor, um sie in etwas allgemeineres umzubenennen (z. B. "ButtonsClick"). Klicken Sie bei gedrückter Strg-Taste auf alle Schaltflächen des Formulars, für das Sie dasselbe Ereignis freigeben möchten, wechseln Sie zur Registerkarte "Objektinspektor-Ereignisse" und wählen Sie das generische Ereignis "ButtonsClick" als OnClick-Handler für alle Schaltflächen aus. (Oder geben Sie sie einfach einzeln mit dem Objektinspektor an.) –

+0

Nun danke, das macht es viel klarer! Aber noch eine kurze Frage ist, wie kann ich das Tbutton.tag einer Variablen zuweisen? QuestionNumber: = TButton.Tag; wird aus offensichtlichen Gründen nicht funktionieren – Pascalerino