Récupérer les données de zones Edit d'une autre appli
Prog59
Messages postés4Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention 6 août 2003
-
5 août 2003 à 10:55
magicvinni
Messages postés235Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention26 juillet 2010
-
6 août 2003 à 23:02
Bonjour,
J'ai une appli qui contient des Edit et je voudrai récupérer les données des Edit dans un fichier txt.
J'ai repris le prg de DelphiProg concernant la récupération de données de zones Edit en le modifiant, mais les Edit font partie de la même fenêtre que les Buttons de lancement du prg de récup. Tandis que moi je voudrai avoir une fenêtre contenant les Buttons de lancement du prg (le prg récupérant les données d'une fenêtre de mon appli).
Faut-il définir, dans le prg, les Edit de manière à ce que le prg prenne les Edit de la fenetre "test" ? Exemple : test.Edit1, ...
Je ne sais comment faire, je débute en prg Delphi.
const
//Nom du fichier où seront sauvegardés les contenus des TEdit
FileName = 'Fichier.txt';
//SectionName
Section = 'Edits';
implementation
{$R *.dfm}
uses
IniFiles;
Var
EditsFileName,line : string;
F : textfile;
St : TStringList;
procedure TMultiEditForm.btnSaveEditsClick(Sender: TObject);
var
i : integer;
Ini : TIniFile;
Edit : TEdit;
begin
Ini := TIniFile.Create(EditsFileName);
try
//parcourir les composants sur la fiche
for i:=0 to ComponentCount - 1 do
//si le composant trouvé est du type recherché
if Components[i] is TEdit then
begin
Edit := TEdit(Components[i]);
//écrire un entrée avec le nom et le contenu du contrôle
Ini.WriteString(Section, Edit.Name, Edit.Text+';');
end;
btnVerifyFile.Enabled := True;
finally
Ini.Free;
end;
end;
procedure TMultiEditForm.btnReloadEditsClick(Sender: TObject);
var
i : integer;
Ini : TIniFile;
Edit : TEdit;
begin
Ini := TIniFile.Create(EditsFileName);
try
For i:=0 to ComponentCount - 1 do
if Components[i] is Tedit then
begin
Edit := Components[i] as TEdit;
Edit.Text := Ini.ReadString(Section, Edit.Name, 'Non trouvé');
end;
finally
Ini.Free;
end;
end;
procedure TMultiEditForm.btnVerifyFileClick(Sender: TObject);
begin
Memo1.Clear;
if FileExists(EditsFileName) then
Memo1.Lines.LoadFromFile(EditsFileName);
end;
procedure TMultiEditForm.Button1Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile('c:\yoyo.txt');
end;
procedure TMultiEditForm.Button2Click(Sender: TObject);
var G:textfile;
I:integer;
begin
AssignFile(G,'c:\yuyu.txt');
Append(G);
For I:=2 to Memo1.Lines.count do
Writeln(G,Memo1.Lines[1]+Memo1.Lines[2]);
CloseFile(G);
Memo1.Clear;
end;
Initialization
//Construire le nom du fichier de sauvegarde
EditsFileName := ExtractFilePath(Application.ExeName) + FileName;
magicvinni
Messages postés235Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention26 juillet 2010 5 août 2003 à 11:43
Si c'est les edit sont sur la From1par exemple, il suffit de mettre uses unit1 après implémentation dans l'unité où se trouve les bouttons je crois.
MagicVinni
Emandhal
Messages postés194Date d'inscriptiondimanche 2 mars 2003StatutMembreDernière intervention10 octobre 20063 5 août 2003 à 18:18
je c pas si g bien pigé... mais si les boutons sont sur une fenetre et les edit sur un ot y te fo préciser l'endroit de la recherche des Component genre mettre test. (le nom de la form où ils sont censé etre devant
ex:
> for i:=0 to test.ComponentCount - 1 do
> //si le composant trouvé est du type recherché
> if test.Components[i] is TEdit then
> begin
> Edit := TEdit(test.Components[i]);
> //écrire un entrée avec le nom et le contenu du contrôle
> Ini.WriteString(Section, Edit.Name, Edit.Text+';');
> end;
Tout problème a sa solution... Mais en général, c'est jamais la bonne...
Prog59
Messages postés4Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention 6 août 2003 6 août 2003 à 12:25
J'ai modifié mon prg (voir ci dessous)
mais j'ai un message d'erreur : Le projet MultiEditSave.exe a provoqué une classe d'exception EAccessViolation avec le message "Violation d'accès à l'adresse 00413F28 dans le module 'MultiEditSave.exe'. LEcture de l'adresse 00000010".
Erreur dans le CPU :
TComponent.GetComponent.Count :
00413F28 mov edx,[eax+$10]
Est-ce parceque ma fenêtre Saisies fait partie d'un autre projet ?
var
MultiEditForm: TMultiEditForm;
Saisies : TForm;
const
//Nom du fichier où seront sauvegardés les contenus des TEdit
FileName = 'Fichier.txt';
//SectionName
Section = 'Edits';
implementation
{$R *.dfm}
uses
IniFiles;
Var
EditsFileName,line : string;
F : textfile;
St : TStringList;
procedure TMultiEditForm.btnSaveEditsClick(Sender: TObject);
var
i : integer;
Ini : TIniFile;
Edit : TEdit;
Saisies : TForm;
begin
Ini := TIniFile.Create(EditsFileName);
try
//parcourir les composants sur la fiche
for i:=0 to Saisies.ComponentCount - 1 do
//si le composant trouvé est du type recherché
if Saisies.Components[i] is TEdit then
begin
Edit := TEdit(Saisies.Components[i]);
//écrire un entrée avec le nom et le contenu du contrôle
Ini.WriteString(Section, Edit.Name, Edit.Text+';');
end;
btnVerifyFile.Enabled := True;
finally
Ini.Free;
end;
end;
procedure TMultiEditForm.btnReloadEditsClick(Sender: TObject);
var
i : integer;
Ini : TIniFile;
Edit : TEdit;
begin
Ini := TIniFile.Create(EditsFileName);
try
For i:=0 to Saisies.ComponentCount - 1 do
if Saisies.Components[i] is Tedit then
begin
Edit := Saisies.Components[i] as TEdit;
Edit.Text := Ini.ReadString(Section, Edit.Name, 'Non trouvé');
end;
finally
Ini.Free;
end;
end;
procedure TMultiEditForm.btnVerifyFileClick(Sender: TObject);
begin
Memo1.Clear;
if FileExists(EditsFileName) then
Memo1.Lines.LoadFromFile(EditsFileName);
end;
procedure TMultiEditForm.Button1Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile('c:\yoyo.txt');
end;
procedure TMultiEditForm.Button2Click(Sender: TObject);
var G:textfile;
I:integer;
begin
AssignFile(G,'c:\yuyu.txt');
Append(G);
For I:=2 to Memo1.Lines.count do
Writeln(G,Memo1.Lines[1]+Memo1.Lines[2]);
CloseFile(G);
Memo1.Clear;
end;
Initialization
//Construire le nom du fichier de sauvegarde
EditsFileName := ExtractFilePath(Application.ExeName) + FileName;
magicvinni
Messages postés235Date d'inscriptionvendredi 25 avril 2003StatutMembreDernière intervention26 juillet 2010 6 août 2003 à 23:02
J'ai du mal a suivre ce que tu veux faire.
Si c'est sur 2 FENETRES que tu travailles alors ca devrait marcher. Si tu me parles de 2 applications différentes alors c'est beaucoup plus compliqué.