数学建模社区-数学中国
标题:
Label的使用技巧(由ilikenba收集、整理、调试通过)
[打印本页]
作者:
ilikenba
时间:
2004-6-23 17:31
标题:
Label的使用技巧(由ilikenba收集、整理、调试通过)
1.Label控件显示多行文本
! S. Z/ f9 T4 J' L2 }$ d" F1 v
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
5 Z7 W$ [7 ]5 e/ o# X# [
Label1->Caption="第一行\n第二行\n第三行";
/ L3 x6 Q0 B( h5 H' ?
Label1->Caption="第一行\r第二行\r第三行";
# K0 s5 f8 C. O7 j* k, N7 n7 y& M
Label1->Caption="第一行\r\n第二行\r\n第三行";
0 Q+ c0 j4 R' o4 T+ C U9 j' n
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
5 B: Q8 u( O, b- s+ x
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
3 o- u8 P4 u! G. N& ~
2.Label控件显示超长文本时自动换行
- W1 O! Q' H! J" C/ \
只要对Label的两个属性进行修改。
8 X, |! n, l% t
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
! m/ i/ q2 T& J/ L
第二个是WordWrap,将它设为True。
. a4 g5 E( C2 H3 s
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
- X% @. N. Y. q# f O
这时的显示应以空格区分多个单词!
S: @' B$ c. R; _1 E
3.使Label控件上的文字纵向显示
/ }% G9 ]' S2 g7 i% Y. n$ m
最直接的方法是改变字体的旋转度和方向!
2 B& i7 E( H4 w( D: O+ Y! q
下面这些代码实现了旋转的功能:
- O2 C/ Y2 y" Q. w
void __fastcall TForm1::Button1Click(TObject *Sender)
$ H7 K/ b7 N I( [1 |. g4 \
{
8 o7 ]+ [% P2 @) ^$ J, ^% i8 e
TFont *font;
( b( ]% z8 ^# Y J' W
LOGFONT logfont;
4 t2 G. R0 l& c6 r
font=new TFont;
4 Z, F7 J4 o2 o& H
font->Assign(Label1->Font);
& Z2 e& [7 _- N& z# Q, m3 b
GetObject(font->Handle,sizeof(LOGFONT),&logfont);
0 M3 A/ t1 k' h( a
logfont.lfEscapement=-900;
8 j! a9 D3 P- O. r6 I4 T
logfont.lfOrientation=-900;
3 v3 T7 O e9 C& K
font->Handle=CreateFontIndirect(&logfont);
- v/ f/ i" g4 @5 N: m; r
Label1->Font=font;
$ D5 O8 G' O1 H7 G! W; x
delete font;
6 r8 d3 R4 s+ s/ Z$ q. X( j2 r
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
1 {% E& H$ K" J
}
, t' X9 `' |9 M, @
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
/ h% L5 }. {6 k. y+ O
将Alignment设为taCenter。
% j, B7 X8 x) L/ L5 d/ M% F
, S- ]' r4 H- E l8 s' D
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
: r" z( H5 J) T/ F
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
F( B- i x* U+ s& T
识别出来,整体分拆,否则会出现乱码!
; D' v7 W7 b! X$ `9 T
下面的代码实现了这个功能:
: }7 s/ A7 K/ E0 l: K8 W5 T) }
void __fastcall TForm1::Button1Click(TObject *Sender)
! g* _4 y) ^* L% [- U
{
! C3 l5 J( \* C' y, s- M# C& B" b: I0 @
Label1->Caption=VString(Label1->Caption);
& g& D- ?9 z7 Q8 w" |# ]/ x
}
8 k; t4 ~% t2 Z7 Z( e% x' F3 S
//---------------------------------------------------------------------------
4 k( \4 X/ x( [5 Y* E
AnsiString __fastcall TForm1::VString(AnsiString ss)
0 x0 a1 B8 ]( Z: w. U
{
* @$ a9 Q- ^* k% |0 M
AnsiString ass;
' R' i, }1 G6 N# ]( f% ^5 h1 l
int ii,ll;
. i6 h" y9 V, f; `/ d4 Y9 J
unsigned char cc;
" ] r, {6 ^% r
ass="";
3 z" e9 A9 r, C! ?) G
ll=ss.Length();
% o% f* j$ S9 H3 M* t" I
for(ii=0;ii<ll;ii++)
h5 u5 k: B+ v) n( [+ V+ t
{
# T/ S7 z' _0 M" A- F5 h1 {8 A" B
cc=ss.c_str()[ii];
: _/ _' ^9 A9 w& U' g; p
if(cc>0xa0)
) O9 \- ?9 [" S' U
{
) d6 Y q/ U# G3 D) Y* _
ass=ass+ss.SubString(ii+1,2)+"\n";
, v6 i! T g# P% P) v/ w. C+ z) p
ii++;
4 V' Y( g* p4 {* }
}
' I3 T: R T, Y5 Z3 ]. f9 J
else
4 b7 f; j3 Z% F* j/ y, R: a) X- C; v
{
- x5 x2 N8 ^- x3 H
ass=ass+ss.SubString(ii+1,1)+"\n";
+ G: w0 {, G; A! c3 K
}
; j- v' U* |1 |$ @" M$ i0 W5 [
}
3 k7 N+ f# D- {# }2 n3 j
return ass;
* v" L$ a0 e! P& _& i& T+ {: t
}
8 _% l: B$ k+ H# j/ N3 n. ~ ^) |# M
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
+ O/ f1 K& n1 _7 |7 ^; N3 n- ~
4.鼠标指向Label控件时改变说明文字的颜色
; C* T! {1 z4 n" }3 x' d
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
2 [/ [% ?1 x% |1 c4 U) G8 J" l
红色,其他的字体颜色变成黑色!
! T$ U6 k$ P2 P& L6 c) `
下面的代码实现了这个功能:
+ R, [% s. H5 \1 g! @! A+ u/ T; T
void __fastcall TForm1::Test(TObject *Sender)
3 i# @6 o0 w) u$ }- u( j, e
{
0 c+ P3 w' l' D! ^
int i;
& h( W3 s7 X# u6 J8 Q+ R$ Q
TLabel *lb;
2 P) s: G; t0 K! ]1 A/ }/ `
AnsiString ss1,ss2;
; h5 w( ?* ?: q! H/ t( Z% n
ss1=Sender->ClassName();//获取参数的类型
* h5 v0 a' B" K1 \, s
if(ss1!="TLabel")return;//如果不是标签不处理
$ e! o" N6 y8 E. d. K, D; I/ r
lb=(TLabel*)Sender;
" Z/ |/ E I: I1 s
ss1=lb->Name;
- @6 v/ R! Z2 O* S
for(i=0;i<ControlCount;i++)
# g/ v! G: w( W0 ~& I
{
1 I2 z) X9 f3 a& P
lb=(TLabel *)Controls
;
' x7 v- j+ Y( _) ^9 E
ss2=lb->Name;
6 c ], K! q, t ^3 I6 G- e2 D A
if(ss1==ss2)
9 R: ` K9 B" U7 q2 \! B
lb->Font->Color=clRed;
: B: G" x0 @4 h
else
5 R1 o1 n5 S* x: e: m" D
lb->Font->Color=clBlack;
' D. t1 k/ V! K4 _" K' V
}
# u8 F5 w$ P: C5 d. u
}
- ~' v+ C+ N7 J: u( w' Y
//---------------------------------------------------------------------------
! h! k, ]* f/ D7 M1 t
void __fastcall TForm1:
abel1MouseMove(TObject *Sender, TShiftState Shift,
( \) d6 E3 `. f9 {* z+ `/ Z- R5 f
int X, int Y)
( \# }9 I: Y& b* b
{
, c) b5 |# z/ y3 U: P
Test(Sender);
9 d: J; f( v% ~1 j
}
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5