OpenDialog, EditBox et fichier INI

Résolu
Signaler
Messages postés
8
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
12 février 2008
-
Messages postés
8
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
12 février 2008
-
Bonsoir a tous, par avance désolé si ma reponse peut vous parraitre béte et simple mais je debute et apres plusieurs recherche qui m'ont jusqu'a present permis d'avancer seul, je me trouve bloquer sur un point et j'ai peur d'en perdre les cheveux .

je me creer un appli qui me permet d'afficher et de modifier les infos d'un fichier INI.

Lorsque je demarre mon appli, les EditBox sont bien rempli par les valeur present dans le ini. A coter de chaque EditBox j'ai un bouton auquel est associe soit un OpenDialog, soit un SelectDir.

procedure TForm1.JvXPButton1Click(Sender: TObject);
begin
if selectDir.Execute then
Edit1.Text :=SelectDir.Directory;
end;

procedure TForm1.JvXPButton2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit2.Text :=OpenDialog1.Filename;
end;

mais lorsque je sauve les infos que j'ai recuperer dans mes editbox, seul celle recuperer par le SelectDir sont modifier dans mon fichier INI, j'ai tester en modifiant directement a la main dans les editbox qui me possais probleme et dans ce cas j'ai bien mon fichier INI correctement modifier.

j'en deduit que j'ai louper un passage sur les OpenDialog et c'est la que je vous demande de l'aide.

merci a tous ceux qui aurront la patiente de m'aider.

7 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,
peux-tu donner plus de code puisque j'ai fait des testes et tout fonctionne très bien et à tout les coups donc je pense que le problème viens d'ailleurs.

Combien de données est ce que tu enregistres dans ton fichier Ini ?

@+
Cirec
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Bon essaye déjà de faire comme ça et dis moi si c'est bon où non:

// #################################################################
// LECTURE DU FICHIER INI : CONFIGSPORT.INI
//##################################################################
procedure TForm1.LitFichierIni;
begin
With TIniFile.Create(ExtractFilePath(Application.ExeName) + 'configSport.ini') Do
Begin
Try
Frame2.Edit1.Text:= ReadString('PARAMETRES', 'Database', 'chosir le repertoire');
Frame2.Edit2.Text:= ReadString('SON', 'Debut', 'chosir le repertoire');
Frame2.Edit3.Text:= ReadString('SON', 'Fin', 'chosir le repertoire');
Frame2.Edit4.Text:= ReadString('XEVENT', 'XalarmPath', 'chosir le repertoire');
Frame2.Edit5.Text:= ReadString('XEVENT', 'XEventCmd', 'xxx|CmdXevent2Vbs:refreshXESport');
Frame4.CheckBox1.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Import', false);
Frame4.CheckBox2.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Ligue1', false);
Frame4.CheckBox3.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Ligue2', false);
Frame4.CheckBox4.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Angleterre', false);
Frame4.CheckBox5.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Espagne', false);
Frame4.CheckBox6.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Italie', false);
Frame4.CheckBox7.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Allemagne', false);
Frame4.CheckBox8.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Belgique', false);
Frame4.CheckBox9.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Ecosse', false);
Frame4.CheckBox10.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Suisse', false);
Frame4.CheckBox11.Checked:= ReadBool('CHAMPIONNATS FOOT', 'Portugal', false);
Frame4.CheckBox12.Checked:= ReadBool('CHAMPIONNATS RUGBY', 'Import', false);
Frame4.CheckBox13.Checked:= ReadBool('CHAMPIONNATS RUGBY', 'Top14', false);
Frame4.CheckBox14.Checked:= ReadBool('CHAMPIONNATS RUGBY', 'ProD2', false);
Finally
Free;
End;
End;
end;

// #################################################################
// ECRITURE DU FICHIER INI : CONFIGSPORT.INI
//##################################################################
procedure TForm1.EcritFichierIni;
begin
With TIniFile.Create(ExtractFilePath(Application.ExeName) + 'configSport.ini') Do
Begin
Try
WriteString('PARAMETRES', 'Database', Frame2.Edit1.Text);
WriteString('SON', 'Debut', Frame2.Edit2.Text);
WriteString('SON', 'Fin', Frame2.Edit3.Text);
WriteString('XEVENT', 'XalarmPath', Frame2.Edit4.Text);
WriteString('XEVENT', 'XEventCmd', Frame2.Edit5.Text);
WriteBool('CHAMPIONNATS FOOT', 'Import', Frame4.CheckBox1.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Ligue1', Frame4.CheckBox2.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Ligue2', Frame4.CheckBox3.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Angleterre', Frame4.CheckBox4.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Espagne', Frame4.CheckBox5.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Italie', Frame4.CheckBox6.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Allemagne', Frame4.CheckBox7.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Belgique', Frame4.CheckBox8.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Ecosse', Frame4.CheckBox9.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Suisse', Frame4.CheckBox10.Checked);
WriteBool('CHAMPIONNATS FOOT', 'Portugal', Frame4.CheckBox11.Checked);
WriteBool('CHAMPIONNATS RUGBY', 'Import', Frame4.CheckBox12.Checked);
WriteBool('CHAMPIONNATS RUGBY', 'Top14', Frame4.CheckBox13.Checked);
WriteBool('CHAMPIONNATS RUGBY', 'ProD2', Frame4.CheckBox14.Checked);
finally
Free;
end;
End;
end;

procedure TForm1.Frame4CheckBox1Click(Sender: TObject);
Var I : Integer;
begin
For I : = 2 To 11 Do
With Frame4 Do
With TJvgCheckBox(FindComponent('CheckBox' + IntToStr(I))) Do
If CheckBox1.Checked Then
Show
Else
Hide;
// pour les frames je ne suis pas sur à 100% je ne les utilises pas donc si il y a un problème utilise le code en dessous
{if Frame4.CheckBox1.Checked then
begin
Frame4.CheckBox2.show;
Frame4.CheckBox3.Show;
Frame4.CheckBox4.show;
Frame4.CheckBox5.Show;
Frame4.CheckBox6.show;
Frame4.CheckBox7.Show;
Frame4.CheckBox8.show;
Frame4.CheckBox9.Show;
Frame4.CheckBox10.show;
Frame4.CheckBox11.show;
end
Else
begin
Frame4.CheckBox2.Hide;
Frame4.CheckBox3.Hide;
Frame4.CheckBox4.Hide;
Frame4.CheckBox5.Hide;
Frame4.CheckBox6.Hide;
Frame4.CheckBox7.Hide;
Frame4.CheckBox8.Hide;
Frame4.CheckBox9.Hide;
Frame4.CheckBox10.Hide;
Frame4.CheckBox11.Hide;
end;}
end;

procedure TForm1.Frame4CheckBox12Click(Sender: TObject);
begin
if Frame4.CheckBox12.Checked then
begin
Frame4.CheckBox13.show;
Frame4.CheckBox14.Show;
end
Else
begin
Frame4.CheckBox13.Hide;
Frame4.CheckBox14.Hide;
end;
end;

@+
Cirec
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
ps : Clique sur Réponse Acceptée S.T.P. Merci

@+
Cirec
Messages postés
8
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
12 février 2008

j'utilise une form sur laquel j'affiche differente frame.

je te post tous le code, si ca peut t'aider .... a m'aider ;)

form1 :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, JvComponentBase, JvXPCore, JvBaseDlg,
JvSelectDirectory, JvExControls, JvComponent, JvXPButtons, JvExStdCtrls,
JvEdit, IniFiles, JvDialogs, Unit2, Unit3, Unit4, JvAnimTitle,
JvFormAnimatedIcon, JvAppAnimatedIcon, JvFormTransparent, JvFormAnimation,
JvButton, JvCtrls, JvWinampLabel;

type
TForm1 = class(TForm)
Frame2: TFrame2;
Frame4: TFrame4;
procedure FormCreate(Sender: TObject);
procedure Frame4JvXPButton1Click(Sender: TObject);
procedure Frame2JvXPButton5Click(Sender: TObject);
procedure Frame4JvXPButton2Click(Sender: TObject);
procedure Frame2JvXPButton1Click(Sender: TObject);
procedure Frame4CheckBox1Click(Sender: TObject);
procedure Frame4CheckBox12Click(Sender: TObject);
private
{ Private declarations }
procedure LitFichierIni;
procedure EcritFichierIni;
public
{ Public declarations }
end;

var
Form1: TForm1;
pathxml : string;

implementation

{$R *.dfm}
// #################################################################
// LECTURE DU FICHIER INI : CONFIGSPORT.INI
//##################################################################
procedure TForm1.LitFichierIni;
var FichierIni: TIniFile;

begin
FichierIni:= TIniFile.Create('.\configSport.ini');

Frame2.Edit1.Text:= FichierIni.ReadString('PARAMETRES', 'Database', 'chosir le repertoire');
Frame2.Edit2.Text:= FichierIni.ReadString('SON', 'Debut', 'chosir le repertoire');
Frame2.Edit3.Text:= FichierIni.ReadString('SON', 'Fin', 'chosir le repertoire');
Frame2.Edit4.Text:= FichierIni.ReadString('XEVENT', 'XalarmPath', 'chosir le repertoire');
Frame2.Edit5.Text:= FichierIni.ReadString('XEVENT', 'XEventCmd', 'xxx|CmdXevent2Vbs:refreshXESport');
Frame4.CheckBox1.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Import', false);
Frame4.CheckBox2.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Ligue1', false);
Frame4.CheckBox3.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Ligue2', false);
Frame4.CheckBox4.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Angleterre', false);
Frame4.CheckBox5.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Espagne', false);
Frame4.CheckBox6.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Italie', false);
Frame4.CheckBox7.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Allemagne', false);
Frame4.CheckBox8.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Belgique', false);
Frame4.CheckBox9.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Ecosse', false);
Frame4.CheckBox10.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Suisse', false);
Frame4.CheckBox11.Checked:= FichierIni.ReadBool('CHAMPIONNATS FOOT', 'Portugal', false);
Frame4.CheckBox12.Checked:= FichierIni.ReadBool('CHAMPIONNATS RUGBY', 'Import', false);
Frame4.CheckBox13.Checked:= FichierIni.ReadBool('CHAMPIONNATS RUGBY', 'Top14', false);
Frame4.CheckBox14.Checked:= FichierIni.ReadBool('CHAMPIONNATS RUGBY', 'ProD2', false);
FichierIni.Free;
end;

// #################################################################
// ECRITURE DU FICHIER INI : CONFIGSPORT.INI
//##################################################################
procedure TForm1.EcritFichierIni;
var
FichierIni: TIniFile;
begin
Try
FichierIni:= TIniFile.Create('.\configSport.ini');

FichierIni.WriteString('PARAMETRES', 'Database', Frame2.Edit1.Text);

FichierIni.WriteString('SON', 'Debut', Frame2.Edit2.Text);
FichierIni.WriteString('SON', 'Fin', Frame2.Edit3.Text);

FichierIni.WriteString('XEVENT', 'XalarmPath', Frame2.Edit4.Text);
FichierIni.WriteString('XEVENT', 'XEventCmd', Frame2.Edit5.Text);

FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Import', Frame4.CheckBox1.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Ligue1', Frame4.CheckBox2.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Ligue2', Frame4.CheckBox3.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Angleterre', Frame4.CheckBox4.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Espagne', Frame4.CheckBox5.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Italie', Frame4.CheckBox6.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Allemagne', Frame4.CheckBox7.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Belgique', Frame4.CheckBox8.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Ecosse', Frame4.CheckBox9.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Suisse', Frame4.CheckBox10.Checked);
FichierIni.WriteBool('CHAMPIONNATS FOOT', 'Portugal', Frame4.CheckBox11.Checked);
FichierIni.WriteBool('CHAMPIONNATS RUGBY', 'Import', Frame4.CheckBox12.Checked);
FichierIni.WriteBool('CHAMPIONNATS RUGBY', 'Top14', Frame4.CheckBox13.Checked);
FichierIni.WriteBool('CHAMPIONNATS RUGBY', 'ProD2', Frame4.CheckBox14.Checked);
finally
FichierIni.Free;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
LitFichierIni;
end;

procedure TForm1.Frame4JvXPButton1Click(Sender: TObject);
begin
Frame4.Hide;
Frame2.Show;

end;

procedure TForm1.Frame2JvXPButton5Click(Sender: TObject);
begin
Frame2.Hide;
Frame4.Show;

end;

procedure TForm1.Frame4JvXPButton2Click(Sender: TObject);
begin
EcritFichierIni;
Form1.Close;

end;

procedure TForm1.Frame2JvXPButton1Click(Sender: TObject);
begin
Frame2.JvXPButton1Click(Sender);

end;

procedure TForm1.Frame4CheckBox1Click(Sender: TObject);
begin

if Frame4.CheckBox1.Checked = true then
begin
Frame4.CheckBox2.show;
Frame4.CheckBox3.Show;
Frame4.CheckBox4.show;
Frame4.CheckBox5.Show;
Frame4.CheckBox6.show;
Frame4.CheckBox7.Show;
Frame4.CheckBox8.show;
Frame4.CheckBox9.Show;
Frame4.CheckBox10.show;
Frame4.CheckBox11.show;
end;

if Frame4.CheckBox1.Checked = False then
begin
Frame4.CheckBox2.Hide;
Frame4.CheckBox3.Hide;
Frame4.CheckBox4.Hide;
Frame4.CheckBox5.Hide;
Frame4.CheckBox6.Hide;
Frame4.CheckBox7.Hide;
Frame4.CheckBox8.Hide;
Frame4.CheckBox9.Hide;
Frame4.CheckBox10.Hide;
Frame4.CheckBox11.Hide;
end;

end;
procedure TForm1.Frame4CheckBox12Click(Sender: TObject);
begin

if Frame4.CheckBox12.Checked = true then
begin
Frame4.CheckBox13.show;
Frame4.CheckBox14.Show;
end;

if Frame4.CheckBox12.Checked = False then
begin
Frame4.CheckBox13.Hide;
Frame4.CheckBox14.Hide;
end;

end;

end.

Frame 2:

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JvExControls, JvComponent, JvXPCore, JvXPButtons,
JvComponentBase, IniFiles, JvBaseDlg, JvSelectDirectory, JvDialogs, StdCtrls;

type
TFrame2 = class(TFrame)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit4: TEdit;
Label5: TLabel;
Edit5: TEdit;
OpenDialog1: TJvOpenDialog;
SelectDir: TJvSelectDirectory;
JvXPStyleManager1: TJvXPStyleManager;
JvXPButton1: TJvXPButton;
JvXPButton2: TJvXPButton;
JvXPButton3: TJvXPButton;
JvXPButton4: TJvXPButton;
JvXPButton5: TJvXPButton;
procedure JvXPButton1Click(Sender: TObject);
procedure JvXPButton2Click(Sender: TObject);
procedure JvXPButton3Click(Sender: TObject);
procedure JvXPButton4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

uses Unit1;

{$R *.dfm}

procedure TFrame2.JvXPButton1Click(Sender: TObject);
begin
if selectDir.Execute then
Edit1.Text :=SelectDir.Directory;
end;

procedure TFrame2.JvXPButton2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit2.Text :=OpenDialog1.Filename;
end;

procedure TFrame2.JvXPButton3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit3.Text :=OpenDialog1.Filename;
end;

procedure TFrame2.JvXPButton4Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit4.Text :=OpenDialog1.Filename;
end;

end.

Frame 4 :

unit Unit4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JvExControls, JvComponent, JvXPCore, JvXPButtons, JvgCheckBox,
StdCtrls, JvLED, JvComponentBase, JvAppAnimatedIcon, JvExStdCtrls,
JvWinampLabel;

type
TFrame4 = class(TFrame)
JvXPButton1: TJvXPButton;
CheckBox2: TJvgCheckBox;
CheckBox3: TJvgCheckBox;
CheckBox4: TJvgCheckBox;
CheckBox5: TJvgCheckBox;
CheckBox6: TJvgCheckBox;
CheckBox7: TJvgCheckBox;
CheckBox8: TJvgCheckBox;
CheckBox9: TJvgCheckBox;
CheckBox10: TJvgCheckBox;
CheckBox11: TJvgCheckBox;
JvXPButton2: TJvXPButton;
CheckBox1: TCheckBox;
CheckBox12: TCheckBox;
CheckBox13: TJvgCheckBox;
CheckBox14: TJvgCheckBox;
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

{$R *.dfm}

procedure TFrame4.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
CheckBox6.Show;
end;

end.

Par avance merci.
Messages postés
8
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
12 février 2008

merci beaucoup. ca fonctionne nikel maintenant.

pour les frames par contre je garde ma methode, j'ai pas reussi a faire fonctionner la tienne, mais ce n'est pas grave, je debute donc j' allege mon code au fur et a mesure que j'apprends.

a bientot pour d'autre question. ( pas trop non plus, j'aime qd même trouver par moi même ).
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
on fait je pense que tu serais curieux de savoir ce qui clochait non?
Et bien le fait d'avoir écris ceci : FichierIni:= TIniFile.Create('.\configSport.ini');
enregistre bien le fichier une première fois mais dès que tu choisi un répertoire avec SelectDir le répertoire par défaut change et prend la valeur de la sélection effectué avec SelectDir
Pour éviter ceci il faut préciser le répertoire dans le quel on veut enregistrer le fichier Ini :
TIniFile.Create(ExtractFilePath(Application.ExeName) + 'configSport.ini') : Ici on récupère le répertoire de l'application avec ExtractFilePath donc plus de problème

donc si tu fait une recherche sur ton disque dur tu devrais trouver au moins un Fichier configSport.ini qui n'est pas à sa place

@+
Cirec
Messages postés
8
Date d'inscription
dimanche 13 novembre 2005
Statut
Membre
Dernière intervention
12 février 2008

merci pour cette explication, c'est mieux de comprendre ce qu'on fait.

et en effet j'ai quelques fichiers mal placer ( je fai bcp de test ).

encore merci.