Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   OTA: wie fange ich speichern ab? (https://www.delphipraxis.net/57498-ota-wie-fange-ich-speichern-ab.html)

MaBuSE 22. Nov 2005 10:14


OTA: wie fange ich speichern ab?
 
  • Platform: Win32
    Version: Delphi 7 Enterprise
Hallo,

ich möchte eine *.bpl schreiben, die sich in das Abspeichern von Projekten einklingt.
Ich habe zwar folgenden Notifierer installiert, aber BeforeSave wird nie aufgerufen.
Delphi-Quellcode:
...
 TIdeNotifier = class(TNotifierObject, IOTANotifier, IOTAIDENotifier, IOTAActionServices)
  private
    FFileName: string;
  protected
    procedure AfterSave; overload;
    procedure BeforeSave; overload;
    procedure FileNotification(NotifyCode: TOTAFileNotification; const FileName: string; var Cancel: Boolean); overload;
...
Außerdem könnte ich den Vorgang nicht unterbrechen.

Es gibt ein IOTAActionServices interface, in dem folgende Funktionen definiert sind:
Delphi-Quellcode:
...
    function CloseFile(const FileName: string): Boolean;
    function OpenFile(const FileName: string): Boolean;
    function OpenProject(const ProjName: string; NewProjGroup: Boolean): Boolean;
    function ReloadFile(const FileName: string): Boolean;
    function SaveFile(const FileName: string): Boolean;
...
Wie klinke ich mich in die SaveFile ein?

Hintergrund:
Ich möchte verhindern, das unsere Delphi Programmierer *.pas / *.dfm Dateien auf C: speichern.

Jeder Quelltext (auch Testprogramme oder Beispiele) soll auf dem Netzwerk (LW B: oder M:) gespeichert werden.

Bei anderen Laufwerken sollte nur eine kleine Fehlermeldung kommen.

Wenn ich mich in obige Funktionen einklingen könnte wäre das ideal:
Ich habe den FileNamen und kann mit Result bestimmen ob es zulässig ist.
Man müsste nur im "Erfolgsfall" die alte SaveFile aufrufen. Fertig.

Delphi-Quellcode:
...
function SaveFile(const FileName: string): Boolean;
begin
  if POS(ExtractFileDrive(FileName), 'B|M|\\SERVER\FREIGABE\') > 0 then
  begin
    Result := OldSaveFile(FileName);
  end
  else
  begin
    ShowMessage('Fehlermeldung');
    Result := False; // nicht auf "richtigem" Laufwerk
  end;
end;
...

Robert Marquardt 22. Nov 2005 10:21

Re: OTA: wie fange ich speichern ab?
 
Probier mal override statt overload.

MaBuSE 22. Nov 2005 10:26

Re: OTA: wie fange ich speichern ab?
 
Zitat:

Zitat von Robert Marquardt
Probier mal override statt overload.

Hatte ich auch schon, funktioniert aber auch nicht.
Ist keine Virtuelle ist eine Statische.

FileNotification wird aufgerufen ;-), aber die *Save nicht :-(.

Robert Marquardt 22. Nov 2005 11:07

Re: OTA: wie fange ich speichern ab?
 
Ach ja das sind die Implementationen der verschiedenen Interfaces und dort sind mehrere overload.
Bekommst du keine FileNotification?

MaBuSE 22. Nov 2005 12:21

Re: OTA: wie fange ich speichern ab?
 
Zitat:

Zitat von Robert Marquardt
Ach ja das sind die Implementationen der verschiedenen Interfaces und dort sind mehrere overload.
Bekommst du keine FileNotification?


Zitat:

Zitat von MaBuSE
FileNotification wird aufgerufen ;-), aber die *Save nicht :-(.

Doch, habe ich doch geschrieben, aber die bringt mir nichts.

Ich muß beim Abspeichern der *.pas, *.dfm *.dpr, *.dpk, *.bpg, *.inc, *.sql, ... eingreifen.

Leider kann man bei der FileNotification nur zwischen folgenden unterscheiden:
Delphi-Quellcode:
TOTAFileNotification = (ofnFileOpening, ofnFileOpened, ofnFileClosing,
    ofnDefaultDesktopLoad, ofnDefaultDesktopSave, ofnProjectDesktopLoad,
    ofnProjectDesktopSave, ofnPackageInstalled, ofnPackageUninstalled,
    ofnActiveProjectChanged);
Ich sehe nicht wenn was gespeichert wird.
Beim Drücken auf den Speichern Button wird keine FileNotification ausgeführt. Wohl aber beim Öffnen einer Unit. :-(


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