![]() |
TComponentEditor und Implementierung der Schnittstelle
Hallo!
Ich versuche zur Zeit, einen ComponentEditor zu registrieren, und kriege es nicht hin, mein Editor-Formular aus der implementierten Methode, Edit, der Schnittstelle zu starten. D.h. die Methode Edit wird vom OI nicht aufgerufen. Müssen denn noch andere Methoden auf eine bestimmte Art und Weise implementiert werden ? Übrigens: meinen Editor leite ich von TComponentEditor ab. |
Re: TComponentEditor und Implementierung der Schnittstelle
Hi Cicaro,
so hab ich das bei einer meiner Komponenten gemacht:
Delphi-Quellcode:
In der Methode Edit wird dann das Editor-Formular aufgerufen...
type
TMyComponentEditor = class(TComponentEditor) procedure ExecuteVerb(Index: Integer); override; function GetVerb(Index: Integer): string; override; function GetVerbCount: Integer; override; end; {...} procedure TMyComponentEditor.ExecuteVerb(Index: Integer); begin case Index of 0: (Component as TMyComponent).Edit; end; end; function TMyComponentEditor.GetVerb(Index: Integer): string; begin case Index of 0: Result := 'Edit'; end; end; function TMyComponentEditor.GetVerbCount: Integer; begin Result := 1; end; Wichtig ist das Registrieren des Editors:
Delphi-Quellcode:
MfG
procedure Register;
begin RegisterComponentEditor(TMyComponent, TMyComponentEditor); end; Stevie |
Re: TComponentEditor und Implementierung der Schnittstelle
Danke für die Antwort!
Hab' gerade auch keine Möglichkeit an ein zum Testen geeignetes Delphi ranzukommen. Kann mir dann noch mal jemand sagen was die Verbs hierbei zu bedeuten haben ? |
Re: TComponentEditor und Implementierung der Schnittstelle
Zitat:
Die stehen dann über "Bearbeiten", zu sehen z.B. bei TMainMenu, TPopupMenu ("Menü-Designer...") oder TAcionList ("Editor für Aktionslisten...") |
Re: TComponentEditor und Implementierung der Schnittstelle
Wie starte ich jetzt aber das Formular ?
Beim PropertyEditor ging es irgendwie noch aber beim ComponentEditor kommen bei irgendwelche Fehler. Kann mir jemand bitte mit einem kleinem Code weiterhelfen ? so etwa:
Delphi-Quellcode:
procedure TMyEditor.Edit;
var Form:TMyEditForm; begin // Erstellen // Ausführen // Freigeben end; |
Re: TComponentEditor und Implementierung der Schnittstelle
Delphi-Quellcode:
procedure TMyEditor.Edit;
var Form:TMyEditForm; begin // Erstellen Form := TMyEditForm.Create(Application); // Ausführen Form.ShowModal; // Freigeben FreeAndNil(Form); end; |
Re: TComponentEditor und Implementierung der Schnittstelle
Komisch !
So habe ich es zuvor auch schon versucht. Der OI hat mir dabei nur Fehler gemeldet :gruebel: Ach ... vielleicht hatte ich woanders was falsch gemacht. Aber jetzt funktioniert es. Danke, Stevie ! Oh Mann, schon wieder Probleme ! :wall: Meine Komponente wird enfernt, nachdem mein Formular geschlossen wird. Wie kann das sein ? Hab' den Code von Stevie übernommen, das Formular wird ausgeführt und dann verschwindet meine Komponente ! Warum ? Weiß jemand Rat ? Stevie ? |
Re: TComponentEditor und Implementierung der Schnittstelle
Zitat:
Ist sie "einfach weg", oder gibt's ne Fehlermeldung? Wie sprichst du die Komponente in deinem Formular an? |
Re: TComponentEditor und Implementierung der Schnittstelle
Eigentlich geht es jetzt ohne Verschwinden der Komponente, es gab auch keinen Fehler. Vielleicht hab' ich wirklich ein Free übersehen.
zu deiner Frage: Ich hab' im EditFormular eine globale Variable (Instanz ?) a. Und so rufe ich mein Formular auf:
Delphi-Quellcode:
ist a jetzt sowas wie ein Zeiger auf TMyComponentEditor.FComponent ?
procedure TMyComponentEditor.Edit;
var Form:TForm1; begin Form:=TForm1.Create(Application); // a:=TMyComponent.Create(Form); a:=(FComponent as TMyComponent); Form.ShowModal; // (FComponent as TMyComponent).Assign(a); Form.Free; end; oder warum muss ich den veränderten Wert nicht zurückkopieren ? |
Re: TComponentEditor und Implementierung der Schnittstelle
Zitat:
Ich weiß ja nicht, was für einen Editor du geschrieben hast, und ob es Sinn macht, den auch zur Laufzeit verfügbar zu machen. Sonst würde ich vorschlagen, eine Edit-Methode in deine Komponente einzubauen, die den Editor aufruft. Der ExecuteVerb-Aufruf sieht dann einfach so aus, wie ich oben beschrieben hab. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz