Salut !
D'abord v�rifier si TCanvas dispose d'une m�thode DrawText qui s'appuierait sur le m�me principe que celle des API WINDOWS !
Cette fonction aligne le texte dans un RECT (TRect chez toi) aussi bien en horizontal qu'en vertical.
Si �a n'existe pas, dans ce cas il est n�cessaire d'utiliser OnDrawItem donc en fixant :
ListBox1->Style = bOwnerDrawFixed;
Apr�s, il faut coder dans la :
1 2 3 4
| void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
} |
L'id�e est alors de d�velopper un code o� l'on va reculer d'une strate : on passe de BCB aux API WINDOWS
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
|
// Un TRect WINDOWS qu'il faudra initialiser avec le &Rect (à moins que ce soit compatible...)
RECT rc;
// On récupère le HWND de la ListBox
HWND hwnd = Control->Handle;
// on récupère de HDC de HWND
HDC hdc = GetDC( hwnd );
// donc on initialise ce qui doit l'être :
rc.left =
rc.top =
rc.right =
rc.bottom =
// Effacer / coloriser le fond en fonction de la valeur de State
FillRect(hdc, &rc, couleur_de_fond); // couleur_de_fond est un RGB ou un COLORREF
// On va écrire en mode transparent pour ne pas altérer la couleur de fond :
SetBkMode(hdc, TRANSPARENT);
// En fonction de la couleur du fond... donc en partie en fonction de State ...on fixe la couleur du texte
SetTextColor(hdc, couleur_du_texte); // couleur_du_texte est un RGB ou un COLORREF
// On affecte ensuite au hdc la fonte du ListBox en récupérant son HFONT
SelectObject(hdc, Canvas->Font->Handle);
//...
//... normalement yapluka :
// L'API WINDOWS où Text est la chaîne à afficher çàd un pointeur vers tableau de char
DrawText(hdc, Text, -1, &rc, DT_SINGLELINE | DT_RIGHT | DT_VCENTER);
// On en a terminé donc on rend le hdc
ReleaseDC( hdc ); |
la valeur DT_RIGHT (aligner � droite) peut aussi �tre DT_LEFT (aligner � gauche) ou DT_CENTER (centrer entre rc.left et rc.right)
la valeur DT_VCENTER centre verticalement entre rc.top et rc.bottom.
Il faudrait tester (je vais essayer de mon cot�)!
Tout d�pend de ce que l'on peut faire dans la hi�rarchie des proc�dures graphiques BCB/WINDOWS
A ce stade, est-ce que BCB va r�ussir � compiler � la bonne place et donc, au bon moment (en termes d'ex�cution) le OnDrawItem ?
A plus !
Partager