Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   propertyeditor wird nicht auf klasse angewendet (https://www.delphipraxis.net/158077-propertyeditor-wird-nicht-auf-klasse-angewendet.html)

snook 4. Feb 2011 14:29

propertyeditor wird nicht auf klasse angewendet
 
heee,

kann mir einer sagen, warum der proerty editor einfach nicht funktionieren will? ich kann das package mit dem editor, als auch das package mit der komponente kompilieren, aber egal was ich mit dem editor und auch der funktion GetAttributes anstelle, ich kriege nur die standard funktionen im OI, so als ob der editor einfach nicht rgistriert wird

die komponenete:
Delphi-Quellcode:
type
  TDataComClient = class(TComponent)
  private
    { Private-Deklarationen }
    FDataChannels: TDataCHannelList;
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    property DataChannels: TDataChannelList read FDataChannels write FDataChannels;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Klaus', [TDataComClient]);
end;

{ TDataComClient }

constructor TDataComClient.Create(AOwner: TComponent);
begin
  inherited;
  FDataChannels := TDataChannelList.Create(self);
end;
der editor:

Delphi-Quellcode:
type
  TDataChannelsProperty = class(TPropertyEditor)
  private
    FDataChannelDialog: TDataChannelDialog;
    procedure ChannelListToList(DataChannels: TDataChannelList; var AList: TList); overload;
    procedure ListToChannelList(DataChannels: TList; var AList: TDataChannelList); overload;
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure Edit; override;
  end;

procedure TDataChannelsProperty.Edit;
var DataChannelList: TDataChannelList;
    Dlg           : TDataChannelDialog;
    LList         : TList;
begin
  inherited;
  try
    DataChannelList := TDataChannelList(GetOrdValue);
    ChannelListToList(DataChannelList,LList);
    Dlg := TDataChannelDialog.Create(LList, DataChannelList.Owner.Owner,nil);
    if Dlg.Execute then LList.Assign(Dlg.DataChannels);
    ListToChannelList(LList,DataChannelList);
    SetOrdValue(LongInt(DataChannelList));
  finally
    Dlg.Free;
    LList.Free;
  end;
end;

function TDataChannelsProperty.GetAttributes: TPropertyAttributes;
begin
  Result := inherited GetAttributes + [paDialog];
end;
//edit
achso, die klasse um die es geht, TDataChannelList ist von TPersistent abgeleitet und verwaltet eine Stringlist

Deep-Sea 4. Feb 2011 15:31

AW: propertyeditor wird nicht auf klasse angewendet
 
Du musst den Editor ebenfalls registrieren:
Delphi-Quellcode:
procedure Register;
begin
  RegisterPropertyEditor(...);
end;

snook 4. Feb 2011 15:36

AW: propertyeditor wird nicht auf klasse angewendet
 
ist er, sry hab ich vergessen einzufügen, hab ihn registriert über:

Delphi-Quellcode:
procedure register
begin
  RegisterPropertyEditor(TypeInfo(TDataChannelList),TDataComClient,'',TDataChannelsProperty);
end;
ich hab echt null plan warum der eidotr nicht beutzt wird. ich hatte die DataChannelList zuerst von TStringList abgeleitet, da erschien dann trotz registrierung des neuen editors der alte editor für TStrings im OI. daher dachte ich, sattel ich al auf TPersistent um und leite die Klasse davon ab, hat aber auch nichts gebracht.

snook 4. Feb 2011 16:21

AW: propertyeditor wird nicht auf klasse angewendet
 
so ich habe jetzt das ganze in einen komponenten editor umgeschrieben, so dass beim doppelclick auf die komponente das formular zum bearbeiten der DataChannels erzeugt werden sollte. das hat auch gar nicht funktioniert, sprich nach der registrierung des komponenteneditors tat sich beim doppelklick auf selbige überhaupt nichts.
mal ne dumm frage, muss ich die komponente und den editor im selben package installieren??? oder hat jemand auch schonmal probleme beim registrieren eines property editors gehabt?

Deep-Sea 4. Feb 2011 17:03

AW: propertyeditor wird nicht auf klasse angewendet
 
Zitat:

Zitat von sebastian paeckel (Beitrag 1079573)
mal ne dumm frage, muss ich die komponente und den editor im selben package installieren???

Das weiß ich nicht, sry.
Aber denk dran, dass du das Package selbst kompilieren musst und es nicht reicht, wenn du deine Anwendung kompilierst in der du ggf. die betreffende Unit des Editors geöffnet hast.

shmia 4. Feb 2011 17:33

AW: propertyeditor wird nicht auf klasse angewendet
 
Zitat:

Zitat von sebastian paeckel (Beitrag 1079573)
muss ich die komponente und den editor im selben package installieren???

Nein!
Die Komponente gehört in ein Runtime-Package.
Component-Editoren und Property-Editoren gehören in ein Designtime-Package.
Das Designtime-Package benützt das Runtime-Package.
Wenn man sauber programmieren möchte, dann gehören auch alle Register... Prozeduren in das Designtime-Package.

snook 4. Feb 2011 19:36

AW: propertyeditor wird nicht auf klasse angewendet
 
okay, ich habe jetzt das package, welches die DataComClient Komponente enthält als laufzeit-package gesetzt und das Package mit dem Prop-Editor als Designzeit. Beide Registrierungen liegen im Designzeitpackage. jetzt meckert mir der compiler bein installieren:

Package C:\Dokumente und Einstellungen\local_admin\Eigene Dateien\Borland Studio-Projekte\Bpl\InstrumentDataCom.bpl kann nicht installiert werden, da es kein Entwurfszeit-Package ist.

erscheint mir soweit logishc, weil es ein anderes package in der requires enthält, das design UND laufzeitpackage ist, oder irre ich mich? wenn ich das package jedenfalls wieder als design und laufzeit installiere, dann ist wieder das alte problem da, dass der editor keinen mucks sagt

snook 4. Feb 2011 19:37

AW: propertyeditor wird nicht auf klasse angewendet
 
hmmm mich wundert gerade, dass ich es ja als leufzeitpackage installieren wollte, warum schimpft er dann über die designtime?

snook 5. Feb 2011 00:18

AW: propertyeditor wird nicht auf klasse angewendet
 
ohoh ich habe das ganze jetzt soweit eingegrenzt, dass wohl keine komponenten registriert werden, die nicht über den menüeintrag neu -> komponente erzeuigt werden. jedenfalls wird die komponente auch nicht registriert, wenn ich einfach nur die register procedur im designtime package aufrufe. kann es sein, dass man dem compiler irgendwie bescheid gebne soll, dass er dort jetzt auch tatsächlich etwas registrieren soll, und passiert dass verdeckt im hintergrund wenn ich eine komponente über das menü erstell?

ich bin hier langsam am verzweifeln...

shmia 7. Feb 2011 11:54

AW: propertyeditor wird nicht auf klasse angewendet
 
Zitat:

Zitat von sebastian paeckel (Beitrag 1079606)
hmmm mich wundert gerade, dass ich es ja als leufzeitpackage installieren wollte, warum schimpft er dann über die designtime?

Nur Designtime-Packages können installiert werden.
Runtime-Packages "liegen einfach nur so im Suchpfad rum" und werden von den Designtime-Packages benützt.
Code:
Designtime-Package ---benützt---> Runtime-Package


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr.
Seite 1 von 2  1 2      

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