Fichier ini

Résolu
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010 - 18 févr. 2006 à 13:16
 jlen100 - 20 févr. 2006 à 18:41
Bonjour,

J'ai une form1 :

Code:,
----

uses unit2;
procedure TForm1.FormCreate(Sender: TObject);
begin
{Police récupérée dans le fichier "Options.opt"}
LoadFont(FileName: String; Section: string);
Dans un unit 2 :

Code:,
----

uses IniFiles;
procedure LoadFont(FileName: String; Section: string);
begin
Try
filename:=(ExtractFilepath(application.ExeName)+ 'Options.opt','Sections Options') ;

J'ai un message d'erreur. Pourquoi ?

23 réponses

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 13
18 févr. 2006 à 14:45
Salut yannba,

I. "J'ai un message d'erreur. Pourquoi ?"
Il faut absolument que tu précises quel message d'erreur tu obtiens, s'il survient à la compilation ou à l'exécution, et sur quelle ligne s'arrête le compilateur.

II. Explique ce que tu cherches à faire au final,
histoire que l'on ait une idée de ce que tu veux réaliser avec le code que tu donnes...
Que cherches-tu à faire par l'intermédiaire de ce code ? Lire une section d'un fichier ini ?

III. le code :
filename:= (ExtractFilepath(application.ExeName)+ 'Options.opt','Sections Options') ;
n'est pas correct... Cela revient au même que d'utiliser cette syntaxe : FileName := 'xxxx' , 'xxxx';
Pourquoi mettre une virgule ????

IV. Proposition
La même que Cirec... A condition que l'on ait bien compris ce que tu comptais faire. On peut cependant encore faire une légère modif, comme ça on supprime la déclaration de la variable Ini et on évite de réécrire Ini. à chaque fois que l'on veut procéder à une lecture/écriture :
uses
IniFiles;
var
FileName, FontName : string;

FileName : = ExtractFilepath(application.ExeName)+'Options.opt';
with TIniFile.Create(FileName) do try
FontName := ReadString('SectionOptions', 'Font', 'Arial'); // Récupère le nom de la police stocké dans la valeur Font de la section SectionOptions du fichier ini, ou attribue la police Arial comme donnée par défaut si la valeur n'existe pas dans le fichier ini
[...]
finally
Free;
end;

@+
Nico { http://www.ni69.new.fr/ }

<hr size ="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 14:47
Bon c'est pas grave,
alors tu fait comme ça :

Dans la partie Interface de L'unit2 tu déclares tes variables comme suit :

Var
Form2 : TForm2;
ColorForm, ... :integer;

Implémentation

Procedure LoadFont(FileName: String; Section: string);
var ListeOptions: TIniFile;
begin
Try
ListeOptions:= TIniFile.Create(FileName);
ColorForm:=ListeOptions.ReadInteger(Section, 'ColorForm', Ici tu mets une couleur par défaut );
...
finally
ListeOptions.Free ;
end;
End;

et dans Unit1

uses unit2;
//Var ColorForm, ... :integer; Ne pas redéclarer les variables elle sont accessibles grâce à Uses Unit2
procedure TForm1.FormCreate(Sender: TObject);
begin
{Police récupérée dans le fichier "Options.opt"}
LoadFont(ExtractFilepath(application.ExeName)+ Options.opt','Sections Options');
Form1.Color: = ColorForm;
...
end;

@+
Cirec
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 13:56
Salut,

Essaye comme ça :
procedure LoadFont(FileName: String; Section: string);
Var Ini : TIniFile;
begin
filename:= ExtractFilepath(application.ExeName)+ 'Options.opt';
Ini := TIniFile.Create(FileName);
Try
..... // ici le code qui va lise l'info
Finally
Ini.Free
End;
End;

@+
Cirec
0
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
18 févr. 2006 à 14:24
Avant que tu me repondes, j'ai modifié comme ceci :

uses unit2;
Var ColorForm, ... :integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
{Police récupérée dans le fichier "Options.opt"}
LoadFont(ExtractFilepath(application.ExeName)+ Options.opt','Sections Options');
Form1.Color:=ColorForm;
...
end;

Dans l'unit 2 :
uses inifiles;
Var ColorForm, ... :integer;

procedure LoadFont(FileName: String; Section: string);
var ListeOptions: TIniFile;
begin
Try
ListeOptions:=TIniFile.Create(FileName);
ColorForm:=ListeOptions.ReadInteger(Section, 'ColorForm', ColorForm);
...
finally
ListeOptions.Free ;
end;

Lorsque je fais F7, le prog lit bien les infos dans mon unit2, mais ne les applique pas dans ma form1 ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 14:33
Salut,
C'est Normal, tu as deux fois ColorForm une fois dans Unit1 et une fois dans Unit2 pour le compilateur c'est deux variables totalement différentes.
Exxayse comme ceci :

uses unit2;
//Var ColorForm, ... :integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
{Police récupérée dans le fichier "Options.opt"}
Form1.Color:= LoadFont(ExtractFilepath(application.ExeName)+ Options.opt','Sections Options');
...
end ;

Dans l'unit 2 :
uses inifiles;
//Var ColorForm, ... :integer;

Function LoadFont(FileName: String; Section: string): Integer;
var ListeOptions: TIniFile;
begin
Try
ListeOptions: =TIniFile.Create(FileName);
Result:=ListeOptions.ReadInteger(Section, 'ColorForm', Ici tu mets une couleur par défaut);
...
finally
ListeOptions.Free ;
end;
End;

@+
Cirec
0
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
18 févr. 2006 à 14:39
Je ne peux pas faire une function car, j'ai plusieurs données à récupérer :
ex :
ColorPanneaux:=ListeOptions.ReadInteger(Section, 'ColorPanneaux', ColorPanneaux);
FontNameAffichage:=ListeOptions.ReadString(Section, 'FontNameAffichage', FontNameAffichage);
FontColorAffichage:=ListeOptions.ReadInteger(Section, 'FontColorAffichage', FontColorAffichage);
FontSizeAffichage:=ListeOptions.ReadInteger(Section, 'FontSizeAffichage', FontSizeAffichage);
FontStyleAffichage:=ListeOptions.ReadInteger(Section, 'FontStyleAffichage', FontStyleAffichage);

et beaucoup d'autres encore ...
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 13
18 févr. 2006 à 14:48
Oula, je n'avais vu que le premier message de Cirec avant de poster...
Je n'avais pas rafraîchi la fenêtre

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 14:51
No problèmo,
elles se complètent de toutes manières

donc tu peux faire une combinaison des deux réponses c'est comme tu veux

@+
Cirec
0
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
18 févr. 2006 à 15:07
C'est bon ca roule !!!! merci à vous deux
0
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
18 févr. 2006 à 15:08
Il veut pas prendre : reponse acceptée !!!!!!!!
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 15:11
Clique sur Réponse Acceptée s.t.p Merci

c'est fait pour et ça permet aux autres de savoir tout de suite si il y a eut une réponse satisfaisante où non à cette question

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 15:13
ah dans ce cas tu peux le signaler aux Admins en leurs donnant le lien et le navigateur utilisé

@+
Cirec
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 13
18 févr. 2006 à 15:25
Menu "Contact" / "Contacter les admins"...

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 févr. 2006 à 17:12
Ne vous inquiétez pas, le problème de validation de réponse est en cours de résolution.
En attendant, je le fais pour vous

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 13
18 févr. 2006 à 17:27
Merci Delphiprog

@+
Nico { http://www.ni69.new.fr/ }

<hr size="2" width="100%">
N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
yannba Messages postés 133 Date d'inscription mercredi 4 janvier 2006 Statut Membre Dernière intervention 7 septembre 2010
18 févr. 2006 à 17:46
Merci Delphiprog. Mais, j'avais envoyé un mail à l'administrateur ...
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 17:49
Yannba,

regarde à coté du pseudo de Delphiprog il y a écris Admin CS ce qui veut dire Admiministrateur Codes-Sources

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
18 févr. 2006 à 17:50
lol,

regarde à coté du pseudo de Delphiprog il y a écris Admin CS ce qui veut dire Administrateur Codes-Sources

@+
Cirec
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
20 févr. 2006 à 10:50
un petit tip vite fait, a propos des couleurs dans un Tini :

Un Tcolor est un integer (Rgb(gnah,gnah,gnah) renvoi un cardinal, mais ca marche comme un integer). le lien entre R, G & B et la valeur (integer) de cette couleur c'est:

RGB(r,g,b) = r + 256 x g + (256 x 256) x b

Ca peut toujours servir pour faire des tests vite fait.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 févr. 2006 à 11:55
Salut,
ou encore :
Color := (R or (G shl 8) or (B shl 16));

et pour l'inverse :
R : = Byte(Color);
G := Byte(Color Shr 8);
B : = Byte(Color Shr 16);

@+
Cirec
0