![]() |
TPropertyEditor Frage
Hi,
Also ich hab zu dem Ding ne Frage die glaub ich noch nicht gefragt wurde :mrgreen: Im OI steht meine Property so: Zitat:
Zitat:
Delphi-Quellcode:
müsste das nicht so gehn?
function TDPItemPropEdit.GetAttributes: TPropertyAttributes;
begin Result := [paDialog]; end; Was muss ich denn dafür alles machen? Also ich hab schon Quelltext im TPropertyEditor.Edit der einen Opendialog öffnet aber wenn ich auf das + drücke gibts nur ne Fehlermeldung... Gruß Neutral General |
Re: TPropertyEditor Frage
siehe Onlinehilfe (F1 Taste)
Zitat:
|
Re: TPropertyEditor Frage
Zitat:
Siehe auch die Quelltexte der ToolsAPI $(DELPHI)\Source\ToolsAPI (bei Delphi 7) Dateien: DesignEditors.pas und DesignIntf.pas Die Default Editoren der DesignEditors sind den verschidenen Eigenschaften zugeordnet. Du mußt also einen eigenen registrieren, um das Default Verhalten abzuschalten. Wenn Du eine Klasse als property hast, (was bei Dir glaube ich der Fall ist) dann ist automatisch der TClassProperty Editor aktiv. Der implementiert die paSubProperties, die dafür verantwortlich ist.
Delphi-Quellcode:
So ich hoffe das reicht Dir an Info...
{ ********************************************************************** }
{ Delphi and Kylix Cross-Platform Open Tools API } { Copyright (C) 1995, 2001 Borland Software Corporation } { All Rights Reserved. } { ********************************************************************** } unit DesignEditors; ... TClassProperty = class(TPropertyEditor) public function GetAttributes: TPropertyAttributes; override; procedure GetProperties(Proc: TGetPropProc); override; function GetValue: string; override; end; ... function TClassProperty.GetAttributes: TPropertyAttributes; begin Result := [paMultiSelect, paSubProperties, paReadOnly]; end; ... |
Re: TPropertyEditor Frage
Zitat:
z.B.
Delphi-Quellcode:
Siehe
RegisterPropertyEditor(TypeInfo(TTyp), nil, '', TDPItemPropEdit);
![]() |
Re: TPropertyEditor Frage
Zitat:
das [+] hab ich ja.. aber das will ich nicht :| Ich will das da die drei Pünktchen sind wie bei TStrings z.B und das sich dann mein Formular öffnet.. aber ich kann da machen was ich will... es geht nicht -.- |
Re: TPropertyEditor Frage
Mhh keiner da der mir grad helfen kann ? :|
|
Re: TPropertyEditor Frage
Zitat:
Weitere Infos und sehr schöne Beispiele (z.B. von mir) findest Du in der DP -> suchen. z.B. ![]() Aber ich will ja mal nicht so sein ;-) Hier ein Beispiel, das alle Fragen beantworten sollte. (Habe keine Kommentare eingefügt, sollte aber zu verstehen sein) Die 2 Dateien in ein Package packen und installieren. TPropEditorComponent hat 3 Eigenschaften des selben Typs TMyProperty aber drei verschiedene Arten die im Objektinspecktor anzuzeigen. Im Quellcode lässt sich das ganze natürlich gleich ansprechen. Die Property Editoren sind ja nur für die GUI.
Delphi-Quellcode:
PropEditorComponent1.MyPropertyEins.SuperDuper := 'XXX';
PropEditorComponent1.MyPropertyZwei.SuperDuper := 'XXX'; PropEditorComponent1.MyPropertyDrei.SuperDuper := 'XXX';
Delphi-Quellcode:
und
unit PropEditorComponent;
interface uses SysUtils, Classes; type TMyProperty = class(TPersistent) private FSuperDuper: string; FZahl: Integer; published property SuperDuper: string read FSuperDuper write FSuperDuper; property Zahl: Integer read FZahl write FZahl; end; TMyPropertyEins = class(TMyProperty); TMyPropertyZwei = class(TMyProperty); TMyPropertyDrei = class(TMyProperty); TPropEditorComponent = class(TComponent) private { Private-Deklarationen } FMyProperty1: TMyPropertyEins; FMyProperty2: TMyPropertyZwei; FMyProperty3: TMyPropertyDrei; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published-Deklarationen } property MyPropertyEins: TMyPropertyEins read FMyProperty1 write FMyProperty1; property MyPropertyZwei: TMyPropertyZwei read FMyProperty2 write FMyProperty2; property MyPropertyDrei: TMyPropertyDrei read FMyProperty3 write FMyProperty3; end; implementation { TPropEditorComponent } constructor TPropEditorComponent.Create(AOwner: TComponent); begin inherited; FMyProperty1 := TMyPropertyEins.Create; FMyProperty1.SuperDuper := 'DP'; FMyProperty1.Zahl := 2006; FMyProperty2 := TMyPropertyZwei.Create; FMyProperty2.SuperDuper := 'DP'; FMyProperty2.Zahl := 2006; FMyProperty3 := TMyPropertyDrei.Create; FMyProperty3.SuperDuper := 'DP'; FMyProperty3.Zahl := 2006; end; destructor TPropEditorComponent.Destroy; begin FMyProperty3.Free; FMyProperty2.Free; FMyProperty1.Free; inherited; end; end.
Delphi-Quellcode:
unit PropEditorComponent_dsgn;
interface uses SysUtils, Classes, Dialogs, PropEditorComponent, DesignIntf, DesignEditors; type TMyPropertyEditorEins = class(TClassProperty) function GetAttributes: TPropertyAttributes; override; function GetValue: string; override; end; TMyPropertyEditorZwei = class(TClassProperty) procedure Edit; override; function GetAttributes: TPropertyAttributes; override; function GetValue: string; override; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TPropEditorComponent]); RegisterPropertyEditor(TypeInfo(TMyPropertyEins), nil, '', TMyPropertyEditorEins); RegisterPropertyEditor(TypeInfo(TMyPropertyZwei), nil, '', TMyPropertyEditorZwei); end; { TMyPropertyEditor1 } function TMyPropertyEditorEins.GetAttributes: TPropertyAttributes; begin Result := []; end; function TMyPropertyEditorEins.GetValue: string; var s: string; begin // Nein, so macht man das besser nicht :-), ist ja nur zur Demo s := 'SuperDuper="'+TMyProperty(GetOrdValueAt(0)).SuperDuper+'", Zahl='+IntToStr(TMyProperty(GetOrdValueAt(0)).Zahl); FmtStr(Result, '(%s)', [s]); end; { TMyPropertyEditorZwei } procedure TMyPropertyEditorZwei.Edit; begin // Nein, so macht man das besser nicht :-), ist ja nur zur Demo ShowMessage('SuperDuper="'+TMyProperty(GetOrdValueAt(0)).SuperDuper+'", Zahl='+IntToStr(TMyProperty(GetOrdValueAt(0)).Zahl)); end; function TMyPropertyEditorZwei.GetAttributes: TPropertyAttributes; begin Result := [paDialog]; end; function TMyPropertyEditorZwei.GetValue: string; begin FmtStr(Result, '(%s)', ['Abrakadabra']); end; end. |
Re: TPropertyEditor Frage
Habs soweit geschafft aber wie ich sehe hast du Ahnung davon deswegen leite ich dich grad mal weiter :mrgreen:
:arrow: ![]() Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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