RichEdit et Threads [Résolu]

Messages postés
123
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018
- - Dernière réponse : cs_Gerard
Messages postés
123
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...
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
2349
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
11
3
Merci
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; ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de JulioDelphi
Messages postés
4278
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
3
Merci
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%" />

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de f0xi
Messages postés
123
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018
0
Merci
C'est bon! cela ne me sort plus d'erreur!


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


 


merci
Commenter la réponse de cs_Gerard
Messages postés
123
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
7 août 2018
0
Merci
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!
Commenter la réponse de cs_Gerard