![]() |
Open Tools API - benutzte Unit laden
Ich bearbeite über einen Delphi-Experten eine aktuell geöffnete Unit.
Delphi-Quellcode:
Das funktioniert auch gut.
EditorServices := BorlandIDEServices as IOTAEditorServices;
EditView := EditorServices.TopView; ChangeCode(EditView); 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? |
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; |
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... |
AW: Open Tools API - benutzte Unit laden
Zitat:
![]() Schon etwas in die Jahre gekommen, aber immer noch lesenswert ist das Buch von Ray Lischner ![]() 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. |
AW: Open Tools API - benutzte Unit laden
Zitat:
![]() |
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:
![]() |
AW: Open Tools API - benutzte Unit laden
Uwe, vielen Dank für die Hilfe!
Hier ist etwas vom Ergebnis zu sehen: ![]() |
AW: Open Tools API - benutzte Unit laden
Auf
![]() |
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. |
AW: Open Tools API - benutzte Unit laden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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-2025 by Thomas Breitkreuz