Je veux mmoriser le contenu d'un combobox

Signaler
Messages postés
89
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2003
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
J'ai fait un executeur de exe. Un bouton ouvre le opendialog et met le chemin du exe dans une combobox puis un autre bouton permet d'executer le exe choisi dans la combobox. Mais un problme se pose: j'aimerai que les chemins des exe qui taient dans la combobox ne disparaissent pas chaque redmarage du logiciel et qu'ils soit mmoris pour toujours.
Merci de m'aider
Youyou0214

10 réponses

Messages postés
155
Date d'inscription
jeudi 6 décembre 2001
Statut
Membre
Dernière intervention
19 avril 2010

Essai d'y enregistrer avec un fichier .ini c'est assez simple a faire
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Si Delphi arrive à conserver les items renseignés à la conception, alors on le peut aussi !
En effet, la propriété Items étant publiée (published), elle est mise en flux et sauvegardée quand tu sauvegardes la fiche sur laquelle est posé le composant TCombobox.

Pour être concret, à l'éxécution :
procedure TForm1.FormDestroy(Sender: TObject);
begin
//Sauvegarder le composant juste avant
//destruction de la fiche
WriteComponentResFile('MyCombo.dat', Combobox1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Vérifier l'existence du fichier
if FileExists('MyCombo.dat') then
begin
//Supprimer celui d'origine
Combobox1.Free;
//Remplacer par celui sauvegardé
ReadComponentResFile('MyCombo.dat', Combobox1);
end;
end;

Comme le composant sauvegarde aussi la référence à son propriétaire, tu le retrouves au même endroit, avec le même contenu ...

Tu n'as rien d'autre à te préoccuper !
Il est pas bien foutu ce Delphi ?

May Delphi be with you.
Delphi advanced
Messages postés
89
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2003

J'ai voulu untiliser les fichiers ini en pensant que c'tait plus simple mais deux problemes ce posent. Mon programme est je le rapelle un executeur le exe. Sur l'venement on desactivate de la form j'ai mis:
procedure TForm5.FormDeactivate(Sender: TObject);
var
FichierIni : TIniFile;
begin
FichierIni:= TIniFile.Create('fav.ini');
FichierIni.WriteString('Preference','Texte',Appli); //Appli[i]tant la variable ou se trouve le nom du exe.
FichierIni.Free;
end;
Un proble se pose: normalement le fichier ini mmorise touts les noms de exe contenus dans la listbox mais il ne mmorise que la dernire. Pourquoi?

2 eme probleme:
sur l'venement onactivate:
procedure TForm5.FormActivate(Sender: TObject);
var
fichierini: Tinifile;
begin
FichierIni:=TIniFile.Create('fav.ini');
nom.Items:=FichierIni.ReadString('Preference','Texte','');//nom tant le nom de la listbox
FichierIni.Free;
end;
A la ligne nom.items:=Tinifiles..... apparait un message d'erreur: Types incompatibles: string et Tstrings.
Que dois-je faire?

Merci

-------------------------------
Rponse au message :
-------------------------------

Si Delphi arrive à conserver les items renseignés à la conception, alors on le peut aussi !
En effet, la propriété Items étant publiée (published), elle est mise en flux et sauvegardée quand tu sauvegardes la fiche sur laquelle est posé le composant TCombobox.

Pour être concret, à l'éxécution :
procedure TForm1.FormDestroy(Sender: TObject);
begin
//Sauvegarder le composant juste avant
//destruction de la fiche
WriteComponentResFile ('MyCombo.dat', Combobox1);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Vérifier l'existence du fichier
if FileExists('MyCombo.dat') then
begin
//Supprimer celui d'origine
Combobox1.Free;
//Remplacer par celui sauvegardé
ReadComponentResFile('MyCombo.dat', Combobox1);
end;
end;

Comme le composant sauvegarde aussi la référence à son propriétaire, tu le retrouves au même endroit, avec le même contenu ...

Tu n'as rien d'autre à te préoccuper !
Il est pas bien foutu ce Delphi ?

[i]May Delphi be with you.
Delphi advanced
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Réponse 1 : si tu ne fais pas varier 'Texte' dans "FichierIni.WriteString('Preference','Texte',Appli);", alors tu écris toujours la dernière valeur (ici Appli) dans la même entrée (ici nommée "Texte").

May Delphi be with you.
Delphi advanced
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Tu essaies d'affecter un chaîne de caractères à une propriété de type TStringList !
Si tu veux vraiment le faire, alors c'est à chaque élément du tableau de chaînes qu'il faut affecter une valeur.

Globalement, tu es dans l'erreur pour les raisons suivantes :
1- tu écris une chaîne différente dans la même entrée de ton fichier .ini
2- quand tu passes en lecture du fichier, nul part tu ne précises le nombre d'entrées à lire
======================
Solution suggérée :
procedure TForm5.FormDeactivate(Sender: TObject);
var
FichierIni : TIniFile;
i : integer;
begin
FichierIni:=TIniFile.Create('fav.ini');
Ini.WriteInteger('Preference', 'Nombre', Nom.Items.Count);
for i:= 0 to Nom.Items.Count - 1 do
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items); //Applitant la variable ou se trouve le nom du exe.
FichierIni.Free;
end;
------------------------------------------------------
procedure TForm5.FormActivate(Sender: TObject);
var
fichierini: Tinifile;
i : integer;
begin
Nom.Items.Clear;
FichierIni:=TIniFile.Create('fav.ini');
i := Ini.ReadInteger('Preference', 'Nombre', 0);
For i:= 0 to i - 1 do
nom.Items.Add(FichierIni.ReadString('Preference','Texte'+IntToStr(i),''));//nom tant le nom de la listbox
FichierIni.Free;
end;

Est-ce clair ?
N'était-ce pas plus facile de sauvegarder les propriétés du composant ?

[i]May Delphi be with you.
Delphi advanced
Messages postés
89
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2003

Merci de ta rponse je vais tester tout de suite

-------------------------------
Rponse au message :
-------------------------------

Tu essaies d'affecter un chaîne de caractères à une propriété de type TStringList !
Si tu veux vraiment le faire, alors c'est à chaque élément du tableau de chaînes qu'il faut affecter une valeur.

Globalement, tu es dans l'erreur pour les raisons suivantes :
1- tu écris une chaîne différente dans la même entrée de ton fichier .ini
2- quand tu passes en lecture du fichier, nul part tu ne précises le nombre d'entrées à lire
======================
Solution suggérée :
procedure TForm5.FormDeactivate(Sender: TObject);
var
FichierIni : TIniFile;
i : integer;
begin
FichierIni:=TIniFile.Create('fav.ini');
Ini.WriteInteger('Preference', 'Nombre', Nom.Items.Count);
for i:= 0 to Nom.Items.Count - 1 do
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items); //Applitant la variable ou se trouve le nom du exe.
FichierIni.Free;
end;
------------------------------------------------------
procedure TForm5.FormActivate(Sender: TObject);
var
fichierini: Tinifile;
i : integer;
begin
Nom.Items.Clear;
FichierIni:=TIniFile.Create('fav.ini');
i := Ini.ReadInteger('Preference', 'Nombre', 0);
For i:= 0 to i - 1 do
nom.Items.Add(FichierIni.ReadString('Preference','Texte'+IntToStr(i),''));//nom tant le nom de la listbox
FichierIni.Free;
end;

Est-ce clair ?
N'était-ce pas plus facile de sauvegarder les propriétés du composant ?

[i]May Delphi be with you.
Delphi advanced
Messages postés
89
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2003

J'ai bien mis la solution que tu m'as donne mais il y a deux erreurs:

1ere: la ligne Ini.WriteInteger('Preference', 'Nombre', Nom.Items.Count);
Ini: indentificateur inconnus j'ai renplac ini par fichierini l'erreur disparait je pense donc que cette erreur est rsolue.

2 me: FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);
La fameuse erreur types incompatibles string et Tstrings et encore la...

-------------------------------
Rponse au message :
-------------------------------

Merci de ta rponse je vais tester tout de suite

-------------------------------
Rponse au message :
-------------------------------

Tu essaies d'affecter un chaîne de caractères à une propriété de type TStringList !
Si tu veux vraiment le faire, alors c'est à chaque élément du tableau de chaînes qu'il faut affecter une valeur.

Globalement, tu es dans l'erreur pour les raisons suivantes :
1- tu écris une chaîne différente dans la même entrée de ton fichier .ini
2- quand tu passes en lecture du fichier, nul part tu ne précises le nombre d'entrées à lire
======================
Solution suggérée :
procedure TForm5.FormDeactivate(Sender: TObject);
var
FichierIni : TIniFile;
i : integer;
begin
FichierIni:=TIniFile.Create('fav.ini');
Ini.WriteInteger('Preference', 'Nombre', Nom.Items.Count);
for i:= 0 to Nom.Items.Count - 1 do
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items); //Applitant la variable ou se trouve le nom du exe.
FichierIni.Free;
end;
------------------------------------------------------
procedure TForm5.FormActivate(Sender: TObject);
var
fichierini: Tinifile;
i : integer;
begin
Nom.Items.Clear;
FichierIni:=TIniFile.Create('fav.ini');
i := Ini.ReadInteger('Preference', 'Nombre', 0);
For i:= 0 to i - 1 do
nom.Items.Add(FichierIni.ReadString('Preference','Texte'+IntToStr(i),''));//nom tant le nom de la listbox
FichierIni.Free;
end;

Est-ce clair ?
N'était-ce pas plus facile de sauvegarder les propriétés du composant ?

[i]May Delphi be with you.
Delphi advanced
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Mea culpa, j'ai copié/collé ton code et j'ai oublié d'en modifier une partie :blush) .
Au lieu de :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);

il faut lire :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);

I'm a little bit confused, sir !
May Delphi be with you.
Delphi advanced
Messages postés
89
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
3 juillet 2003

Au lieu de :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);

il faut lire :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);
Je ne vois aucune diffrence entre ces deux lignes
;-)
Youyou0214

-------------------------------
Rponse au message :
-------------------------------

Mea culpa, j'ai copié/collé ton code et j'ai oublié d'en modifier une partie :blush) .
Au lieu de :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);

il faut lire :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);

I'm a little bit confused, sir !
May Delphi be with you.
Delphi advanced
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Aie, aie, aie !

Au lieu de :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);

il faut lire :
FichierIni.WriteString('Preference','Texte'+intToStr(i), Nom.Items);

Je n'avais pas dû valider ma réponse...
Mille excuses.

May Delphi be with you.
Delphi advanced