Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

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

AW: Propertyeditor nicht Modal

  Alt 23. Okt 2013, 15: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