AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TPropertyEditor Frage

Ein Thema von Neutral General · begonnen am 21. Sep 2006 · letzter Beitrag vom 22. Sep 2006
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

TPropertyEditor Frage

  Alt 21. Sep 2006, 17:45
Hi,

Also ich hab zu dem Ding ne Frage die glaub ich noch nicht gefragt wurde
Im OI steht meine Property so:

Zitat:
[+]MeineProp | TTyp
aber das soll keine Aufklapp-Property sein sondern so eine:

Zitat:
MeineProp | TTyp[...]


Delphi-Quellcode:
function TDPItemPropEdit.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog];
end;
müsste das nicht so gehn?
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: TPropertyEditor Frage

  Alt 21. Sep 2006, 18:01
siehe Onlinehilfe (F1 Taste)

Zitat:
TPropertyAttribute, TPropertyAttributes (Typen)

Die Typen TPropertyAttribute und TPropertyAttributes beschreiben eine Eigenschaft für den Objektinspektor.

Unit
DesignIntf

Delphi-Syntax:
Delphi-Quellcode:
type
  TPropertyAttribute = (paValueList, paSubProperties, paDialog, paMultiSelect, paAutoUpdate, paSortList, paReadOnly, paRevertable, paFullWidthName, paVolatileSubProperties, paVCL, paNotNestable);
  TPropertyAttributes = set of TPropertyAttribute;
Beschreibung
TPropertyAttributes besteht aus einer Menge von TPropertyAttribute-Werten. Die folgende Tabelle enthält die möglichen Werte für TPropertyAttribute:

Werte und Bedeutung
  • paValueList
    Der Eigenschaftseditor kann die Werte der Eigenschaft als Aufzählung zurückgeben. Wenn paValueList gewählt wird, muss die Methode GetValues so überschrieben werden, dass sie Aufzählungswerte übergibt. Außerdem bewirkt paValueList, dass im Objektinspektor neben der Eigenschaft ein Dropdown-Pfeil platziert wird.
  • paSortList
    Der Objektinspektor sortiert die Liste, die von GetValues zurückgeliefert wird.
  • paSubProperties
    Die Eigenschaft verfügt über Untereigenschaften, die unterhalb der aktuellen Eigenschaft stehen und mit einer Einrückung versehen werden. Wenn paSubProperties gewählt wird, muss die Eigenschaft GetProperties so überschrieben werden, dass Sie Untereigenschaften übergibt.
  • paDialog
    Die Methode Edit öffnet ein Dialogfeld. Außerdem wird im Objektinspektor neben der Eigenschaft eine Ellipsen-Schaltfläche (...) platziert.
  • paMultiSelect
    Die Eigenschaft kann auch dann angezeigt werden, wenn mehrere Komponenten ausgewählt sind.
  • paAutoUpdate
    Die Methode SetValue wird nach jeder Änderung im Editor aufgerufen und nicht erst dann, wenn die Änderung geprüft wurde.
  • paReadOnly
    Der Wert darf nicht geändert werden.
  • paRevertable
    Der Eigenschaftseditor kann die Eigenschaft wieder auf ihren ursprünglichen Wert zurücksetzen. Zu den Eigenschaften, die nicht wieder zurückgesetzt werden sollten, gehören verschachtelte Eigenschaften (z.B. Schriften) und Elemente von zusammengesetzten Eigenschaften (z.B. Mengenelementwerte).
  • paFullWidthName
    Der Eigenschaftswert erscheint nicht im Objektinspektor. Für die Anzeige des Eigenschaftsnamens wird die volle Breite (die Spalte Name und die Spalte Wert) verwendet.
  • paVolatileSubProperties
    Durch Änderungen des Eigenschaftswerts werden die Untereigenschaften neu berechnet (reduziert und wieder erweitert).
  • paVCL
    Der Eigenschaftseditor ist eine WinClx-Komponente (keine VisualCLX-Komponente).
  • paNotNestable
    Der Objektinspektor zeigt die Eigenschaft nicht an, wenn die Eigenschaften einer erweiterten Referenz dargestellt werden.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: TPropertyEditor Frage

  Alt 21. Sep 2006, 18:15
Zitat von MaBuSE:
siehe Onlinehilfe (F1 Taste)
bzw.
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:
{ ********************************************************************** }
{ 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;

...
So ich hoffe das reicht Dir an Info...
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: TPropertyEditor Frage

  Alt 21. Sep 2006, 18:24
Zitat von Neutral General:
müsste das nicht so gehn?
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...
Hast Du auch mit RegisterPropertyEditor deinen Editor aktiviert?

z.B.RegisterPropertyEditor(TypeInfo(TTyp), nil, '', TDPItemPropEdit); Siehe Delphi-Referenz durchsuchenRegisterPropertyEditor
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: TPropertyEditor Frage

  Alt 21. Sep 2006, 18:35
Zitat von MaBuSE:
Zitat von Neutral General:
müsste das nicht so gehn?
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...
Hast Du auch mit RegisterPropertyEditor deinen Editor aktiviert?

z.B.RegisterPropertyEditor(TypeInfo(TTyp), nil, '', TDPItemPropEdit); Siehe Delphi-Referenz durchsuchenRegisterPropertyEditor
Ja hab ich.. Aber ehm ich glaube du hast mir genau das Gegenteil gezeigt...
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 -.-
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: TPropertyEditor Frage

  Alt 22. Sep 2006, 13:20
Mhh keiner da der mir grad helfen kann ?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: TPropertyEditor Frage

  Alt 22. Sep 2006, 15:58
Zitat von Neutral General:
Mhh keiner da der mir grad helfen kann ?
Warum, steht doch alles oben.
Weitere Infos und sehr schöne Beispiele (z.B. von mir) findest Du in der DP -> suchen.

z.B. http://www.delphipraxis.net/internal...=531454#531454

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:
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.
und

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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: TPropertyEditor Frage

  Alt 22. Sep 2006, 16:06
Habs soweit geschafft aber wie ich sehe hast du Ahnung davon deswegen leite ich dich grad mal weiter
Neues Problem^^

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz