Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TComponentEditor und Implementierung der Schnittstelle (https://www.delphipraxis.net/41766-tcomponenteditor-und-implementierung-der-schnittstelle.html)

Cicaro 8. Mär 2005 11:08


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.

Stevie 8. Mär 2005 11:18

Re: TComponentEditor und Implementierung der Schnittstelle
 
Hi Cicaro,

so hab ich das bei einer meiner Komponenten gemacht:
Delphi-Quellcode:
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;
In der Methode Edit wird dann das Editor-Formular aufgerufen...
Wichtig ist das Registrieren des Editors:
Delphi-Quellcode:
procedure Register;
begin
  RegisterComponentEditor(TMyComponent, TMyComponentEditor);
end;
MfG
Stevie

Cicaro 8. Mär 2005 11:31

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 ?

Stevie 8. Mär 2005 11:37

Re: TComponentEditor und Implementierung der Schnittstelle
 
Zitat:

Zitat von Cicaro
Kann mir dann noch mal jemand sagen was die Verbs hierbei zu bedeuten haben ?

Das sind die Menüpunkte, die du beim Popupmenü der Komponente in der IDE bekommst.
Die stehen dann über "Bearbeiten", zu sehen z.B. bei TMainMenu, TPopupMenu ("Menü-Designer...") oder TAcionList ("Editor für Aktionslisten...")

Cicaro 11. Mär 2005 11:30

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;

Stevie 11. Mär 2005 11:36

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;

Cicaro 11. Mär 2005 20:13

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 ?

Stevie 14. Mär 2005 09:29

Re: TComponentEditor und Implementierung der Schnittstelle
 
Zitat:

Zitat von Cicaro
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 ?

Sicher, dass du nicht irgendwo aus Versehen ein Free auf deine Komponente machst?
Ist sie "einfach weg", oder gibt's ne Fehlermeldung?
Wie sprichst du die Komponente in deinem Formular an?

Cicaro 15. Mär 2005 10:57

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:
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;
ist a jetzt sowas wie ein Zeiger auf TMyComponentEditor.FComponent ?
oder warum muss ich den veränderten Wert nicht zurückkopieren ?

Stevie 15. Mär 2005 11:06

Re: TComponentEditor und Implementierung der Schnittstelle
 
Zitat:

Zitat von Cicaro
ist a jetzt sowas wie ein Zeiger auf TMyComponentEditor.FComponent ?

Genau! ;-)

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