- 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;
...