Re, j'arrive à pas à enregistrer l'état de mon CheckBox, quelqu'un a une idée ? J'essaie de mettre en application ce qui est dit dans la FAQ mais rien n'y fait :cry:
http://cpp.developpez.com/faq/bcb/?page=systemeregistre
Une idée ?
Version imprimable
Re, j'arrive à pas à enregistrer l'état de mon CheckBox, quelqu'un a une idée ? J'essaie de mettre en application ce qui est dit dans la FAQ mais rien n'y fait :cry:
http://cpp.developpez.com/faq/bcb/?page=systemeregistre
Une idée ?
Bon finalement après avoir bidouillé mon code j'en suis arrivé à ça et ça a l'air de marcher :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 __fastcall TAnniversaire::TAnniversaire(TComponent* Owner) : TForm(Owner) { TRegistry *Reg = new TRegistry(); Reg->RootKey = HKEY_LOCAL_MACHINE; Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false); if(Reg->ValueExists("Checked")){ CheckBox1->Checked = true; }else{ CheckBox1->Checked = false; Reg->DeleteValue("AnniversaireM"); } delete Reg; }
Sa marche, est-ce que c'est correct ? Je l'espère :ccool:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void __fastcall TAnniversaire::FormClose(TObject *Sender, TCloseAction &Action) { TRegistry *Reg = new TRegistry; Reg->RootKey = HKEY_LOCAL_MACHINE; Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",true); if ( CheckBox1->Checked ){ Reg->WriteBool("Checked",true); Reg->WriteString("AnniversaireM", Application->ExeName); }else{ Reg->DeleteValue("Checked"); } Reg->CloseKey(); delete Reg; }
Tu enregistres la propriété Checked de ton contrôle avec WriteBool?
Pour lire tu peux utiliser ReadBool.
Euh ouais, si il est coché je j'enregistre le Boolean "Checked" à true,
ce qui me permet de le tester lors que démarrage du programme...
Peut-être que je devrais simplement enregistrer un nom "Checked" dans le registre et tester si il existe ou non comme je l'ai fait dans l'initialisation de mon programme.
Mon dernier message est arrivé quelques secondes après le tiens, donc je ne l'avais pas encore lue, c'est pourquoi ce que je dit n'a pas de sens par rapport à ce que tu as écris.
Tu devrais utiliser HKEY_CURRENT_USER à la place de HKEY_LOCAL_MACHINE, car dans beaucoup de cas les ordinateurs dans les bureaux n'ont pas les droits d'admin et ne peuvent donc pas écrire à cet endroit.
Voici mon code pour ce genre de truc:
Et:Code:
1
2
3
4
5
6
7
8
9
10
11 TRegistry *reg = new TRegistry(); try { reg->RootKey = HKEY_CURRENT_USER; reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false); MaVal = reg->ValueExists(Application->Title); } catch (...) { // Valeur par défaut } delete reg;
Comme tu vois, c'est pratiquement la même chose toi. Disons, qu'il n'y a pas 100 000 façon de le faire :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 TRegistry *reg = new TRegistry(); reg->RootKey = HKEY_CURRENT_USER; if(reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run", false)) { try { reg->WriteString(Application->Title, Application->ExeName); } catch(...) { // L'écriture dans le registre a échoué } } reg->CloseKey(); delete reg;
Ah ok donc je vais mettre ça dans le HKEY_CURRENT_USER !
Merci beaucoup. :ccool: