数学建模社区-数学中国
标题:
Label的使用技巧(由ilikenba收集、整理、调试通过)
[打印本页]
作者:
ilikenba
时间:
2004-6-23 17:31
标题:
Label的使用技巧(由ilikenba收集、整理、调试通过)
1.Label控件显示多行文本
2 ^+ ?9 o4 B3 {! r
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
' h8 t" f1 f# |* b
Label1->Caption="第一行\n第二行\n第三行";
. D! X) \* v, v6 f
Label1->Caption="第一行\r第二行\r第三行";
0 ^7 B, m) g! }4 G5 W
Label1->Caption="第一行\r\n第二行\r\n第三行";
/ j! M9 H8 Z7 R& s! S
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
* {! t/ V- l# a5 l0 G3 M
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
- u& y0 N5 o1 B% e/ T
2.Label控件显示超长文本时自动换行
3 @8 A9 Y# @1 G* f$ m+ X2 ]
只要对Label的两个属性进行修改。
' o% Y0 l( G3 \; S% U
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
* | X8 Z" [, G" T. E7 M
第二个是WordWrap,将它设为True。
# g& S% K1 {8 K4 ~' U; N- L z1 `
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
, q+ {5 r7 K8 O. L
这时的显示应以空格区分多个单词!
' ]4 g8 F/ a; Z, A$ w$ B; G7 c
3.使Label控件上的文字纵向显示
5 R0 q3 U- J; F8 k# c
最直接的方法是改变字体的旋转度和方向!
- R2 B% r4 j5 E7 G
下面这些代码实现了旋转的功能:
, _ I! \6 [8 X3 k$ S4 K5 [
void __fastcall TForm1::Button1Click(TObject *Sender)
% D5 @- J- |9 J. ~
{
5 ^* Q& Z8 {4 A& ^
TFont *font;
$ o2 L0 ^$ F2 @: C9 L9 `
LOGFONT logfont;
, k, o. m7 w' l! ]2 N4 V9 G/ J
font=new TFont;
1 H# F- n! M0 }2 y" {% e2 p
font->Assign(Label1->Font);
1 U O$ \9 M4 k1 v$ O! k
GetObject(font->Handle,sizeof(LOGFONT),&logfont);
0 K( s: U( X; v5 ^
logfont.lfEscapement=-900;
' R6 [* l! H2 w6 \
logfont.lfOrientation=-900;
3 D+ Z% z* c) j4 O9 H9 r. t
font->Handle=CreateFontIndirect(&logfont);
7 W+ s0 j0 v [
Label1->Font=font;
. [ x+ n0 X! m. P/ C# E. Z
delete font;
* {$ [1 r' s6 e2 f. O
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
, K/ B/ F: F' G% L
}
' p) R( W, s# ?$ i3 i4 }/ i* r
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
8 d N0 `1 g9 _7 U8 F2 {
将Alignment设为taCenter。
* }" t- r( `$ c1 ^( t3 B8 k$ l) J. g
. R7 j8 ~; c' ~8 e+ i, C3 ~$ n
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
8 S4 I% |7 z5 ?' d$ s8 U
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
5 w! E% g9 y3 B1 v$ Z0 z3 |/ \. Z N
识别出来,整体分拆,否则会出现乱码!
8 v7 V- M: H6 w: T( f8 @
下面的代码实现了这个功能:
3 m6 n t+ a [$ C/ {) R
void __fastcall TForm1::Button1Click(TObject *Sender)
- _) w3 J1 o9 Q I
{
' g2 k8 v$ N2 x+ x6 @9 V
Label1->Caption=VString(Label1->Caption);
1 f- q- p4 M! q* _; G9 V
}
& P) i! s& A3 e! u, f; f6 O
//---------------------------------------------------------------------------
, B# j5 j. {6 ?" C4 H+ U
AnsiString __fastcall TForm1::VString(AnsiString ss)
6 [+ f9 r2 o% Q7 W
{
$ v2 O) F1 k2 ~4 g$ r3 o
AnsiString ass;
& d6 Y6 X6 n, u3 z
int ii,ll;
+ v# I/ Q4 L+ }9 j9 I: g7 O Y* o( \9 Z$ Q
unsigned char cc;
' }- z( H( ?+ j l' _- ^2 I
ass="";
5 u4 c$ e1 E" W
ll=ss.Length();
1 O8 u) B5 P5 a
for(ii=0;ii<ll;ii++)
% q4 |! H# u4 F( q5 m) a
{
4 g! L6 a, p y( u! W
cc=ss.c_str()[ii];
% d3 b# M2 @: t; B
if(cc>0xa0)
: J$ G) p3 s7 Z+ z3 t4 w
{
9 q. k8 d# n! V7 g
ass=ass+ss.SubString(ii+1,2)+"\n";
- B6 J& C4 Z" y9 p& n6 \. i
ii++;
" F: o* r( ]) u+ V% P0 w$ a
}
) l. ~* p& O9 I' b9 i
else
, U/ j& l6 s) ?; W
{
6 P4 Z# h" y, O1 m
ass=ass+ss.SubString(ii+1,1)+"\n";
" p. a/ B- t* ?3 P9 M
}
8 ?6 v; ~! O- Z: }* C- a
}
) I/ H' @* i- v p# Q1 Q
return ass;
& z6 h3 q7 F" r3 O
}
7 g; M# e- ~& G/ Y
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
# e/ a b8 I4 `& J f
4.鼠标指向Label控件时改变说明文字的颜色
' a* ?2 l H1 W# Q0 b# M
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
: D6 q4 R/ }- O# {; K
红色,其他的字体颜色变成黑色!
, Z( ?; a6 c% Y# Q" Y* ~
下面的代码实现了这个功能:
+ f' b g7 M& a; l1 S* r) Q
void __fastcall TForm1::Test(TObject *Sender)
4 \8 L8 K* F" x3 U6 Y
{
5 U8 q1 R, J$ X0 Y4 y
int i;
5 _, O9 y9 ]5 W- G
TLabel *lb;
: Q1 a* a8 g0 A+ w2 N' f8 t
AnsiString ss1,ss2;
7 H+ N: H& u/ x. R
ss1=Sender->ClassName();//获取参数的类型
0 H7 Y% Y5 J" n9 `4 B
if(ss1!="TLabel")return;//如果不是标签不处理
) [* f& N$ J& G0 x! Y& `
lb=(TLabel*)Sender;
( V9 z* m# ]$ g7 N# D3 a
ss1=lb->Name;
5 k7 F1 _! M/ T/ L. E9 X" ]# z5 C
for(i=0;i<ControlCount;i++)
" P: s: |: }0 J; f
{
( k0 h$ ~+ |( b( T4 o
lb=(TLabel *)Controls
;
0 M- N/ v0 B6 g9 } {8 _3 y1 n! M
ss2=lb->Name;
. j& z# _, W9 K, j7 p
if(ss1==ss2)
, K/ J& s" L9 d) Y
lb->Font->Color=clRed;
" @, W2 Y* B& T9 [; k1 k
else
& L5 c( T! Y$ G
lb->Font->Color=clBlack;
1 P8 p. X, i/ Z/ V# t3 p
}
; w; ^2 y0 b0 e2 P
}
) N4 S8 j5 E2 E! k; l9 c
//---------------------------------------------------------------------------
! N: q% m. X" a1 G" K% X {: ~
void __fastcall TForm1:
abel1MouseMove(TObject *Sender, TShiftState Shift,
' p0 P. x9 h& C/ @
int X, int Y)
1 g2 |, h, W5 }/ W9 ^
{
b* E, c6 {, `
Test(Sender);
5 g+ ]( k( p+ g1 N% H/ @
}
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5