Bonjour,
existe-t-il un moyen de définir la largeur d'un RichEdit, pour qu'il puisse afficher entièrement sa plus grande ligne ?
Tout en sachant que la taille de la Font peut varier en cours d'utilisation du programme Sinon c'est pas marrant !
Bonjour,
existe-t-il un moyen de définir la largeur d'un RichEdit, pour qu'il puisse afficher entièrement sa plus grande ligne ?
Tout en sachant que la taille de la Font peut varier en cours d'utilisation du programme Sinon c'est pas marrant !
Bonsoir,
Etonnant et 'casse-pieds' ce truc, que ce soit l'exemple donné pour OnRequestResize ou bien en travaillant sur le message EN_REQUESTRESIZE, je n'obtiens pas la modification du Widht (celle du Height en revanche, oui).
Bizarre ... (enfin pour moi)
Bonjour,
merci pour ce soutien. Je mets la balise à 'Résolu', parce que j'ai trouvé une solution, qui à mon goût n'est pas élégante.
J'ai posé sur ma fiche un composant TLabel, dont la propriéte Autosize est mise à True.
Ce composant est invisible, et j'y écris la phrase la plus longue qui sera inscrite dans le composant TRichEdit.
Ensuite j'adapte la propriété ClientWidth de ce dernier, à la valeur de la propriété Width du TLabel. Ce dernier ayant pris la taille nécessaire pour afficher correctement la phrase.
Bonsoir,
Mince ... je crois que je viens de trouver, un peu tard donc.
Mais chui content quand même
Donc, il faut gérer le message WM_NOTIFY de la TForm, et capter la 'notification' EN_REQUESTRESIZE .
Dans le .H:
Dans le .CPP:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void __fastcall OnNotify(TMessage &msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_NOTIFY, TMessage, OnNotify) END_MESSAGE_MAP(TForm)
A voir avec les variations possibles de la Font, comme énoncé au début.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 void __fastcall TForm2::OnNotify(TMessage &msg) { NMHDR *nmhdr; nmhdr = (tagNMHDR*)msg.LParam; if (nmhdr->code == EN_REQUESTRESIZE) { TControlCanvas *pc = new TControlCanvas(); pc->Control = RichEdit1; int s; if (RichEdit1->Lines->Count > 0) { s = pc->TextExtent( RichEdit1->Lines->Strings[0] ).cx; for (int i = 1; i < RichEdit1->Lines->Count; i++) { if ( pc->TextExtent( RichEdit1->Lines->Strings[i] ).cx > s ) { s = pc->TextExtent( RichEdit1->Lines->Strings[i] ).cx; } } REQRESIZE *rq; rq = (REQRESIZE*)msg.LParam; SetWindowPos(RichEdit1->Handle, NULL, 0, 0, s, RichEdit1->Height, SWP_SHOWWINDOW | SWP_NOMOVE); } delete pc; } DefaultHandler(&msg); }
Et pis, il faut aussi fixer une limite minimum pour le redimensionnement du RichEdit, parceque sinon cela peut prendre un drôle d'aspect.
En espérant que cela serve ...
@ +
Merci pour cette réponse...même tardive elle est la bienvenue
Parce que ma solution à moi, je ne la trouve pas belle
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager