Pas de rafraichissement des textes dans mes memo après un Read

cs_DONALD3D Messages postés 8 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 14 février 2011 - 3 déc. 2010 à 16:08
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 7 déc. 2010 à 10:29
Salut,

le grand débutant que je suis s'arrache les cheveux sur un truc curieux, mes champs de texte dans les memo prévus ne sont pas raffraichit quand je lance l'exe et que je suis bien connecté avec le serveur qui m'envoie en boucle ses données, alors qu'en mettant un point d'arrêt sur une variable genre Etat1 ou Mess je lis que leur contenu est bien correct et raffraichit après chaque évènement, et dès que je clique sur RUN pour refaire un tour là toute les variables apparaissent dans les champs prévus et par moment redisparaissent sans raison (pour moi).
J'ai le sentiment de faire quelque chose qui ne va pas mais sans voir quoi et je tourne en rond depuis des jours là dessus .
Soit c'est gros comme une maison soit c'est quelque chose que je ne sais pas et que je fais mal.

Je suis en mode non bloquant et en Delphi7.
J'aimerai vraiment comprendre ce mystère...


procedure TForm1.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var
     buf : string;
     Mess : string;
     iArobase, iCR : integer;
     Etat1, Etat2, Etat3, Etat4, Etat5, Etat6 : string;
     
  begin

  buf := ClientSocket.socket.ReceiveText;
  iArobase := Pos('@', buf); // je cherche le Arobase dans la chaine
  iCR := PosEx(#13, buf, iArobase); // je chercher le #13 à partir du Arobase
  Mess := Copy(buf, iArobase + 1, iCR - iArobase - 1);

  Etat1    := Copy(Message, 1, 2);
  Etat2    := Copy(Message, 3, 1);
  Etat3    := Copy(Message, 4, 2);
  Etat4    := Copy(Message, 6, 1);
  Etat5    := Copy(Message, 7, 2);
  Etat6    := Copy(Message, 9, 1);
  Etat7    := Copy(Message, 15, 2);
  Val_temp := Copy(Message, 50, 5);

  begin

      if Etat1 = 'A1' then
      begin
       if Etat2 = '0' then
       Memo1.Lines.Text := 'En attente'
       else if Etat2 = '1' then
       Memo1.Lines.Text := 'Actif'
       else
       Memo1.Lines.Text := '';
      end;
      if Etat3 = 'A2' then
      begin
       if Etat4 = '0' then
       Memo2.Lines.Text := 'En attente'
       else if Etat4 = '1' then
       Memo2.Lines.Text := 'Activé'
       else
       Memo2.Lines.Text := '';
      end;
      if Etat5 = 'B1' then
      begin
       if Etat6 = '0' then
       Memo3.Lines.Text := 'Désactivé'
       else if Etat6 = '1' then
       Memo3.Lines.Text := 'Activé'
       else
       Memo3.Lines.Text := '';
      end;
     if Etat7 = 'TR1' then
        Memo4.Lines.Text := Val_temp;
    end;

end;

6 réponses

cs_DONALD3D Messages postés 8 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 14 février 2011
3 déc. 2010 à 16:12
Arff on peut pas éditer!
J'ai fait un mauvais copier-coller...

procedure TForm1.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
  var
     buf : string;
     Mess : string;
     iArobase, iCR : integer;
     Etat1, Etat2, Etat3, Etat4, Etat5, Etat6 : string;
     
  begin

  buf := ClientSocket.socket.ReceiveText;
  iArobase := Pos('@', buf); // je cherche le Arobase dans la chaine
  iCR := PosEx(#13, buf, iArobase); // je chercher le #13 à partir du Arobase
  Mess := Copy(buf, iArobase + 1, iCR - iArobase - 1);

  Etat1    := Copy(Mess, 1, 2);
  Etat2    := Copy(Mess, 3, 1);
  Etat3    := Copy(Mess, 4, 2);
  Etat4    := Copy(Mess, 6, 1);
  Etat5    := Copy(Mess, 7, 2);
  Etat6    := Copy(Mess, 9, 1);
  Etat7    := Copy(Mess, 15, 2);
  Val_temp := Copy(Mess, 50, 5);

  begin

      if Etat1 = 'A1' then
      begin
       if Etat2 = '0' then
       Memo1.Lines.Text := 'En attente'
       else if Etat2 = '1' then
       Memo1.Lines.Text := 'Actif'
       else
       Memo1.Lines.Text := '';
      end;
      if Etat3 = 'A2' then
      begin
       if Etat4 = '0' then
       Memo2.Lines.Text := 'En attente'
       else if Etat4 = '1' then
       Memo2.Lines.Text := 'Activé'
       else
       Memo2.Lines.Text := '';
      end;
      if Etat5 = 'B1' then
      begin
       if Etat6 = '0' then
       Memo3.Lines.Text := 'Désactivé'
       else if Etat6 = '1' then
       Memo3.Lines.Text := 'Activé'
       else
       Memo3.Lines.Text := '';
      end;
     if Etat7 = 'TR1' then
        Memo4.Lines.Text := Val_temp;
    end;

end;
0
eclems Messages postés 104 Date d'inscription samedi 23 décembre 2000 Statut Membre Dernière intervention 9 mai 2013
3 déc. 2010 à 21:39
c'est pour faire quoi comme programme?
0
cs_DONALD3D Messages postés 8 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 14 février 2011
4 déc. 2010 à 12:55
C'est pour afficher des états de capteurs et une température situés sur un site distant, c'est une appli météo, le début tout du moins
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
4 déc. 2010 à 18:23
Salut,

Ce ne serait pas plutôt ça :

procedure TForm1.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
  var
     buf : string;
     Mess : string;
     iArobase, iCR : integer;
     Etat1, Etat2, Etat3, Etat4, Etat5, Etat6 : string;

  begin

  buf := ClientSocket.socket.ReceiveText;
  iArobase := Pos('@', buf); // je cherche le Arobase dans la chaine
  iCR := PosEx(#13, buf, iArobase); // je chercher le #13 à partir du Arobase
  Mess := Copy(buf, iArobase + 1, iCR - iArobase - 1);

  Etat1    := Copy(Mess, 1, 2);
  Etat2    := Copy(Mess, 3, 1);
  Etat3    := Copy(Mess, 4, 2);
  Etat4    := Copy(Mess, 6, 1);
  Etat5    := Copy(Mess, 7, 2);
  Etat6    := Copy(Mess, 9, 1);
  Etat7    := Copy(Mess, 15, 2);
  Val_temp := Copy(Mess, 50, 5);

  if Etat1 = 'A1' then
    begin
      if Etat2 = '0' then Memo1.Lines.Text := 'En attente' else if Etat2 = '1' then Memo1.Lines.Text := 'Actif'
    end
  else Memo1.Lines.Text := '';

  if Etat3 = 'A2' then
    begin
      if Etat4 = '0' then Memo2.Lines.Text := 'En attente' else if Etat4 = '1' then Memo2.Lines.Text := 'Activé'
    end
  else Memo2.Lines.Text := '';

  if Etat5 = 'B1' then
    begin
      if Etat6 = '0' then Memo3.Lines.Text := 'Désactivé' else if Etat6 = '1' then Memo3.Lines.Text := 'Activé'
    end;
  else Memo3.Lines.Text := '';

  if Etat7 = 'TR1' then Memo4.Lines.Text := Val_temp;
end;
0

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

Posez votre question
cs_DONALD3D Messages postés 8 Date d'inscription dimanche 14 novembre 2010 Statut Membre Dernière intervention 14 février 2011
5 déc. 2010 à 17:42
Bonsoir et merci pour ta réponse.
J'ai toujours le même problème lorsque je me connecte les valeurs apparaissent puis disparaissent au passage suivant dans la fonction.
En mettant un point d'arrêt je vois bien pourtant que le contenu des valeurs testées est bon, c'est bien ce qui ma chagrine.
Par exemple je vois bien Etat1 qui vaut 'A1' et Etat2 vaut '0' donc je devrai afficher 'En attente' dans le champ memo1, ce qu'il fait mais juste une fois...
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
7 déc. 2010 à 10:29
Salut,

pour un meilleur débogage, tu peux aussi essayer de faire cela:
change Memo1.Lines.Text := 'xxx' pour Memo1.Lines.Add('xxx')

Comme ça, tu auras tout l' historique!

A+


Composants Cindy pour Delphi
0
Rejoignez-nous