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

Résolu
ashron54 Messages postés 39 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 26 juin 2009 - 10 juin 2009 à 09:35
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 11 juin 2009 à 14:18
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

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
10 juin 2009 à 10:15
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 :]
3
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
10 juin 2009 à 09:57
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+
0
ashron54 Messages postés 39 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 26 juin 2009
10 juin 2009 à 10:05
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;
0
ashron54 Messages postés 39 Date d'inscription mardi 19 mai 2009 Statut Membre Dernière intervention 26 juin 2009
10 juin 2009 à 10:17
Aaah ouais j'avais pas pensé à ca :)
Donc je vais mettre dans ca dans le if.
Merci en tout cas, bonne journée
0

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

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
11 juin 2009 à 14:18
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%" />
0
Rejoignez-nous