数学建模社区-数学中国
标题:
Label的使用技巧(由ilikenba收集、整理、调试通过)
[打印本页]
作者:
ilikenba
时间:
2004-6-23 17:31
标题:
Label的使用技巧(由ilikenba收集、整理、调试通过)
1.Label控件显示多行文本
3 x; I1 n. r2 V( G( I# u D
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
8 X6 z0 o) |! U) d4 O8 U
Label1->Caption="第一行\n第二行\n第三行";
% ]5 T) a3 ? L& x1 }7 N- w
Label1->Caption="第一行\r第二行\r第三行";
' W+ i3 j% O% x
Label1->Caption="第一行\r\n第二行\r\n第三行";
+ z( X) v3 k4 q/ T: n: l
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
/ b7 w( i6 @1 U
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
& g+ }; O$ H' i
2.Label控件显示超长文本时自动换行
. B. u4 S3 C B- E, j
只要对Label的两个属性进行修改。
$ c& W8 X. J# a- P+ C3 [$ s. O
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
$ u; e/ `2 h, e4 O% K$ T
第二个是WordWrap,将它设为True。
5 w; \8 U c. n+ I; K$ J$ H
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
$ Y. B7 ^. W0 m% h2 p
这时的显示应以空格区分多个单词!
3 q# s) T1 ?" E* K' ^
3.使Label控件上的文字纵向显示
+ @/ E& O$ P5 I9 u" l: w i
最直接的方法是改变字体的旋转度和方向!
6 Z2 z# I3 b& T
下面这些代码实现了旋转的功能:
. g$ B$ z2 H6 U/ D( L" u
void __fastcall TForm1::Button1Click(TObject *Sender)
1 B- w4 Z% I# V3 u
{
9 E" |) l+ w9 T0 c; I
TFont *font;
7 Z0 D* x( j4 U# A3 B1 P* S1 M) n8 _
LOGFONT logfont;
, Z" g# T& n d/ D( U
font=new TFont;
, W9 K$ e: A: o
font->Assign(Label1->Font);
6 Y" X% U# b+ ]0 a8 \ k
GetObject(font->Handle,sizeof(LOGFONT),&logfont);
( E: q: a) l/ N
logfont.lfEscapement=-900;
" X6 [/ ^% u# Z+ c
logfont.lfOrientation=-900;
: N7 a2 y6 l* b3 {8 L* N3 U
font->Handle=CreateFontIndirect(&logfont);
1 B3 V6 H3 C6 q
Label1->Font=font;
7 B. w* w. @; @
delete font;
2 U% D* K" p( A
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
4 N9 R2 H- j( C8 l$ P
}
# A* E' `3 d6 K5 A# D4 ]
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
, X6 W/ u( \3 [. {
将Alignment设为taCenter。
# a2 R, e" f. O S: h- O( S
5 X! ?/ `- {4 K& s6 U% \: p
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
$ ?5 b; I4 w# I8 I; |. m4 C$ ~
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
$ D2 ^2 y# t5 F4 d# c0 S
识别出来,整体分拆,否则会出现乱码!
0 K/ m% v& m# h% V5 S
下面的代码实现了这个功能:
5 P; o3 h) f* F1 m! S9 {2 X
void __fastcall TForm1::Button1Click(TObject *Sender)
+ H% \: X/ t0 h9 F: m( w2 D7 F
{
7 N$ \0 Z! e% l2 ]
Label1->Caption=VString(Label1->Caption);
1 w) S5 f* Q$ O+ w8 S( B
}
1 j: y8 `8 Z% \* S$ F
//---------------------------------------------------------------------------
9 ^6 I! ^' ^6 [4 T
AnsiString __fastcall TForm1::VString(AnsiString ss)
4 c& O" r3 E, g, y
{
/ k* q2 A* d& @; `! \7 [( l
AnsiString ass;
. E+ E& |" }) }0 j9 Y' M4 i
int ii,ll;
* X- B' l- t" Y& V7 n' n( y
unsigned char cc;
! ]" D, x6 E" F- o2 Z8 X
ass="";
1 f- _6 s$ Q( O- T6 H4 O
ll=ss.Length();
2 k2 ?8 C8 q+ b2 U
for(ii=0;ii<ll;ii++)
/ ?2 g, [3 O- F- G
{
0 S C. C' O, L; @- i2 Q
cc=ss.c_str()[ii];
2 s; U5 Y% N' y0 U* q* e
if(cc>0xa0)
: k! R. k# _1 M; U8 K6 h
{
, @ {0 _' V9 B- B! k5 k& K
ass=ass+ss.SubString(ii+1,2)+"\n";
' h! `8 D9 P& e k6 W+ E
ii++;
; M' A' x" k% q* Q# _- e
}
1 {+ Z# P5 W) C4 W: x3 P6 x' S
else
. ~( l0 J" B+ @" ~/ `0 g
{
& R* c, K0 b+ M0 J1 `) ^; U) ^: X
ass=ass+ss.SubString(ii+1,1)+"\n";
2 G- K, A9 l* p, j
}
! h( G9 P+ T' M I! O2 r7 q( x$ o! d
}
: x8 X3 H( ^& E1 w+ X- s
return ass;
2 v* K' n# ^/ F
}
! n* C+ q4 z& ~- w) `+ ]# F: B
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
]+ K m3 q6 S$ x* ?# U
4.鼠标指向Label控件时改变说明文字的颜色
$ P0 g: v& p) L, k6 b' w) P& B
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
6 f+ d1 C1 z' T9 e. U) H+ F% `
红色,其他的字体颜色变成黑色!
/ g6 P3 A+ l! p t
下面的代码实现了这个功能:
$ \* d P9 t+ I* C+ `" S
void __fastcall TForm1::Test(TObject *Sender)
6 t" x+ e2 w( v: @/ w
{
- p. G2 g6 V8 D. J2 ~; | u
int i;
) @- e+ m2 g! y: t/ d( E
TLabel *lb;
; E( r+ f9 v, L5 s5 a
AnsiString ss1,ss2;
3 F7 b( l( E/ M* e% G1 q
ss1=Sender->ClassName();//获取参数的类型
+ D2 [$ T& S8 G0 ^! E
if(ss1!="TLabel")return;//如果不是标签不处理
: `0 Q5 E) d; q2 r# I' y5 N5 D
lb=(TLabel*)Sender;
" r# L; V3 ~3 j. g4 z, g% s: J
ss1=lb->Name;
( s% T! H+ Z9 l
for(i=0;i<ControlCount;i++)
" @* B8 ~7 y' l% K
{
; T% S' L0 H: R( Z9 [, R; L
lb=(TLabel *)Controls
;
' @# S. T: }1 K( b
ss2=lb->Name;
( _8 U; m. a ] y
if(ss1==ss2)
+ a0 |. \. Q0 Z, u; w$ k
lb->Font->Color=clRed;
( g2 {- P% n, V8 J/ N5 i- f4 u
else
2 O$ u% v0 Z K. {. p
lb->Font->Color=clBlack;
: G, ^ r. d0 d4 o6 M
}
; \) I0 a/ I3 i
}
O" {5 T+ a/ r* M( k
//---------------------------------------------------------------------------
% b4 S/ }! S, n
void __fastcall TForm1:
abel1MouseMove(TObject *Sender, TShiftState Shift,
# n( O3 c! R$ d6 N5 _, \
int X, int Y)
# m8 ~, D. ?/ M
{
. \7 a: J- k4 R @& F: j
Test(Sender);
6 I6 }1 f& e- U5 V9 r
}
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5