RichEdit et Threads [Résolu]

cs_Gerard 123 Messages postés jeudi 10 janvier 2002Date d'inscription 7 août 2018 Dernière intervention - 6 juin 2009 à 17:56 - Dernière réponse : cs_Gerard 123 Messages postés jeudi 10 janvier 2002Date d'inscription 7 août 2018 Dernière intervention
- 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 

Votre réponse

4 réponses

Meilleure réponse
JulioDelphi 2354 Messages postés dimanche 5 octobre 2003Date d'inscription 18 novembre 2010 Dernière intervention - 6 juin 2009 à 18:06
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; ?

Merci JulioDelphi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de JulioDelphi
Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 6 juin 2009 à 22:38
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%" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de f0xi
cs_Gerard 123 Messages postés jeudi 10 janvier 2002Date d'inscription 7 août 2018 Dernière intervention - 6 juin 2009 à 18:36
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
cs_Gerard 123 Messages postés jeudi 10 janvier 2002Date d'inscription 7 août 2018 Dernière intervention - 7 juin 2009 à 04:15
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.