![]() |
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:
der editor:
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;
Delphi-Quellcode:
//edit
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; achso, die klasse um die es geht, TDataChannelList ist von TPersistent abgeleitet und verwaltet eine Stringlist |
AW: propertyeditor wird nicht auf klasse angewendet
Du musst den Editor ebenfalls registrieren:
Delphi-Quellcode:
procedure Register;
begin RegisterPropertyEditor(...); end; |
AW: propertyeditor wird nicht auf klasse angewendet
ist er, sry hab ich vergessen einzufügen, hab ihn registriert über:
Delphi-Quellcode:
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.
procedure register
begin RegisterPropertyEditor(TypeInfo(TDataChannelList),TDataComClient,'',TDataChannelsProperty); end; |
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? |
AW: propertyeditor wird nicht auf klasse angewendet
Zitat:
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. |
AW: propertyeditor wird nicht auf klasse angewendet
Zitat:
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. |
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 |
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?
|
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... |
AW: propertyeditor wird nicht auf klasse angewendet
Zitat:
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. |
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