Frage

Update: Ich habe den folgenden Code hinzugefügt:


function TSettingsForm.AppDataPath: string;
 //CSIDL_APPDATA  Individual user Data
//CSIDL_COMMON_APPDATA  Common to Computer Data
  // works so long as people have at least IE 4.  (and Win95 or better)
var
   r: Bool;
   path: array[0..Max_Path] of Char;
begin
   r := ShGetSpecialFolderPath(0, path, CSIDL_APPDATA, False) ;
   if r then result := path
   else result := '';
end;

Und ich habe die setinifilename Funktion geändert (siehe unten). Es wird nicht die Ordnerstruktur erstellen.

- Ende update--

Ich bin hinter der Zeit, was immer und nicht zu tun. Dies ist, wie ich zur Zeit die Einstellungen für meine Software zu speichern. Getestet habe ich es nur auf Vista nicht als Administrator angemeldet sind, und es gibt mir eine Fehlermeldung kann nicht INI-Datei schreiben. Also ich vermute, ich soll die Daten an einen Datenordner schreiben? Ich habe noch nie vista / win7, bevor sie verwendet, und wollen diese Software Fenster sein 2K + kompatibel. Was soll ich die Einstellungen speichern tun. Ich auch wollte wirklich nicht mit der Registrierung zu verwirren, weil jedes Bisschen Sie es, verlangsamt den Computer nur hinzufügen, dass viel mehr ... (oder so scheint es)

Vielen Dank für jede Eingabe.



procedure TSettingsForm.setinifilename;
var filename:string;
    Path:string;
  begin
    filename:='key.ini';
    path:=AppDataPath+'\MyCompanyName\ProductName\';
    if NOT DirectoryExists(path) then
        CreateDir(path);
    inifilename:= path+filename;
  end;

procedure TSettingsForm.SaveSettings;
var
 appINI:  TIniFile;

begin
    appINI := TIniFile.Create(inifilename) ;
try
    low:= Trunc (edt_low.value);
    high:=Trunc (edt_high.value);
    appINI.WriteInteger('SPEED','LOW',low);
    appINI.WriteInteger('SPEED','HIGH',high);
    appINI.WriteString('PROXY','SERVER',edtProxyServer.Text);
    appINI.WriteString('PROXY','PORT',edtProxyPort.Text);
    appINI.WriteString('PROXY','USERNAME',edtProxyUserName.Text);
    appINI.WriteString('PROXY','PASSWORD',edtProxyPass.Text);

//    status.text:='Saved Data';
  finally
    appIni.Free;
  end;
end;
 procedure TSettingsForm.GetSettings;
Var
  appINI : TIniFile;
begin
  appINI := TIniFile.Create(inifilename) ;
  try
    //if no last user return an empty string
    edt_low.value:= appINI.ReadInteger('SPEED','LOW',0);
    edt_high.value:= appINI.ReadInteger('SPEED','HIGH',0);
    low:= Trunc (edt_low.Value);
    high := Trunc (edt_high.Value);

    edtProxyServer.Text:=appINI.ReadString('PROXY','SERVER','');
    edtProxyPort.Text:=appINI.ReadString('PROXY','PORT','0');
    edtProxyUserName.Text:=appINI.ReadString('PROXY','USERNAME','');
    edtProxyPass.Text:= appINI.ReadString('PROXY','PASSWORD','');
  finally
    appINI.Free;
  end;
 end;

War es hilfreich?

Lösung

In Vista, das Programm nicht zu schreiben, um das Programm Datei Verzeichnis erlaubt ist, wo Ihr Programm befindet.

Sie müssen jetzt Ihre INI-Dateien im AppData-Verzeichnis speichern.

Eine Beschreibung, wie dies in delphi zu tun ist: http://www.theabsolute.net/sware/delphivista.html#datafolder

Und sein Vista / Windows 7 kompatibel, der Rest dieser Webseite wird eine gute Richtschnur sein.


Für das Update können Sie nicht CreateDir mehr als 1 Ebene tief auf einmal. Verwenden Sie die Force funktionieren statt:

    path:=AppDataPath+'\MyCompanyName\ProductName\'; 
    if NOT DirectoryExists(path) then
      ForceDirectories(path);

P. S. Haben Sie keine Angst Programmeinstellungen in der Registrierung zu schreiben. Das ist, was die Registrierung ist für. In der Tat, behandelt es richtig Einstellungen für verschiedene Benutzer für Sie, wenn andere Benutzer angemeldet sind. Das Register arbeitet in der gleichen Art und Weise in 98 / Vista / 7. Während ini-Dateien haben abgeschrieben tatsächlich sind, und nicht mehr von Windows verwendet werden.

Sie sagen, Sie wollen nicht mit der Registrierung zu verwirren, weil „jedes Bisschen Sie es, verlangsamt den Computer nur hinzufügen, dass viel mehr“. Eigentlich ist das nicht wahr. Die Registrierung ist einfach eine Datenbank. Und wenn es 10 MB oder 100 MB ist, es ist der Unterschied in der Zeit für den Zugriff erfolgt ist imperceptable.

Es ist all diese Unternehmen verkaufen Registry Cleaner Programme, die dieses Märchen zu halten versuchen würde. ihre Reiniger verwenden, können Sie mehr schaden als nützen. Alles, was sie tun müssen, um ein oder zwei wichtige Einträge auszulöschen und Sie in tiefen doo-doo sein kann. Bitte lesen Sie diesen Artikel über Registry-Reiniger , und vor allem die „Marginal Performance-Vorteil“ Abschnitt, der richtig erklärt dass die Probleme in Windows 98 und früher bei der Kanzlei hatten wurden meist festgelegt.

Wenn Ihr Programm fügt mehr als 2 oder 3 KB an die Kanzlei, das wird eine Menge sein, und es ist eine unbedeutende Menge. Verwenden Sie die Registrierung. Machen Sie es gleich.

Andere Tipps

Sie sollten das Anwendungsdaten-Verzeichnis für Ihre App-Daten verwenden, in Delphi Sie diesen Ordner programmatisch die Shell api-Funktion finden SHGetSpecialFolderLocation

Embarcadero eine FAQ-Seite zu diesem Thema haben, hier.

Wie bereits erwähnt -. Sie nicht speichern alles in der App-Ordner

Sie sollten Ihre Konfigurationseinstellungen in zwei Teile aufgeteilt:

Ein Teil der Einstellungen, muss Arbeit regardlees des Benutzers enthalten, -., Dass ein Teil in COMMON_APPDATA gespeichert werden soll

Ein zweiter Teil enthält die einzelnen Benutzer-Einstellungen (Benutzer persönliche Wahl der Schriftart usw.) -, dass ein Teil in APPDATA gespeichert werden soll

Wie für die CreateDir, ist es wahr, dass Sie nicht mehr als eine Ebene zu einer Zeit erstellen können - aber Delphi hat die Force Funktion, die genau das tun.

z. Force ( 'C: \ MyFolder \ SubFolder \ SubSubFolder');

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top