AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TDesignWindow verwenden (keine Quellen oder Doku vorhanden!)
Thema durchsuchen
Ansicht
Themen-Optionen

TDesignWindow verwenden (keine Quellen oder Doku vorhanden!)

Ein Thema von RSE · begonnen am 20. Apr 2010 · letzter Beitrag vom 20. Apr 2010
Antwort Antwort
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#1

TDesignWindow verwenden (keine Quellen oder Doku vorhanden!)

  Alt 20. Apr 2010, 08:14
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 TDesignWindow ableiten. Ich verwende Delphi 5 Enterprise. Leider kann ich nirgends eine Dokumentation zu TDesignWindow auftreiben. Kann mir von euch vielleicht einer sagen, was ich tun muss, um meine Items im OI anzuzeigen? Das ist eigentlich der Kern dessen, was ich erreichen möchte. Die Form dazu (den Editor) habe ich schon ein Stück weit entwickelt.

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.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#2

Re: Verwendung von TDesignWindow

  Alt 20. Apr 2010, 09:42
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).
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#3

Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand

  Alt 20. Apr 2010, 10:50
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
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand

  Alt 20. Apr 2010, 11:11
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#5

Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand

  Alt 20. Apr 2010, 12:11
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;
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#6

Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand

  Alt 20. Apr 2010, 12:16
Nun zur Anzeige der MyItems im ObjektInspektor...
Auf Creating Custom Delphi Components, Part III, Page 4 ist beschrieben, wie man das macht. So klappt das allerdings nur für Objekte, die man über IFormDesigner erstellt und lediglich in einer Collection verwaltet. Somit wird mir auch klar, warum die Published-Eigenschaften meiner Items nicht im OI angezeigt werden. Ich beschäftige mich jetzt also mit IFormDesigner.
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  Mit Zitat antworten Zitat
RSE

Registriert seit: 26. Mär 2010
254 Beiträge
 
Delphi XE Enterprise
 
#7

Re: TDesignWindow verwenden (keine Quellen oder Doku vorhand

  Alt 20. Apr 2010, 14:08
Lösung:
Delphi-Quellcode:
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;
Kaum macht man es richtig, funktioniert auch alles...
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."
  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 02:27 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