- 在线时间
- 1957 小时
- 最后登录
- 2024-6-29
- 注册时间
- 2004-4-26
- 听众数
- 49
- 收听数
- 0
- 能力
- 60 分
- 体力
- 40960 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 23863
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 20501
- 主题
- 18182
- 精华
- 5
- 分享
- 0
- 好友
- 140
TA的每日心情 | 奋斗 2024-6-23 05:14 |
|---|
签到天数: 1043 天 [LV.10]以坛为家III
 群组: 万里江山 群组: sas讨论小组 群组: 长盛证券理财有限公司 群组: C 语言讨论组 群组: Matlab讨论组 |
1.Label控件显示多行文本& M8 o5 F, _6 O3 b
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:- k& i& A& a3 L- h, t, L& P4 O
Label1->Caption="第一行\n第二行\n第三行";1 m5 I2 k/ a. ^- f! g2 D
Label1->Caption="第一行\r第二行\r第三行";
* K1 ~* _( n. w" c: z* F Label1->Caption="第一行\r\n第二行\r\n第三行";
/ u" V! [/ Q: j" |1 O9 \0 d 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入, b+ K# Q' n. n/ {, r1 ?0 ?, c
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
# M3 ]8 L7 ` [/ N2.Label控件显示超长文本时自动换行5 h& ^ E) Y: R+ V
只要对Label的两个属性进行修改。
; \4 H* `: e& { 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!" ~- u& \, F$ \, ~; F+ @
第二个是WordWrap,将它设为True。: O0 O* g9 T1 r( x4 i
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,: q, C- @8 Y$ r7 M
这时的显示应以空格区分多个单词!2 \+ G9 }) S. m7 v& H: O/ q
3.使Label控件上的文字纵向显示
7 q7 v9 J* s9 r; U; `2 Z 最直接的方法是改变字体的旋转度和方向!! s( k1 C7 _& @ B( B
下面这些代码实现了旋转的功能:
1 Z) W6 o% |! b) k6 c! _+ A# A void __fastcall TForm1::Button1Click(TObject *Sender)
. A$ k9 k4 C8 [- {- \% F8 w% v% S {
( l$ a, r0 I# e: n' k1 G TFont *font;
& V' R/ o- [, w# i U6 { LOGFONT logfont;
( ]3 v) n+ H9 A- P" ~8 R( I font=new TFont;! [; F% o. I0 u/ E1 t, n
font->Assign(Label1->Font);% _# l) M! w' g# Y
GetObject(font->Handle,sizeof(LOGFONT),&logfont);
9 D# S! p2 b% P- _! A logfont.lfEscapement=-900;
5 V; f; H; o7 Y+ h logfont.lfOrientation=-900;
% w- o2 V2 Z- F$ n" k$ U4 p+ X font->Handle=CreateFontIndirect(&logfont);
0 }5 j' r1 ? R/ @ Label1->Font=font;
5 r% j% Z( Q; S& F delete font;
; N/ l0 J- U. W5 f! G5 G Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
M5 D% q: H* Q# F/ s% N3 _" i }* Q6 }+ ~- f, I- N# p. f
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!2 D9 s5 S. d& W+ [+ l2 L& X$ d
将Alignment设为taCenter。* h% O7 l) m; I: d ^
3 }8 H. f" U9 O* x; m; N& c
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的5 w8 G0 \0 w) N" K* U3 q7 d
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
0 p) o6 f; Q% e# d 识别出来,整体分拆,否则会出现乱码!( e) [( [: x z$ G* L+ D; e1 F
下面的代码实现了这个功能:) i9 G/ B# f7 O/ q. I. y
void __fastcall TForm1::Button1Click(TObject *Sender)
, p3 L0 O4 }7 |& A H: } {, v2 m2 P' e }% V; m; G
Label1->Caption=VString(Label1->Caption);
) P, u7 ?9 m4 ?7 F E/ | }
+ y$ k" u& q: B& F0 z7 N //---------------------------------------------------------------------------
/ z7 c0 b( L; t7 n( J5 b AnsiString __fastcall TForm1::VString(AnsiString ss)
& ], |% G% N* \7 a/ ~3 ] {
' \! U7 s0 x: Q0 E, W AnsiString ass;
) T' u- c$ Y. y5 Z- I% s" C" [* C int ii,ll;6 n0 z& K- b2 u9 U+ ^) |$ A
unsigned char cc;
0 R3 {0 o" _( i5 F" B, [3 w' r, c: d ass="";
: }0 O9 _! I7 l2 ^; _ ll=ss.Length();0 u( Z) T% }0 H( e- Q* W' B- W- g
for(ii=0;ii<ll;ii++): z4 X, n; a% G, T7 O1 c4 [
{$ k, V V! d; r
cc=ss.c_str()[ii];1 P8 ]1 U: @! x# v8 q1 d
if(cc>0xa0)
/ \7 B! B0 X- W7 V2 N# S3 f {! K K; e5 R1 h2 f. w' k. M
ass=ass+ss.SubString(ii+1,2)+"\n";
2 E J# @# C, q) Q* I+ l1 R ii++;
! z3 w9 o# y+ c7 ?1 ]" L$ ~ }# s9 f' {' \2 l1 L4 n0 Q8 ]& w' |
else
1 P P5 j- V0 E9 w8 \8 c {. @$ b v& M: @8 t
ass=ass+ss.SubString(ii+1,1)+"\n";; a2 b- A F- E" d6 o8 O
}
) ?0 R" [1 Q& d8 Z8 T }
, E# `& ~5 I" |1 C. R return ass;
% R( l" l; w8 h6 v! I: |7 b5 u) c2 T }6 I/ g& H$ s N; K) y$ r( m: m
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ E- i3 [6 }( }4 l/ w/ n( J7 }
4.鼠标指向Label控件时改变说明文字的颜色7 ~2 k$ q& _9 |3 S3 ]
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
- m! s! N, a% `' \ 红色,其他的字体颜色变成黑色!8 a# x5 z: x7 k
下面的代码实现了这个功能:
- Z2 G( w( S( `% x0 W void __fastcall TForm1::Test(TObject *Sender), d, X0 E, F$ g- S( C T. n
{
! a3 c" T& U9 v4 K( m int i;' u8 r' k* E7 O, x% Z8 h' b# ~- ^; m
TLabel *lb;
0 `$ g# d/ p7 Q9 q AnsiString ss1,ss2;2 J0 [) i* a5 T `
ss1=Sender->ClassName();//获取参数的类型" b5 j& e; c: P. I) x! S8 |8 m) l+ ]( @
if(ss1!="TLabel")return;//如果不是标签不处理
. A/ r/ `, s. D9 B lb=(TLabel*)Sender;( k+ n# r( i. p
ss1=lb->Name;2 A9 b% h7 ?) M0 X2 m& V7 f
for(i=0;i<ControlCount;i++)
0 ?7 g' V9 y4 P. }/ h4 D {( G5 U: p; p( j ~6 ]
lb=(TLabel *)Controls;3 ] O, @1 c/ b# O
ss2=lb->Name;4 Q$ y. I' `; i2 J" Q9 u
if(ss1==ss2)
9 z3 V" t" l- l- ]9 ~/ s lb->Font->Color=clRed;
/ N$ R( [4 l* g e* F else
) g/ x) o$ b+ `4 i1 d( } lb->Font->Color=clBlack;
2 d, R" a& p, }9 d }
# Y* W4 z; \8 R/ z7 v% M* C& l* Q }2 R" [3 u" I, `3 k
//---------------------------------------------------------------------------
5 m& o% ~& ^, s( r7 J void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
' Y- _( H* X6 g" E% h: \: x1 v int X, int Y)
$ ]+ E, b' {: ]1 }/ t" i+ Z {
q! \1 H5 K* \ Test(Sender);# O0 F; c2 a$ H5 X% Z
} |
zan
|