AGB  ·  Datenschutz  ·  Impressum  







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

Open Tools API - benutzte Unit laden

Ein Thema von stahli · begonnen am 29. Jul 2018 · letzter Beitrag vom 6. Jan 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von stahli
stahli

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

Open Tools API - benutzte Unit laden

  Alt 29. Jul 2018, 21:07
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:
tmpEditView := EditView.GetEditViewForUsedUnit(aUnitName);

Hat jemand einen Tipp, wie ich da ran komme?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#2

AW: Open Tools API - benutzte Unit laden

  Alt 29. Jul 2018, 22:08
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Open Tools API - benutzte Unit laden

  Alt 29. Jul 2018, 22:29
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...
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#4

AW: Open Tools API - benutzte Unit laden

  Alt 30. Jul 2018, 07:44
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Open Tools API - benutzte Unit laden

  Alt 30. Jul 2018, 08:02
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
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#6

AW: Open Tools API - benutzte Unit laden

  Alt 30. Jul 2018, 08:36
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
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Open Tools API - benutzte Unit laden

  Alt 27. Aug 2018, 09:41
Uwe, vielen Dank für die Hilfe!

Hier ist etwas vom Ergebnis zu sehen: https://www.delphipraxis.net/1411702-post16.html
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.468 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Open Tools API - benutzte Unit laden

  Alt 27. Aug 2018, 12:46
Auf gexperts.org gibt es auch eine Übersicht über die OTA, allerdings ist die inzwischen ziemlich veraltet.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Open Tools API - benutzte Unit laden

  Alt 12. Mai 2020, 21:13
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#10

AW: Open Tools API - benutzte Unit laden

  Alt 12. Mai 2020, 21:35
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:22 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