Komponenten entwickeln - Eigenes Dialog für Einträge?
-
Hi!
Ich will gerne in einer Komponente eine "Eigenschaft" haben die sich mithilfe von einem von mir erstellten Dialog bearbeiten lässt. Wie z.B. auch beim TreeView oder beim TMainMenu / TPopupMenuMfG
Benjamin
-
Da musste glaube ich mal unter TPropertyDialog nachgucken..
MfG Aoeke
-
Ich habe neulich sowas programmiert. Ob das die Standardlösung ist, weiß
ich nicht, aber es funktioniert wenigstens.
Ich habe hier eine Komponente, die als Eigenschaft wiederum eine Komponente
hat, deswegen habe ich die Editor-Klasse von TComponentEditor erben lassen.
Die .h-Datei enthält folgende Klasse:class PACKAGE TMyEditor: public TComponentEditor { typedef TComponentEditor inherited; public: __fastcall TMyEditor(Classes::TComponent* AComponent, _di_IDesigner ADesigner); __fastcall ~TMyEditor(void); virtual void __fastcall Edit(void); virtual int __fastcall GetVerbCount(void); virtual AnsiString __fastcall GetVerb(int Index); virtual void __fastcall ExecuteVerb(int Index); };
Und hier ein Teil der Implementierung:
namespace Mycomponent { void __fastcall PACKAGE Register() { TComponentClass classes[1] = {__classid(TMyComponent)}; RegisterComponents("MyComponentPage", classes, 0); RegisterComponentEditor(__classid(TMyComponent), __classid(TMyEditor)); } } __fastcall TMyEditor::TMyEditor(Classes::TComponent* AComponent, _di_IDesigner ADesigner): TComponentEditor(AComponent, ADesigner) { } __fastcall TMyEditor::~TMyEditor(void) { } void __fastcall TMyEditor::Edit(void) { ExecuteVerb(0); } int __fastcall TMyEditor::GetVerbCount(void) { return 1; } AnsiString __fastcall TMyEditor::GetVerb(int Index) { // Eintrag im Popup-Menü anzeigen if (Index == 0) return "Meine selbstgeschriebene Komponente bearbeiten..."; return ""; } void __fastcall TMyEditor::ExecuteVerb(int Index) { if (Index == 0) { // Formular zur Bearbeitung der Liste anzeigen } }
Vielleicht hilft Dir das weiter.
Gruß,
Alexander
-
such mal in google nach "PropertyEditor paDialog"
du findest zum Beispiel http://www.drbob42.com/delphi/property.htm
-
Hi!
Danke erstmal! Es klappt.Aber eine Frage noch:
Wie funktioniert das denn z.B. bei der TStringList?Im Editor wird dort ein Dialog-Editor angeboten. Jedoch ist dieser in dem CodeGuard nicht zu finden. Also ListBox1->Items->Edit() gibt es nicht..
Wie kann man denn sowas machen?
MfG
~Benjamin
-
_ProfEich schrieb:
Wie funktioniert das denn z.B. bei der TStringList?
Wie kann man denn sowas machen?Also bei mir geht das immer von selbst. Der BCB erkennt normalerweise
automatisch, wenn eine property vom Typ TStrings ist und startet den
richtigen Editor.Gruß,
Alexander
-
ja, ist klar ^^
Aber ich meine bei einem selbstgemachtem Dialog.
Da gibt es dann ja Edit();
und das möchte ich WIE beim TStringGrid nich ^^"Auch wenn das eigentlich nicht wichtig ist..