![]() |
TDesignWindow verwenden (keine Quellen oder Doku vorhanden!)
Hallo,
ich möchte einen Ersatzeditor für den Collection-Editor programmieren, der weitere Anforderungen erfüllt. Wenn ich mich richtig belesen habe (viel findet man ja nicht), dann sollte ich von ![]() Meine Komponente, für die der Editor sein soll, beinhaltet eine Collection mit Items, die aber verschiedene Erscheinungen haben können (die CollectionItem-Klasse ist aber immer gleich), so dass ich verschiedene Itemtypen im Editor erstellen möchte. Desweiteren sollen die Items in der Komponente angeordnet werden können. Deswegen entwickle ich den Editor neu. |
Re: Verwendung von TDesignWindow
Mit TDesignWindow.SetSelection(Components: TDesignerSelectionList) scheint das zu funktionieren. Laut den Quellen von TFieldsEditor muss man die TDesignerSelectionList offenbar selbst instanzieren und übergeben. Freigegeben wird die dann woanders... irgendwo... Jetzt tut sich zumindest im OI was. Mein Item wird oben in der Dropdownbox angezeigt, nur die published Properties werden noch nicht im OI angezeigt, er bleibt einfach leer. Mal sehen, ob ich den Knoten dadurch lösen kann, dass ich meinen Editor nicht mehr modal anzeige (was ja nun auch irgendwie unsinnig ist).
|
Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand
Die published Properties werden auch nicht im OI angezeigt, wenn mein Editor nicht mehr modal angezeigt wird. Ich bastele gerade an der Sicherstellung der Freigabe der Form meines Editors, danach widme ich mich wieder der Anzeige im OI.
Da offenbar keiner Erfahrungen mit der Thematik hat, erstelle ich den Thread als eine Art Logbuch, damit andere dann wissen, wie man mit TDesignWindow umgeht. Zumindest bezüglich meiner Wünsche ;-) |
Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand
Bin auch noch nicht so tief in der OpenToolsAPI drin und vom TDesignWindow hab'sch praktisch garkeine Ahnung
und es stimmt, viele Infos gibt es diesbezüglich leider nicht (scheint kaum jemand mit dieser API zu arbeiten) Alle möglichen Ergebnisse in Google sind nicht sehr viel: http://www.google.de/search?q="TDesignWindow"+OR+"IDesignWindow" Aber vielleicht mußt du auch nur noch irgendwas registrieren, bzw. auf irgendwas reagieren? Unit DesignIntf: RegisterDesignNotification RegisterPropertyEditor RegisterPropertyInCategory RegisterPropertyMapper RegisterComponentEditor uvm. |
Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand
Form nichtmodal anzeigen und trotzdem die Freigabe sicherstellen:
Delphi-Quellcode:
TFmMyCompEditor = class(TDesignWindow)
procedure FormClose(Sender: TObject; var Action: TCloseAction); private MyComp: TMyComp; protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public procedure Edit(AMyComp: TMyComp); end; TMyCompEditor = Class (TComponentEditor) protected procedure ShowEditor; end; var FmMyCompEditor: TFmMyCompEditor; implementation { TFmMyCompEditor } procedure TFmMyCompEditor.Edit(AMyComp: TMyComp); begin if MyComp <> nil then MyComp.RemoveFreeNotification(Self); MyComp := AMyComp; MyComp.FreeNotification(Self); Show; end; procedure TFmMyCompEditor.Notification(AComponent: TComponent; Operation: TOperation); begin inherited; if (Operation = opRemove) and (AComponent = MyComp) then Close; end; procedure TFmMyCompEditor.FormClose(Sender: TObject; var Action: TCloseAction); begin FmMyEditor := nil; // globale Variable wieder nil setzen Action := caFree; // sich selbst freigeben end; { TMyCompEditor } procedure TMyCompEditor.ShowEditor; begin if FmMyCompEditor = nil then FmMyCompEditor := TFmMyCompEditor.Create(Application); FmMyCompEditor.Edit(TMyComp(Component)); end; |
Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand
Nun zur Anzeige der MyItems im ObjektInspektor...
Auf ![]() |
Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand
Lösung:
Delphi-Quellcode:
Kaum macht man es richtig, funktioniert auch alles... :mrgreen:
procedure TFmCGrpEditor.ItemListClick(Sender: TObject);
begin if (not Active) or (ItemList.Selected = nil) or // ist etwas ausgewählt? (ItemList.Selected.Data = nil) then // hat das ausgewählte auch ein Item angehangen? Exit; Designer.SelectComponent(TChoiceGroupItem(ItemList.Selected.Data)); end; procedure TFmMyCompEditor.Edit(AMyComp: TMyComp; ADesigner: IFormDesigner); begin if MyComp <> nil then MyComp.RemoveFreeNotification(Self); MyComp := AMyComp; MyComp.FreeNotification(Self); Designer := ADesigner; // <-- ohne das funktioniert nix! Show; end; procedure TMyCompEditor.ShowEditor; begin if FmMyCompEditor = nil then FmMyCompEditor := TFmMyCompEditor.Create(Application); FmMyCompEditor.Edit(TMyComp(Component),Designer); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 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