Erreur de Handle lors de la création de Memo

Erreur de Handle lors de la création de Memo - Delphi/Pascal - Programmation

Marsh Posté le 20-08-2006 à 14:30:51    

Hello  :hello:  
 
Voici le code que j'utilise pour créer dynamiquement un TabSheet, puis y inclure un Memo:
 

Code :
  1. var
  2.   Form1: TForm1;
  3.   ListeTS: Array Of TTabSheet;
  4.   ListeMemo: Array Of TMemo;
  5.   ntab: integer=1;
  6. ...
  7.       with PageControl1 do begin
  8.                SetLength(ListeTS, ntab+1);
  9.                SetLength(ListeMemo, ntab+1);
  10.                ListeTS[ntab]:= TTabSheet.Create(Self);
  11.                   with ListeTS[ntab] do begin
  12.                      PageControl:=PageControl1;
  13.                      Caption:= r.Match[2];
  14.                   end;
  15.                ListeMemo[ntab]:= TMemo.Create(Self);
  16.                   with ListeMemo[ntab] do begin
  17.                      Parent:=ListeTS[ntab];
  18.                      Align:=alClient;
  19.                      Lines.Add('Memo N° '+IntToStr(ntab));
  20.                   end;
  21.                   ntab:=ntab+1;
  22.        end;


 
Les tabsheet sont bien crée, mais le memo, lui, n'est pas créer ou ne s'affiche pas  :??:  
De plus a la fermeture, j'obtient l'erreur "Handle de fenêtre non valide"  :(  
 
Merci d'avance pour votre aide  ;)

Reply

Marsh Posté le 20-08-2006 à 14:30:51   

Reply

Marsh Posté le 21-08-2006 à 14:28:36    

Up :D

Reply

Marsh Posté le 21-08-2006 à 17:18:51    

Salut ,  
 
Bon ecoute , sans avoir testé , en principe ce code doit fonctionner .
 


---------------

Reply

Marsh Posté le 21-08-2006 à 20:04:34    

Aprés vérification, t'as raison, le code seul fonctionne  :)  
 
J'ai bien cherché et il se trouve que le pb vient de la ligne
 

Code :
  1. line:= AContext.Connection.IOHandler.ReadLn;


 
Si je la remplace par :
 

Code :
  1. line:= 'ce que doit normalement renvoyer AContext.Connection.IOHandler.ReadLn';


 
l' erreur de Handle disparait et les onglets & memo se creent bien.
 
Apparament c'est l'erreur de Handle qui est causée par la ligne qui pause pb et qui enpèche la création / l'affichage du TMemo fraichement crée  :(  
 
Quelq'un a une idée ?

Reply

Marsh Posté le 21-08-2006 à 22:22:19    

Ben en fait non, l'erreur ne vient pas de cette ligne  :(  
 
Je colle mon code si ça peut aider:
 

Code :
  1. var
  2.   Form1: TForm1;
  3.   ListeTS: Array Of TTabSheet;
  4.   ListeMemo: Array Of TMemo;
  5.   ntab: integer=1;
  6.   r : TRegExpr;
  7.   line: string;
  8.   row: integer;


 
...
 

Code :
  1. procedure CreateTab(TCPComand: string);
  2. begin
  3.      if r.Exec(line) then begin
  4.          if not Form1.ValueListEditor1.FindRow(r.Match[1], row) then begin
  5.           with Form1.PageControl1 do begin
  6.                SetLength(ListeTS, ntab+1);
  7.                SetLength(ListeMemo, ntab+1);
  8.                ListeTS[ntab]:= TTabSheet.Create(Form1.PageControl1);
  9.                   with ListeTS[ntab] do begin
  10.                      PageControl:=Form1.PageControl1;
  11.                      Caption:= 'tab '+IntToStr(ntab);
  12.                      //r.Match[2];
  13.                   end;
  14.                ListeMemo[ntab]:= TMemo.Create(ListeTS[ntab]);
  15.                   with ListeMemo[ntab] do begin
  16.                      Parent:=ListeTS[ntab];
  17.                      Align:=alClient;
  18.                      Lines.Add('Memo N° '+IntToStr(ntab));
  19.                   end;
  20.                   Form1.ValueListEditor1.InsertRow(r.Match[1], IntToStr(ntab), true);
  21.                   ntab:=ntab+1;
  22.            end;
  23.   end;
  24.    end;


 
...
 

Code :
  1. try
  2.     line:= AContext.Connection.IOHandler.ReadLn;
  3.     CreateTab(line);
  4.    
  5.        if ValueListEditor1.FindRow(r.Match[1], row) then begin
  6.             if r.Match[3] <> '[785228522565121221544-221544554545-4545454-REFRESH-COMAND]' then begin
  7.                ListeMemo[row].Lines.add(r.Match[2]+' >> '+r.Match[3]);
  8.             end;
  9.                AContext.Connection.IOHandler.Write(ListeMemo[row].Lines);
  10.        end;
  11.     if not r.Exec(line) then begin
  12.        AContext.Connection.IOHandler.Write('Format de message incorrect.');
  13.     end;
  14.    finally
  15.       AContext.Connection.Disconnect;
  16.    end;


 
 :??:

Reply

Marsh Posté le 23-08-2006 à 22:07:53    

C'est trés strange:  
 
Lorsque j'appel CreateTab() par TForm1.IdTCPServer1Connect(), TForm1.IdTCPServer1Disconnect() ou TForm1.IdTCPServer1Execute()
 
==> Erreur de handle + le TMemo ne se crée pas.
 
Par contre, lorsque je l'appel par un OnClick sur un bouton tout con, tout fonctionne...
 
Petite précision, j'utilise Indy 10

Reply

Marsh Posté le 29-08-2006 à 17:45:27    

Du nouveau  :)  
 
J'ai testé avec cette portion de code:
 

Code :
  1. procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
  2. begin
  3.     line:= AContext.Connection.IOHandler.ReadLn;
  4.     CreateTab(line);
  5.     sleep(3600);
  6.     AContext.Connection.IOHandler.Close;
  7. end;


 
Le TabSheet se crée, le mémo aussi, tout fonctionne trés bien pendant la seconde de sleep() puis une fois  
arrivé à AContext.Connection.IOHandler.Close Le méno disparait, puis erreur de handle  :heink:  
 
Aidez un jeune Padawan  :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed