Das Doppelklickverhalten ändern
Nach oben zu Komponenteneditoren hinzufügen
Wenn der Benutzer auf die Komponente doppelklickt, wird die Methode Edit des Komponenteneditors aufgerufen. Standardmäßig wird dadurch der erste dem lokalen Menü hinzugefügte Befehl ausgeführt. Im obigen Beispiel wird durch Doppelklicken auf die Komponente also der Befehl DoThis ausgeführt.
Im Allgemeinen ist es sinnvoll, den ersten Befehl auszuführen. In folgenden Situationen empfiehlt es sich jedoch, dieses Standardverhalten zu ändern:
- Sie fügen dem Kontextmenü keine Befehle hinzu.
- Sie wollen ein Dialogfeld anzeigen, in dem mehrere Befehle zusammengefasst sind.
Das Standardverhalten kann durch Überschreiben der Methode Edit geändert werden. Im folgenden Beispiel wird ein Dialogfeld geöffnet, wenn der Benutzer auf die Komponente doppelklickt:
procedure TMyEditor.Edit;
var
FontDlg: TFontDialog;
begin
FontDlg := TFontDialog.Create(Application);
try
if FontDlg.Execute then
MyComponent.FFont.Assign(FontDlg.Font);
finally
FontDlg.Free
end;
end;
void __fastcall TMyEditor::Edit(void)
{
TFontDialog *pFontDlg = new TFontDialog(NULL);
pFontDlg->Execute();
((TMyComponent *)Component)->Font = pFontDlg->Font;
delete pFontDlg;
}
Hinweis: Wenn bei einem Doppelklick auf die Komponente der Quelltext-Editor für eine Ereignisbehandlungsroutine angezeigt werden soll, verwenden Sie als Basisklasse für Ihren Komponenteneditor TDefaultEditor anstelle von TComponentEditor. Überschreiben Sie dann anstelle von Edit die geschützte Methode TDefaultEditor:EditProperty. EditProperty durchsucht alle Ereignisbehandlungsroutinen der Komponente und öffnet die zuerst gefundene. Sie können jedoch auch wie im folgenden Beispiel nach einem bestimmten Ereignis suchen: Beispiel:
procedure TMyEditor.EditProperty(PropertyEditor: TPropertyEditor;
Continue, FreeEditor: Boolean)
begin
if (PropertyEditor.ClassName = 'TMethodProperty') and
(PropertyEditor.GetName = 'OnSpecialEvent') then
DefaultEditor.EditProperty(PropertyEditor, Continue, FreeEditor);
end;
void __fastcall TMyEditor::EditProperty(TPropertyEditor* PropertyEditor,
bool &Continue, bool &FreeEditor)
{
if (PropertyEditor->ClassNameIs("TMethodProperty") &&
CompareText(PropertyEditor->GetName, "OnSpecialEvent") == 0)
{
TDefaultEditor::EditProperty(PropertyEditor, Continue, FreeEditor);
}
}