Bonjour à tous.
J'utilise Builder depuis quelques années, et je viens de tomber sur quelque chose qui me semble être un bug (vous jugerez vous mêmes).
Je programme un logiciel qui doit, à un moment donné, mémoriser des adresses de répertoires afin de venir y stocker des fichiers ou venir les chercher. J'utilise donc dans ma fenêtre, un TSaveDialog qui me permet de choisir un répertoire (en faisant samblant d'y enregistrer un fichier "[ici]"). Je récupère alors le nom de ce fichier virtuel, d'où j'extrais le répertoire. Jusqu'à là, ça marche. Ensuite, j'enregistre ce chemin dans un TEdit (edit->Text). Ca marche aussi. Lorsque je valide mes modifs, j'ouvre un TIniFile et je fais un simple ini->WriteString("section","clé",edit->Text) qui m'enregistre le chmin dans le fichier ini.
A partir de là se produisent 2 situations différentes:
- soit, si j'ai entré le chemin à la main dans mon TEdit, la chaine s'enregistre bien dans le INI
- soit, si j'ai utilisé le TSaveDialog pour générer la chaine (dans le même TEdit), il ne se produit rien dans le INI! Pourtant, la lecture de edit->Text produit le bon résultat.
Je vous envoi le code.
Vous avez pu remarquer la ligne avec le cmbCOM qui me permet aussi d'enregistrer le nom du port COM dans le INI, bref, cette ligne là marche à tous les coups, meme si les suivantes ne marchent pas... Etrange non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 void __fastcall TFormReglages::BtnPathClick(TObject *Sender) { dlgPathCartes->InitialDir = EdtPathCartes->Text; if (dlgPathCartes->Execute()){ EdtPathCartes->Text = dlgPathCartes->FileName.SubString(0,dlgPathCartes->FileName.Length()-5); } } void __fastcall TFormReglages::BtnValideClick(TObject *Sender) { TIniFile* conf = new TIniFile("./config.ini"); conf->WriteString("COM","comport",cmbCOM->Text); AnsiString str1 = EdtPathCartes->Text; AnsiString str2 = EdtPathLogCartes->Text; AnsiString str3 = EdtPathLog->Text; MessageBox(NULL,(str1+" "+str2+" "+str3).c_str(),"",MB_OK); conf->WriteString("PATH","cards",str1); conf->WriteString("PATH","logcards",str2); conf->WriteString("PATH","log",str3); delete(conf); }
Pour info, le MessageBox affiche bien le contenu des TEdit, meme remplis avec le TSaveDialog.
Les options de TSaveDialog sont les suivantes:
[ofReadOnly,ofHideReadOnly,ofPathMustExist,ofNoReadOnlyReturn,ofEnableSizing,ofDontAddToRecent]
Qu'en pensez vous? Croyez vous un bug de Builder? ou alors quelque chose m'échappe? En attendant, je vais les rentrer à la main!
Merci!
Benz
Partager