Mise à jour: J'ai ajouté le code suivant:Delphi vista fichier ini/xp/win7
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;
Et j'ai changé la fonction setinifilename (voir ci-dessous). Cela ne créera pas la structure de dossier.
--Fin update--
Je suis en retard, sur ce qu'il faut et ne pas faire. C'est ainsi que je sauvegarde actuellement les paramètres de mon logiciel. Je viens de le tester sur Vista pas connecté en tant qu'administrateur, et il me donne un message d'erreur ne peut pas écrire le fichier ini. Donc je devine que je suis supposé écrire les données dans un dossier de données? Je n'ai jamais utilisé vista/win7 auparavant, et je veux que ce logiciel soit compatible avec Windows 2K +. Que dois-je faire pour enregistrer les paramètres. Je ne voulais vraiment pas jouer avec le registre, parce que chaque petit ajout, ralentit l'ordinateur encore plus ... (ou du moins il semble)
Merci pour toute contribution.
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;
Voir ma mise à jour (dans ma réponse). Cela devrait le faire fonctionner. – lkessler
Les comptes d'utilisateurs avec des répertoires d'installation en lecture seule sont possibles depuis la première version de Windows NT il y a plus de 15 ans et étaient assez courants dans les environnements d'entreprise. Vous n'avez jamais testé sur un tel compte auparavant. À moins que vous n'utilisiez les fonctions de l'API Vista uniquement (la documentation MSDN indique la version minimale du système d'exploitation nécessaire pour chaque fonction), les techniques utilisées dans les réponses sont certainement compatibles avec Windows 2000 et les versions ultérieures. – mghie