Meine finale
Unit. Funktioniert im kompletten Projekt einwandfrei:
Delphi-Quellcode:
unit classIni;
interface
uses
SysUtils, IniFiles;
type
TMemIniFile =
class(IniFiles.TMemIniFile)
private
FAutoSave: Boolean;
public
constructor Create(
const FileName:
string;
const AutoSave: Boolean = True);
overload;
procedure UpdateFile;
override;
end;
implementation
{TMemIniFile}
constructor TMemIniFile.Create(
const FileName:
string;
const AutoSave: Boolean = True);
begin
inherited Create(FileName);
FAutoSave := AutoSave;
end;
procedure TMemIniFile.UpdateFile;
begin
if FAutoSave
then
inherited;
end;
end.
Aufruf
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
IniF: TMemIniFile;
begin
IniF := TMemIniFile.Create(....., <irgendeine-boolsche-variable>);
try
IniF.WriteString('section', 'ident', 'value');
finally
IniF.UpdateFile; // wird nur wirklich ausgeführt, wenn die irgendeine-boolsche-variable true ist
IniF.Free;
end;
end;
Sinn zusammengefasst damit es jeder versteht:
das hier ist dasselbe wie der AutoSave-Parameter ab Berlin.
Mit diesem Code verhindere ich Fehler wenn mein Programm in einem
UAC-geschütztem Verzeichnis gestartet wird.
Teamspeak macht es ähnlich. Bei Programmstart kommt in einem
UAC-geschützten Verzeichnis die Meldung
Zitat:
---------------------------
Error
---------------------------
TeamSpeak 3 cannot write to the configuration file:
...settings.db
You can use TeamSpeak 3, but all settings will be lost!
---------------------------
Ignore Abort
---------------------------
Ein Klick auf Ignore setzt in diesem Fall eine Art AutoSave auf False (ganz grob ausgedrückt).