Code sur chargement de form

Résolu
mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006 - 1 févr. 2005 à 15:26
mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006 - 1 févr. 2005 à 16:54
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

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 11
1 févr. 2005 à 16:23
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 !
3
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 11
1 févr. 2005 à 16:19
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 !
0
mathieu57100 Messages postés 103 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 9 février 2006
1 févr. 2005 à 16:54
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.
0
Rejoignez-nous