![]() |
Problem mit "TPicture" Property bei Komponetenerst
Hallo allezusammen,
ich möchte gerne in Delphi7 eine Komponente erstellen die im ersten Step nur ein TImage simuliert. Bei der Property Picture (TPicture) habe ich jetzt das Problem das ich zwar im Objectinspector beim Picture den [...] Knopf habe der auch soweit funktioniert, das selbe Fenster mir aber nicht beim Doppelklick auf die Komponente aufspringt. Eben genau so wie beim TImage. Hab mal mit dem Propertyeditor rumgespiel bin aber leider nicht wirklich weitergekommen... Jemand mal 'nen guten Tip für mich?? Gruß, Sar |
Re: Problem mit "TPicture" Property bei Komponeten
Du brauchst keinen Property-Editor, sondern einen ComponentEditor.
Dieser ComponentEditor muss registriert werden:
Delphi-Quellcode:
Es gibt wohl schon einen passenden Editor (TImageEditor ?) in der Unit DsgnIntf.dcu.
procedure RegisterComponentEditor(ComponentClass: TComponentClass; ComponentEditor: TComponentEditorClass);
Da diese Unit nur zur Entwicklungszeit verfügbar ist, darf RegisterComponentEditor auch nur aus einer Designtime-Package aufgerufen werden. Du kannst deinen Editor auch von TComponentEditor ableiten, dann hast du alle Freiheiten, musst aber auf vorgefertigte Methoden von TImageEditor verzichten. |
Re: Problem mit "TPicture" Property bei Komponeten
Hi shmia,
danke ersteinmal für die schnelle Antwort. Die dsgnInft gibt es in Delphi 7 nicht mehr dafür allerdings eine DesignIntf. hehe Ich will ja gar nicht einen neuen Editor schreiben, warum auch das Rad neu erfinden. Ich möchte ja lediglich das genau dieselbe Funktion aufpoppt die ich auch im Objectinspector mit dem [...] Knopp auslösen kann. Ich hab mir das ungefähr so vorgestellt:
Delphi-Quellcode:
Aber irgentwie bin ich zu Blöde dafür :wall:
type
T_Test = Class(TGraphicControl) private FPicture: TPicture; procedure SetPicture(const Value: TPicture); published constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure WndProc(var Message: TMessage); override; property Picture: TPicture read FPicture write SetPicture; public end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [T_Test]); end; { T_Test } constructor T_Test.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := ControlStyle + [csReplicatable]; FPicture := TPicture.Create; Height := 105; Width := 105; end; destructor T_Test.Destroy; begin FPicture.Free; inherited Destroy; end; procedure T_Test.SetPicture(const Value: TPicture); begin FPicture.Assign(Value); end; procedure T_Test.WndProc(var Message: TMessage); begin if (csDesigning in ComponentState) then Begin if Message.Msg = WM_LBUTTONDBLCLK then Begin // damit wird der Doppelklick ins Nirwana umgeleitet // und richtet keinen Schaden an :) Message.Msg := WM_LBUTTONUP; // hier sollte jetzt sowas wie der Aufruf: TPictureEditor.Execute // hin so funktioniert es natürlich nicht, aber so ungefähr hab ich // mir das vorgestellt. end; // damit die Komponente denke alles wäre normal verlaufen inherited WndProc(Message); end else inherited WndProc(Message); end; Also: Hiiiiilfe :coder2: Gruss, Sar |
Re: Problem mit "TPicture" Property bei Komponeten
Du entfernst die procedure Register aus deinem Sourcecode und fügst die Unit in ein
Laufzeitpackage (nur Laufzeit anhaken) namens PackageTest_RT ein. Dann brauchst du eine neue Unit (ich nenn sie mal T_TestReg.pas)
Delphi-Quellcode:
Diese Unit packst du in ein Designtime-Package (nur Laufzeit anhaken).
unit T_TestReg;
interface procedure Register; implementation uses U_Test, DesignIntf; procedure Register; begin RegisterComponents('Beispiele', [T_Test]); RegisterComponentEditor(T_Test, TImageEditor); end; end.
Delphi-Quellcode:
Das habe ich jetzt ohne Test so runtergeschrieben; keine Gewähr für Schreibfehler
package PackageTest_DT;
{$R *.RES} {$DESIGNONLY} requires vcl50, PackageTest_RT; contains T_TestReg in 'T_TestReg.pas'; end. oder andere fehlende Dinge. Aber das Grundprinzip stimmt. Ich würde dir empfehlen, in deinem VCL-Sourcecode nach RegisterComponentEditor zu suchen; du kannst abschauen, wie das bei anderen Komponenten gemacht wird. |
Re: Problem mit "TPicture" Property bei Komponeten
Jetzt funktioniert's, danke shmia :thumb:
Aus irgenteinem Grund - der sich mir leider vollkommen entzieht - muss die designeditors aus einem Runtime package aufgerufen werden. Ansonsten hab ich immer die Meldung bekommen das die Proxies.dcu nicht gefunden werden kann. Keine Ahnung was das soll. Ich experimentier hier noch ein bissl rum, aber so komme ich wenigstens wieder weiter. Nochmal danke. :mrgreen: Gruss, Sar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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-2025 by Thomas Breitkreuz