RichEdit et Threads [Résolu]

Signaler
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018
-
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018
-
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

Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
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; ?
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
36
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%" />
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

C'est bon! cela ne me sort plus d'erreur!


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


 


merci
Messages postés
121
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018

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!