FAQ C++/CLI et VC++.Net
FAQ C++/CLI et VC++.NetConsultez toutes les FAQ
Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013
Il n'est pas possible d'écrire le texte d'un label avec plusieurs couleurs par défaut, mais on peut y arriver en créant un nouveau contrôle qui dérive de Label et en surchargeant la méthode OnPaint.
Tout d'abord, créer une classe dérivée de Label et surcharger OnPaint :
ref class
MonLabel : public
System::Windows::Forms::
Label
{
protected
:
virtual
void
OnPaint(PaintEventArgs ^
e) override
{
array<
Drawing::
Brush ^>
^
mesCouleurs =
{
Brushes::
Red, Brushes::
Orange, Brushes::
Green, Brushes::
Blue}
;
int
br =
0
;
String ^
chaine =
Text;
List<
String ^>
^
listString =
gcnew List<
String ^>
();
StringBuilder ^
sb =
gcnew StringBuilder();
for
(int
i =
0
; i <
chaine->
Length ; i++
)
{
if
(chaine[i] ==
' '
||
chaine[i] ==
'
\'
'
)
{
if
(chaine[i] ==
'
\'
'
)
sb->
Append(chaine[i]);
listString->
Add(sb->
ToString());
sb =
gcnew StringBuilder();
}
else
sb->
Append(chaine[i]);
}
listString->
Add(sb->
ToString());
float
startX =
0
;
for
each (String ^
s in listString)
{
e->
Graphics->
DrawString(s, Font, mesCouleurs[br], startX, 0
);
startX +=
e->
Graphics->
MeasureString(s, Font).Width;
br++
;
if
(br >=
mesCouleurs->
Length)
br =
0
;
}
Width =
(int
)startX;
}
}
;
Ici, j'ai choisi de changer de couleur à chaque espace trouvé ou à chaque ' trouvée. J'utilise DrawString pour écrire la partie de mot avec la couleur choisie, et je n'oublie pas de mesurer sa taille pour écrire la partie de mot suivante.
Il faut également adapter la taille du contrôle à la nouvelle taille du texte.
Ensuite, il ne reste plus qu'à utiliser notre contrôle, par exemple dans le constructeur :
MonLabel ^
monLabel =
gcnew MonLabel();
AutoScaleMode =
System::Windows::Forms::AutoScaleMode::
Font;
monLabel->
Font =
(gcnew System::Drawing::
Font(L"Microsoft Sans Serif"
, 8.0
F, System::Drawing::FontStyle::
Regular,
System::Drawing::GraphicsUnit::
Point, static_cast
<
System::
Byte>
(0
)));
monLabel->
Text =
"Je m'appelle Nico-pyright(c)"
;
this
->
Controls->
Add(monLabel);