Empecher le redimensionnement des images dans un Richedit

vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009 - 18 avril 2007 à 18:16
vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009 - 18 avril 2007 à 21:19
Bonjour,

Voilà mon soucis du jour :
Je réalise un client MSN qui pour le moment fonctionne pas mal (basé sur quelques fonctions de PixaMSN pour la connexion nottament)
Bref le client tourne parfaitement, j'ai ajouté mes fonctions sans soucis, enlevé ce que je n'aimais pas mais j'ai un soucis

le texte d'une discution est affiché dans un Richedit bon jusque la rien de prétention, mais maintenant je souhaite y intégrer quelques smileys pour rendre le soft plus convivial, je suis donc passé par un imagelist dans laquelle j'ai intégré mes smileys, puis je les ajoute dans mon riche edit comme suit

var temp : Tbitmap;
begin
temp := Tbitmap.creat;
imagelist1.GetBitmap(NumSmiley,temp);
clipboard.assign(temp);
richedit1.PastFromClipBoard;
end;

Bon ça marche mon smiley est dans mon richedit. sauf que si je le selectionne, je peux le redimensionner !
Quelqu'un connait-il un moyen de le rendre "non-redimensionnable" sans devoir changer de richedit car l'application est un futur plug-in pour un autre soft

Merci d'avance Vm$N

4 réponses

jelume Messages postés 120 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 15 novembre 2007 1
18 avril 2007 à 20:35
Bonsoir,

J'essye ton code mais le bmp n'apparait pas . J'ai du oublier un truc.

Je n'ai jamais inséré d'image dans un trichedit mais instinctivement, je me dis que ça doit ajouter au richedit un compo timage.
une fois inséré un smiley, est-ce que tu pourrais éssayer de faire une boucle sur les controls du trichedit et voir ce que ça donne en testant le type des controles retrouvés ?
J'ai testé:
  richedit1.PasteFromClipBoard;
  ShowMessage(inttostr(richedit1.ControlCount));
résultat: 0
mais comme l'image n'apparait pas ici, je ne sais pas si c'est normal.

Si ça marche vers toi, je vois peut-etre une solution en ajoutant à la gestion de message de chaque timage pour empecher le redimensionnement.

Si tu as la solution pour que ça fonctione chez moi, je suis preneur :-)

J-L
0
vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009
18 avril 2007 à 20:54
oui j'ai pas précisé il faut que ton RichEdit soit compatible OLE :)

voici trois .pas qui font que ca marche tres bien :) http://paace.free.fr/OLE.zip

ensuite dans le form.create tu ajoutes ceci

MyCallback := TRichEditOleCallback.Create;
REOleSetCallback(RichEdit1, MyCallBack);

ou richedit1 est le name de ton richedit :)

la ils devraient s'afficher je test ta solution apres mangé
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
18 avril 2007 à 20:59
ControlCount correspond à la liste des contrôles Delphi possédés par le composant. Si tu regardes bien, tu verras que TButton possède aussi cette propriété, tout comme tous les descendants de TWinControl.

Or, TRichEdit est géré par Windows, ce qui veut dire que les composants *internes* qu'il contient ne sont pas visibles par l'application. D'ailleurs, si tu as le code-source de la VCL, tu verras que le composant TRichEdit communique en grande partie avec des messages Windows, car il ne possède rien lui même.

Pour ton problème vmsn, je ne suis pas sur que la solution soit si "évidente". En effet, l'image étant lié par un bitmap via OLE, tu auras du mal à la contrôler.
néanmoins, aa-tu essayé de mettre la propriété ReadOnly à True sur le RichEdit ?? Des fois que ça marche ....

++
Flo
0
vmsn Messages postés 21 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 juin 2009
18 avril 2007 à 21:19
salut flo et merci de ton interet :)

j'ai en effet oublié de stipuler dans mon code que je faisait au départ un richedit1.readonly := false; et à la fin sa réciproque... je pensais que ca résoudrait ce problème mais non... la solution doit exister étant donner qu'un VCL existe à 200$ -_- avec la solution
0
Rejoignez-nous