Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   OTA: Frage zu den Notifier in der Open ToolsAPI (https://www.delphipraxis.net/80527-ota-frage-zu-den-notifier-der-open-toolsapi.html)

MaBuSE 10. Nov 2006 12:20


OTA: Frage zu den Notifier in der Open ToolsAPI
 
Schlagworte: OTA, Open ToolsAPI, Notifier
Sprache: Delphi 2006 Win32


Hallo,
ich möchte einen Experten schreiben, der auf Änderungen der Im Editor befindlichen Dateien reagiert.

Folgende Änderungen möchte ich mitbekommen:
  • Öffnen (Laden) einer Datei (das hab ich schon ;-))
  • Änderung der Datei im Filesystem (nicht im Editor)
    Also bevor die Meldung kommt: "Datei hat sich geändert. Neuladen?"
  • Wechsel der Datei im Editor, Formulardesigner oder Modelansicht
Hintergrund:
Ich habe einen Reihe Actions, die abhängig sind von dem Status der Datei.
Diese Actions sind im Menü und in der Toolbar der Delphi 2006 IDE sichtbar.

Wenn der Benutzer also die Datei wechselt (Anderes Tab im Editor auswählt, oder in der Projektansicht ein anderes File auswählt und im Editor aktiviert) soll je nach Status der Datei die entsprechenden Actions enabled oder disabled werden.

Frage:
Welche Notifier kann ich den verwenden um die fehlenden Ereignisse abzufangen?

Ich habe es mit einem IOTAIDENotifier versucht, aber die greift nur beim Datei öffnen.
Delphi-Quellcode:
...
  TmyCcIdeNotifier = class( TNotifierObject, IOTANotifier, IOTAIDENotifier)
  public
    { IOTAIDENotifier }
    procedure FileNotification(NotifyCode: TOTAFileNotification;
      const FileName: string; var Cancel: Boolean);
    procedure BeforeCompile(const Project: IOTAProject; var Cancel: Boolean); overload;
    procedure AfterCompile(Succeeded: Boolean); overload;
  end;
...
procedure Register;
begin
  myCcNotifierIndex := (BorlandIDEServices as IOTAServices).AddNotifier(TmyCcIdeNotifier.Create);
end;
...
Für sachdienliche Hinweise bin ich wie immer dankbar :thump:

MaBuSE 13. Nov 2006 13:13

Re: OTA: Frage zu den Notifier in der Open ToolsAPI
 
*push*

Das weiß doch bestimmt jemand von Euch, oder? :thumb:

marabu 13. Nov 2006 13:26

Re: OTA: Frage zu den Notifier in der Open ToolsAPI
 
Hallo,

ist es nicht die Schnittstelle IOTAEditorNotifier, die du implementieren musst? Zumindest erweckt meine Dokumentation diesen Eindruck bei mir:

D7 : Entwicklerhandbuch : Komponentenentwicklung : Einen Experten über IDE-Ereignisse benachrichtigen
IOTAEditorNotifier: Eine Quelldatei wird geändert oder gespeichert, oder im Editor werden Dateien gewechselt.

Grüße vom marabu

MaBuSE 13. Nov 2006 13:38

Re: OTA: Frage zu den Notifier in der Open ToolsAPI
 
Danke für die Antewort.
Zitat:

Zitat von marabu
ist es nicht die Schnittstelle IOTAEditorNotifier, die du implementieren musst? Zumindest erweckt meine Dokumentation diesen Eindruck bei mir:
D7 : Entwicklerhandbuch : Komponentenentwicklung : Einen Experten über IDE-Ereignisse benachrichtigen
IOTAEditorNotifier: Eine Quelldatei wird geändert oder gespeichert, oder im Editor werden Dateien gewechselt.

Das bin ich gerade am ausprobieren.
Es wird eine Notifikation ausgelöst
  • beim Ändern des Quelltextes im Editor (das brauche ich nicht :-(),
  • beim Aktivieren des Tabs der Datei :-),
  • aber leider nicht wenn die Datei im Filesystem geändert wird
    und die Meldung kommt "Die Datei hat sich geändert, neuladen?" :-(
Das habe ich am Wochenende getestet.
http://www.gexperts.org/opentools/EditorNotifier.zip

Das bringt mich zwar einen Schritt weiter, aber ist noch nicht die Lösung.
(Das hatte ich vergessen zu ergänzen, sorry)

Außerdem habe ich noch folgende Fragen zu den EditorNotifier:
  • Muß wirklich für jede geöffnete Datei ein eigener Notifier rgistriert werden?
  • Oder gibt es eine globale Möglichkeit ihn für alle Dateien zu registieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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