Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Open Tools API - benutzte Unit laden (https://www.delphipraxis.net/197310-open-tools-api-benutzte-unit-laden.html)

stahli 29. Jul 2018 21:07

Open Tools API - benutzte Unit laden
 
Ich bearbeite über einen Delphi-Experten eine aktuell geöffnete Unit.
Delphi-Quellcode:
EditorServices := BorlandIDEServices as IOTAEditorServices;
EditView := EditorServices.TopView;
ChangeCode(EditView);
Das funktioniert auch gut.

Jetzt möchte ich die Editoren bzw. Quelltexte öffnen und verarbeiten, die in uses-Klauseln angegeben sind.
Also ich suche die Funktion, die verwendet wird, um über Ctrl+Click die betreffende Unit zu öffnen.

Falls ein Editor diese schon geöffnet hat möchte ich dessen Quelltext auslesen, ansonsten die Quelltextdatei öffnen (oder einen temporären Editor erzeugen, der diese Datei im Hintergrund lädt, aber dann möglichst nicht öffentlich in der IDE geöffnet wird).

Es sollte also bestenfalls etwa so etwas sein:
Delphi-Quellcode:
tmpEditView := EditView.GetEditViewForUsedUnit(aUnitName);


Hat jemand einen Tipp, wie ich da ran komme?

Uwe Raabe 29. Jul 2018 22:08

AW: Open Tools API - benutzte Unit laden
 
Eine Unit kann mehrfach geöffnet sein. Dann gibt es auch mehrere EditViews.

Also, du fängst an mit IOTAModuleServices und holst dir über OpenModule das IOTAModule (geht auch, wenn schon offen). Dann iterierst du über ModuleFileEditors und prüfst ob der jeweilige IOTAEditor auch IOTASourceEditor unterstützt. IOTASourceEditor liefert dir dann die EditViews.

An den Sourcecode kommst du aber auch ohne den EditView über IOTASourceEditor.CreateReader. Mit IOTASourceEditor.Show kannst du einen EditView erzeugen. Der ist dann aber auch sichtbar.

Delphi-Quellcode:
var
  Editor: IOTAEditor;
  EditView: IOTAEditView;
  I, J: Integer;
  module: IOTAModule;
  sourceEditor: IOTASourceEditor;
  OTAModuleServices: IOTAModuleServices;
begin
  BorlandIDEServices.GetService(IOTAModuleServices, OTAModuleServices);
  module := OTAModuleServices.OpenModule(AFileName);
  for I := 0 to module.ModuleFileCount - 1 do begin
    Editor := module.ModuleFileEditors[I];
    if Supports(Editor, IOTASourceEditor, sourceEditor) then begin
      if sourceEditor.EditViewCount = 0 then begin
        sourceEditor.Show; // damit ein EditView existiert
      end;
      for J := 0 to sourceEditor.EditViewCount - 1 do begin
        EditView := sourceEditor.EditView[J];
        // ...
      end;
    end;
  end;
end;

stahli 29. Jul 2018 22:29

AW: Open Tools API - benutzte Unit laden
 
Danke Dir!
Ich werde mir das mal anschauen und die nächsten Tage berichten. (Kann etwas dauern.)


Gibt es eigentlich eine richtige (vollständige) Übersicht über die OTA-Funktionen?
Irgendwie muss man sich scheinbar alles irgendwie im Netz zusammensuchen oder versuchen, über die Quelltextdateien weiter zu kommen...

Uwe Raabe 30. Jul 2018 07:44

AW: Open Tools API - benutzte Unit laden
 
Zitat:

Zitat von stahli (Beitrag 1409031)
Gibt es eigentlich eine richtige (vollständige) Übersicht über die OTA-Funktionen?
Irgendwie muss man sich scheinbar alles irgendwie im Netz zusammensuchen oder versuchen, über die Quelltextdateien weiter zu kommen...

Die bisher umfassendste Sammlung an Informationen ist wohl das Buch von David Hoyle: The Delphi Open Tools API Book.

Schon etwas in die Jahre gekommen, aber immer noch lesenswert ist das Buch von Ray Lischner Hidden Paths of Delphi 3: Experts, Wizards and the Open Tools Api

Die ToolsAPI wird ja auch mit jeder neuen Delphi-Version erweitert. Solange seitens Embarcadero dort nicht mehr kommt, ist eine vollständige Dokumentation daher kaum realisierbar.

KodeZwerg 30. Jul 2018 08:02

AW: Open Tools API - benutzte Unit laden
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1409039)
Schon etwas in die Jahre gekommen, aber immer noch lesenswert ist das Buch von Ray Lischner

Dazu gäbe es auch eine Online Version um zu schauen ob es überhaupt in Frage kommt Delphi Open Tools API

Uwe Raabe 30. Jul 2018 08:36

AW: Open Tools API - benutzte Unit laden
 
Ich hoffe, ein bisschen Eigenwerbung ist in diesem Kontext gestattet. Vielleicht wäre diese Session der kommenden EKON für dich von Interesse: Die Delphi ToolsAPI am praktischen Beispiel

stahli 27. Aug 2018 09:41

AW: Open Tools API - benutzte Unit laden
 
Uwe, vielen Dank für die Hilfe!

Hier ist etwas vom Ergebnis zu sehen: https://www.delphipraxis.net/1411702-post16.html

dummzeuch 27. Aug 2018 12:46

AW: Open Tools API - benutzte Unit laden
 
Auf gexperts.org gibt es auch eine Übersicht über die OTA, allerdings ist die inzwischen ziemlich veraltet.

stahli 12. Mai 2020 21:13

AW: Open Tools API - benutzte Unit laden
 
Mal eine Frage mal an die Profis:

Haltet Ihr die OTAPI-Struktur für nachvollziehbar?
Auf mich macht die einen sehr chaotischen Eindruck und ist schwer verständlich.

Ist das eher ein Problem von mir oder seht Ihr das ähnlich?


Das ist zwar jetzt keine lösungsorientierte Frage, würde mich aber dennoch mal interessieren.

Uwe Raabe 12. Mai 2020 21:35

AW: Open Tools API - benutzte Unit laden
 
Zitat:

Zitat von stahli (Beitrag 1464415)
Haltet Ihr die OTAPI-Struktur für nachvollziehbar?
Auf mich macht die einen sehr chaotischen Eindruck und ist schwer verständlich.

Wenn man es einmal durchschaut hat, ist es nicht mehr so schwierig. Aber ja, am Anfang erschlägt es einen. Es fehlt halt eine Art Wegweiser.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz