Code sur chargement de form [Résolu]

Signaler
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006
-
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006
-
Bonjour,

j'ai une valeur dans la base de registre que je voudrai charger dans une combobox sur la fiche principale de mon appli au chargement de cette dernière, mais le remplissage de la combobox ne se fait pas...

voici le code pour lire la clé du registre:

procedure ......
var
Registre : TRegistry;
begin
Registre := TRegistry.Create;
Registre.RootKey := HKEY_CURRENT_USER;
Registre.OpenKey('\Software\IpMail\Param',False);
cbTemp.Text := Registre.ReadString('Temp');
Registre.CloseKey;
Registre.Free;
end;

je l'ai essayé sur les procédure suivante sans que ca fonctionne:
onActivate
onHide
onShow
onCreate

la procédure qui enregistre la veleur combobox.text dans la base de registre lors de la fermerture de l'appli fonctionne très bien...

merci d'avance pour vos réponses.

3 réponses

Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
11
Dsl : j'ai oublié quelque-chose dans le deuxième exemple (enlever la vat txt que j'utilisais pr les tests)...

Le voilà donc correct :
procedure ......
var
Registre : TRegistry;
a : integer;
begin
Registre := TRegistry.Create;
Registre.RootKey := HKEY_CURRENT_USER;
Registre.OpenKey('\Software\IpMail\Param',False);
for a : = 0 to cbTemp.Items.Count do if Registre.ReadString('Temp') cbTemp.Items[a] then cbTemp.ItemIndex : a;
Registre.CloseKey;
Registre.Free;


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
11
Le problème vient de
cbTemp.Text := Registre.ReadString('Temp');

En effet, il et impossible d'écrire dans la propriété Text de la comboBox quand son style est OwnerDraw ou DropDownList car la ComboBox ne peut que afficher que des éléments de la liste et l'utilisateur ne peut pas entrer des éléments manuellement...

Il y a donc deux possiblités :

Soit tu ajoutes un item dans la liste et tu le sélectionnes :
procedure ......
var
Registre : TRegistry;
a : integer;
begin
Registre := TRegistry.Create;
Registre.RootKey := HKEY_CURRENT_USER;
Registre.OpenKey('\Software\IpMail\Param',False);
cbTemp.Items.add(Registre.ReadString('Temp'));
cbTemp.ItemIndex := cbTemp.Items.Count-1;
Registre.CloseKey;
Registre.Free;
end;

Soit, si ton appli est censée sélectionner un item déjà présent (donc que tu ne veux pas le rajouter) tu le sélectionnes simplement sans l'ajouter :
procedure ......
var
Registre : TRegistry;
a : integer;
begin
Registre := TRegistry.Create;
Registre.RootKey := HKEY_CURRENT_USER;
Registre.OpenKey('\Software\IpMail\Param',False);
for a : = 0 to cbTemp.Items.Count do if txt cbTemp.Items[a] then cbTemp.ItemIndex : a;
Registre.CloseKey;
Registre.Free;
end;

Voilà, j'espère que cela te conviendra !


@+
Bonne Prog'
Nico



<HR>
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !
Messages postés
103
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
9 février 2006

Merci.

et en plus elle m'a donné une idée:
dans la base de registre je mémorise la valeur IntToStr(cbTemp.ItemIndex)
et je restaure au chargement de l'application:
cbTemp.ItemIndex := StrToInt(Registre.ReadString('Temp'));
ca évite la boucle IF.

Merci encore pour ta réponse.