2012-12-20 4 views
6

Ich habe eine TToolBar in Entwurfszeit ohne ToolButtons erstellt. Meine Idee ist, ToolButtons in Runtime zu erstellen und sie dort zu platzieren, wenn meine Formulare erstellt werden, nur um dem Benutzer zu zeigen, welche Formulare geöffnet werden, ohne ein "Windows" -Menü im Hauptmenü öffnen zu müssen.Wie kann ich das OnClick-Ereignis eines ToolButtons zur Laufzeit zuweisen?

Ich habe eine Einheit namens NavigationUtils.pas, die ich verwende, um die Verfahren/Funktionen über die Navigation zu speichern (wie die Erstellung der Schaltflächen, wenn meine Formulare erstellt werden).

Die Frage ist: Wie kann ich das OnClick-Ereignis konfigurieren, wenn die ToolButtons erstellt werden?

+1

'NewToolButton.OnClick: = ...' –

+1

Hallo, @DavidHeffernan, gut, ich habe versucht, Dies und bekam den Fehler: ** NavigationUtils.pas (24): Inkompatible Typen: 'TNotifyEvent' und 'Prozedur, nicht typisierte Zeiger oder untypisierte Parameter' ** – juniorgarcia

+0

Nun, das Problem ist genau so, wie beschrieben. Sie versuchen, etwas zuzuweisen, das kein 'TNotifyEvent' ist. –

Antwort

13

Aus den Kommentaren wird deutlich, dass Sie TNotifyEvent dem Ereignis OnClick nicht zuweisen. Die Erklärung von TNotifyEvent ist:

TNotifyEvent = procedure(Sender: TObject) of object; 

So müssen Sie eine Prozedur, mit einem einzelnen Parameter des Typs TObject, und das Verfahren muss die Methode eines Objekts sein. So etwas wie folgt aus:

procedure TMyForm.ToolButtonClick(Sender: TObject); 

Und dann kann man es wie so zuweisen:

NewToolButton.OnClick := ToolButtonClick; 
+0

Ja und das Ereignis muss öffentlich sein. –

+0

@RolandBengtsson Nein. Es kann privat sein. –

+1

Hallo, @DavidHeffernan. Mann, ich habe gefunden, dass die Lösung dem folgt, was Sie gesehen haben, und das "MyOnClickEvent" im Hauptformular hinzufügt, wer eine Werkzeugleiste enthält, die in der Entwurfszeit gemacht wird. Ich habe gerade das Ereignis ** toolbarFormsCustomDrawButton ** der Symbolleiste konfiguriert, also habe ich den Sender des Absenders als Absender für die in Runtime erstellte Prozedur OnClick dieser Schaltfläche verwendet, die nach einem Formular mit der Beschriftung des Absenders (TToolButton) sucht. Vielen Dank für die Hilfe! – juniorgarcia

Verwandte Themen