AGB  ·  Datenschutz  ·  Impressum  







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

Propertyeditor nicht Modal

Ein Thema von Mavarik · begonnen am 23. Okt 2013 · letzter Beitrag vom 30. Okt 2013
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.127 Beiträge
 
Delphi 10.3 Rio
 
#1

Propertyeditor nicht Modal

  Alt 23. Okt 2013, 12:39
Hallo Zusammen!

Bisher habe ich immer, wenn ich einen PropertyEditor für eine Komponente gebraucht habe, diesen Editor [Dialog]
Modal erzeugt und nach der Bearbeitung die Werte an die Komponente zurückgegeben.

Jetzt möchte ich aber einen Dialog erzeuge, der offen bleibt und auf Klicks des offenen Formulars reagieren kann.

Beispiel:

Der Dialog geht auf und wenn ich auf einen Label oder einen Button auf dem Formular klicke bekommt mein Dialog das mit.
(Focuscontrol)?

Nett wäre auch, wenn ich per Drag&Drop Komponenten in mein Dialogfenster ziehen könnte...

Geht das? Jemand ne Idee? Nen Codeschnipsel? Lieber anders Lösen?

Grüsse Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Propertyeditor nicht Modal

  Alt 23. Okt 2013, 14:21
Meinst Du einen "Komponenteneditor"?


Das ShowModal könnte man ja leicht ersetzen, aber das könnte die IDE übel nehmen, da sie ja sozusagen die Kontrolle abgibt. Wenn der Editor offen bleibt und später immer wieder der IDE ins Handwerk pfuscht ... weiß man nicht.

Delphi-Quellcode:
procedure TssLayoutComponentEditor.ShowDesigner;
var
  DesignerForm: TFormSsLayoutEditor;
begin
  if (Component is TssLayout) then
  begin
    DesignerForm := TFormSsLayoutEditor.Create(nil);
    try
      DesignerForm.ssLayoutIDE := (Component as TssLayout);
      DesignerForm.AssignLayoutIDEtoDTE;
      DesignerForm.ShowModal;
      DesignerForm.AssignLayoutDTEtoIDE;
      DesignerForm.ssLayoutIDE := nil;
      Designer.Modified;
    finally
      DesignerForm.Free;
    end;
  end;
end;

Ich denke, Du musst deutlich tiefer in die Tools API. Ich habe es zumindest schon mal ansatzweise geschafft, selbst erzeugte Units in mein Projekt zu installieren.

Delphi-Quellcode:
procedure TFormSsFWEditor.CornerButton1Click(Sender: TObject);
var
  PackageTest: IOTAPackageServices;
  PackageModule: IOTAModule;
  UnitModule: IOTAModule;
  S: string;
begin
  FWEM.FWProject.CreateUnits;

  ProjectFileName := FWEM.FWProject.PathProject + FWEM.FWProject.Name + '.dpk';

  PackageModule := (BorlandIDEServices as IOTAModuleServices).FindModule(ProjectFileName);
  if not Assigned(PackageModule) then
    PackageModule := (BorlandIDEServices as IOTAModuleServices).CreateModule(TProjectCreator.Create);

  for S in FWEM.FWProject.UnitFileList do
  begin
    CurrentPackageModule := PackageModule;
    UnitFileName := S;
    UnitModule := (BorlandIDEServices as IOTAModuleServices).CreateModule(TUnitCreator.Create);
    UnitModule.Save(False, True);
  end;

  PackageModule.Save(False, True);
  PackageTest := (BorlandIDEServices as IOTAPackageServices);
  PackageTest.InstallPackage(LowerCase(FWEM.FWProject.Name + '.bpl'));
  PackageModule.Save(False, True);

  Close;
end;

Ein persistentes Formular live parallel mit dem Formulareditor zu syncronisieren wird aber noch um einiges schwerer werden, wenn nicht gar unmöglich sein.
So eine Vorstellung hatte ich im Rahmen meiner Layout-Kompo auch schonmal, dann aber nicht den Mut, das weiter zu denken.

Einige Infos zu Komponenteneditoren gab es hier: http://docwiki.embarcadero.com/RADSt...machen_-_Index allerdings zur Tools API gibt es kaum etwas.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.127 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Propertyeditor nicht Modal

  Alt 23. Okt 2013, 15:23
hmm Danke schon mal...

Gibt es zur DesignTime auch das Feld FocusControl des Forms des Editors?
Muss das mal testen...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.127 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Propertyeditor nicht Modal

  Alt 23. Okt 2013, 18:37
Also...

gefunden habe ich: IDesignNotification.SelectionChanged & ASelection

"Nur" noch wie ich das benutzen kann...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.127 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Propertyeditor nicht Modal

  Alt 30. Okt 2013, 18:38
OK für alle die es Interessiert...

Es geht so...

Delphi-Quellcode:
TMyComponentEditor = class(TForm,IDesignNotification)
...
  protected
    procedure DesignerClosed(const ADesigner: IDesigner; AGoingDormant: Boolean);
    procedure DesignerOpened(const ADesigner: IDesigner; AResurrecting: Boolean);
    procedure ItemDeleted(const ADesigner: IDesigner; AItem: TPersistent);
    procedure ItemInserted(const ADesigner: IDesigner; AItem: TPersistent);
    procedure ItemsModified(const ADesigner: IDesigner);
    procedure SelectionChanged(const ADesigner: IDesigner;const ASelection: IDesignerSelections);
...
end

implementation

procedure TMyComponentEditor.FormCreate(Sender: TObject);
begin
  ...
  RegisterDesignNotification(Self as IDesignNotification);
end;

procedure TMyComponentEditor.FormDestroy(Sender: TObject);
begin
  UnregisterDesignNotification(Self as IDesignNotification);
  ...
end;

procedure TMyComponentEditor.SelectionChanged(const ADesigner: IDesigner;const ASelection: IDesignerSelections);
var
  i : integer;
begin // Workingtest
  memo1.Lines.Clear;

  for i:=0 to ASelection.Count-1 do
    begin
      Memo1.Lines.Add(ASelection.Items[i].ClassName);
    end;
end;
Grüsse Mavarik

PS.: Auch ein nicht modaler Editor funktioniert!
  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 22:01 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