Je veux mmoriser le contenu d'un combobox

Youyou0214 Messages postés 89 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 3 juillet 2003 - 15 juin 2002 à 12:59
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 18 juin 2002 à 20:42
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

g0belin Messages postés 155 Date d'inscription jeudi 6 décembre 2001 Statut Membre Dernière intervention 19 avril 2010
15 juin 2002 à 14:30
Essai d'y enregistrer avec un fichier .ini c'est assez simple a faire
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 juin 2002 à 23:01
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
0
Youyou0214 Messages postés 89 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 3 juillet 2003
17 juin 2002 à 18:34
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 juin 2002 à 19:41
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 juin 2002 à 20:28
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
0
Youyou0214 Messages postés 89 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 3 juillet 2003
17 juin 2002 à 20:38
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
0
Youyou0214 Messages postés 89 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 3 juillet 2003
17 juin 2002 à 21:16
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 juin 2002 à 22:11
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
0
Youyou0214 Messages postés 89 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 3 juillet 2003
18 juin 2002 à 17:59
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
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 juin 2002 à 20:42
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
0
Rejoignez-nous