Suprimer ligne précédente dans fichier texte/ probleme avec Writeln

[Résolu]
Signaler
Messages postés
39
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
26 juin 2009
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
Bonjour,
Voila j'ai un petit problème avec mon programme, en faite quand je fais un Wrtieln dans un fichier texte ou autre, il m'écrit 2fois le message que je voudrais, systématiquement.
Alors je cherche à supprimer une de ces 2 lignes à chaque fois, ou bien si vous avez une solution à mon problème je suis preneur :)

Voici mon code pour un aperçu :

assignfile(FichierCode ,'Test.txt');
code := Memo1.Lines[0];
CodeID := StrToInt(code);

case code of
....
...
...
mes := Nom+Code;
Memo1.Lines[0] := '';
  append(FichierCode);
  Writeln(FichierCode, mes);
  closefile(FichierCode);

Voila merci :)

5 réponses

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
La ligne "Memo1.Lines[0] := '';" fait elle aussi appel a "memoonchange" puisque tu viens de changer le contenu de la ligne 0.
La procedure se lance donc une seconde fois. On entre pas dans le 1er IF MAIS le WriteLn se fait tout de meme car il n'est pas dans ce IF !
A mon avis c'est ça :]
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
Salut
Le fait que le message s'écrive 2 fois EST le problème, je te conseille de ne pas chercher à bidouiller une suppression alors que c'est l'ajout qui semble mal fonctionner.
Peut être peux tu donner plus de code qu'on vois pourquoi ça ajoute 2 fois ?
a+
Messages postés
39
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
26 juin 2009

voila le code en entier, j'ai bien chercher et personnelement je ne trouve rien d'anormal ...

procedure TForm1.Memo1Change(Sender: TObject);
begin
      if Memo1.Lines[0] <> ''
             then
                begin
                  assignfile(FichierCode ,'Test.txt');
                  code := Memo1.Lines[0];
                  CodeID := StrToInt(code);

                  case CodeID of
                  1234 : begin
                          if Travail = 0
                            then begin
                            Nom := 'Fabrice';
                            Travail := 1;
                            HeureDeb := DateTimeToStr(Now);
                            mes := Nom+' commence a '+HeureDeb;
                            Label1.Caption := mes;
                                end
                            else begin
                            Nom := 'Fabrice';
                            Travail := 0;
                            HeureFin := DateTimeToStr(Now);
                            mes := Nom+' fini à '+HeureFin;
                            Label1.Caption := mes;
                                end;
                        end;
                4321 : begin
                        if Travail = 0
                          then begin
                          Nom := 'Thierry';
                          Travail := 1;
                          HeureDeb := DateTimeToStr(Now);
                          mes := Nom+' commence à '+HeureDeb;
                          Label1.Caption := mes;
                              end
                          else begin
                          Nom := 'Thierry';
                          Travail := 0;
                          HeureFin := DateTimeToStr(Now);
                          mes := Nom+' fini à '+HeureFin;
                          Label1.Caption := mes;
                              end;
                      end;
              end;
      end;

  Memo1.Lines[0] := '';
  append(FichierCode);
  Writeln(FichierCode, mes);
  closefile(FichierCode);
 
end;
Messages postés
39
Date d'inscription
mardi 19 mai 2009
Statut
Membre
Dernière intervention
26 juin 2009

Aaah ouais j'avais pas pensé à ca :)
Donc je vais mettre dans ca dans le if.
Merci en tout cas, bonne journée
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    RadioGroup1: TRadioGroup;
    Button1: TButton;
    Label1: TLabel;
    procedure Edit1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  CodeID  : integer; // Code utilisateur
  Path    : string;  // repertoire de l'application
  LogFile : string; // location fichier Log

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Repertoire de l'application
  Path := ExtractFilePath(Paramstr(0));
  // Location fichier log
  LogFile := Path + 'Test.txt';

  // Definition du RadioGroup pour le choix (debut/fin)
  RadioGroup1.Enabled := false;
  RadioGroup1.Caption := '';
  RadioGroup1.Items.BeginUpdate;
  try
    RadioGroup1.Items.Clear;
    RadioGroup1.Items.Add('Début');
    RadioGroup1.Items.Add('Fin');
  finally
    RadioGroup1.Items.EndUpdate;
  end;

  // Vidage du Label1
  Label1.Caption      := '';

  // Definition du Bouton OK
  Button1.Enabled     := false;
  Button1.Caption     := 'Ok';

  // Definition d'Edit1
  Edit1.Clear;
  Edit1.Enabled       := true;
  // N'accepte que des nombres
  SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  // Donne le focus a Edit1
  Edit1.SetFocus;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Désactive le bouton
  (Sender as TButton).Enabled := false;

  // Definition du message a enregistrer et afficher
  case RadioGroup1.ItemIndex of
    0 : Label1.Caption := RadioGroup1.Caption + ' commence à ' + DateTimeToStr(Now);
    1 : Label1.Caption := RadioGroup1.Caption + ' fini à ' + DateTimeToStr(Now);
  end;

  // Enregistrement du message
  with TStringList.Create do
  try
    if FileExists(LogFile) then
      LoadFromFile(LogFile);
    Add(Label1.Caption);
    SaveToFile(LogFile);
  finally
    Free;
  end;

  // Retour a l'etat de depart
  RadioGroup1.Caption := '';
  RadioGroup1.Enabled := false;
  Edit1.Clear;
  Edit1.Enabled := true;
  Edit1.SetFocus;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var Next : boolean;
begin
  // Test la convertion de l'entrée de Edit1 en CodeID
  if not TryStrToInt((Sender as TEdit).Text, CodeID) then
    exit;

  // Control pour aller a l'etape suivante
  Next := false;

  // On definit le nom de l'utilisateur par son CodeID
  case CodeID of
    1234 :
    begin
      RadioGroup1.Caption := 'Fabrice';
      Next := true
    end;

    4321 :
    begin
      RadioGroup1.Caption := 'Thierry';
      Next := true;
    end;
  end;

  // Si le CodeID est inconnus on sort.
  if not Next then
    exit
  else
  begin
    // sinon etape suivante.
    RadioGroup1.ItemIndex := 0;
    RadioGroup1.Enabled := true;
    RadioGroup1.SetFocus;
    Button1.Enabled := true;
    (Sender as TEdit).Enabled := false;
  end;
end;

end.

<hr size="2" width="100%" />