RichEdit et Threads

Résolu
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018 - 6 juin 2009 à 17:56
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018 - 7 juin 2009 à 04:15
Bonjour,
Je souhaite pouvoir créer des fenêtre RichEdit en dynamique afin de traiter du texte avec un format enrichi qu'on peut ensuite sauvegarder dans un fichier .RTF.
Cela marche très bien dans un programme simple, RichEdit est créé et peut être utilisé:

procedure TForm1.FormCreate(Sender: TObject);
VAR Edit: TRichEdit;
begin
  Edit:= TRichEdit.Create(Form1);
  Edit.Top:=10;
  Edit.Left:= 10;
  Edit.Text:= 'Bonjour';
  Edit.Visible:= true;
  showmessage(Edit.Text);
  Edit.destroy;
end;

mais cela ne marche pas dans un programme multithread avec le message d'erreur m'indiquant que le composant n'a pas de fenêtre parent.
Je comprends que dans un thread la fenêtre parent soit difficile à définir, mais je voudrais pouvoir créer des RichEdit associés aux trheads afin que les messages des différents utilisateurs ne se mélangent pas...
Mon problème est-il suffisamment bien expliqué?

Merci de la réponse ou d'un éclairage...

4 réponses

JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
6 juin 2009 à 18:06
salut
Première chose qui serait un conseil de lisibilité est de ne pas appeler un RichEdit par Edit qu'on confonds avec un Edit !
Sinon, as tu essayé Edit.Parent:= Form1; ?
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
6 juin 2009 à 22:38
procedure TForm1.FormCreate(Sender: TObject);
var Edit: TRichEdit;
begin
  Edit := TRichEdit.Create(Self);
  try
    Edit.Parent  := self;
    Edit.Text    := 'Bonjour';
    Edit.Visible := true;

    Edit.SetBounds(10, 10, 320, 240);

 
    showmessage(Edit.Text);
  finally 
    Edit.Free;
  end;
end;



- Il faut toujours utiliser Self et non la variable FormX, car cette variable est Externe a la classe TFormX, donc il y a un probleme de dependance du code de la classe avec une variable externe a la classe donc, tout code dependant de cette variable ne peu etre appliqué a la classe TFormX.

- Il est preferable d'utiliser SetBounds plutot que d'associer des valeurs a Left, Top, Width et Height directement, cela evite que le code appel plusieurs fois en internet la methode SetBounds.

- ne pas oublier d'encadrer la creation d'objet dans un bloc Try...Finally pour s'assurer que les ressources seront bien libérée.

- Il faut utiliser Free et non Destroy. la methode Free s'assure que l'objet possede une instance valide avant d'appeler Destroy afin d'eviter les cascade d'erreur et les violation d'accés.

<hr size="2" width="100%" />
3
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
6 juin 2009 à 18:36
C'est bon! cela ne me sort plus d'erreur!


reste à savoir maintenant si les textes des différents utilisteurs restent bien distincts.


 


merci
0
cs_Gerard Messages postés 121 Date d'inscription jeudi 10 janvier 2002 Statut Membre Dernière intervention 7 août 2018
7 juin 2009 à 04:15
Merci pour ces précisions,


J'avais bien essayé le self, mais sans mettre la propriété parent derrière!


Mais c'est une bonne idée d'encadrer par try,


et merci pour le conseil sur le Free avec l'explication qui me permet de comprendre la différence.


Vous êtes vraiment supers!
0
Rejoignez-nous