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 programmeSinon 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 programmeSinon 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![]()
Partager