- 在线时间
- 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控件显示多行文本5 K( s1 a2 n" n
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
2 [" v& U6 [2 s) l/ G% L9 r Label1->Caption="第一行\n第二行\n第三行";
3 t5 R/ E( }% i$ s8 F6 u8 R6 A+ d Label1->Caption="第一行\r第二行\r第三行";
# X1 }) y9 c2 c5 U- e Label1->Caption="第一行\r\n第二行\r\n第三行";
5 L g J& Q) `9 c2 B5 u- ? 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入6 Q/ t( o' e, Q; d. R$ F
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
- ]+ {/ S9 g' p' u& O' H$ Z2.Label控件显示超长文本时自动换行& S2 A: g& D$ i+ ^ X: {6 ]; m
只要对Label的两个属性进行修改。0 f+ r0 P9 ]1 R! \/ \
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!( f! v2 L. z0 J- c/ B$ |
第二个是WordWrap,将它设为True。
/ r! H0 r1 H4 n6 b. J# `8 i/ _ 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了, A7 B/ c( f0 m& f* i \' v- K
这时的显示应以空格区分多个单词!9 T2 M, Y i$ t
3.使Label控件上的文字纵向显示4 N4 D: z q3 {, d$ s D& I
最直接的方法是改变字体的旋转度和方向!
/ u5 H6 O" ?% L( k% Q' T" E 下面这些代码实现了旋转的功能:
% U" ]: H: V& q void __fastcall TForm1::Button1Click(TObject *Sender) j: V" t6 ]1 c8 E, I" i
{
" E% _! _! v5 z, A0 }' d. P TFont *font;
( e+ Y$ _; N! u# ^1 s* J LOGFONT logfont;
) K" A/ c; u( n. C; \ font=new TFont;- L8 P& w' }) D7 {9 L
font->Assign(Label1->Font);5 f! N x" c, m) ~5 S" G" ?* x4 g
GetObject(font->Handle,sizeof(LOGFONT),&logfont);7 ?! u/ V3 Y5 }% g: V
logfont.lfEscapement=-900;5 t/ z0 y5 Y4 u0 `
logfont.lfOrientation=-900;
# @' I/ ?# y: X/ k: }' S K% K* b font->Handle=CreateFontIndirect(&logfont);
% }6 s$ T4 Q" y+ |4 D7 r# F9 t- K Label1->Font=font;( z. d6 T: A' T8 U
delete font;2 k, T* B% C% _0 h
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
* w3 O- b2 Z. B+ o' N2 |' G( j2 o }& _0 N1 B: l% M* h1 T4 k
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!# _2 |% R& X) r2 {: f0 G0 [
将Alignment设为taCenter。4 v- h! ]) U9 }+ ^
7 D6 c$ |3 \& E2 U* w6 W+ @
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的& h* Y* ^9 C9 W, p, J
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字3 e. Z4 z7 z, `* N4 O# ^
识别出来,整体分拆,否则会出现乱码!2 W5 B0 o/ q# G1 f& |
下面的代码实现了这个功能:' F) Z* j: h" J# U5 Q
void __fastcall TForm1::Button1Click(TObject *Sender)
- n% u# n3 i* j; t$ e. n9 R {
* k1 h3 O! m# I* k" g! w7 m) e( Y Label1->Caption=VString(Label1->Caption);; o7 t5 D+ ^7 i, G
}
$ j9 B/ [. H" ^6 J2 i( G //---------------------------------------------------------------------------
% u" z7 F4 } ]( \ AnsiString __fastcall TForm1::VString(AnsiString ss)
( h/ n% ]% H* G$ H6 E- f, s {4 i0 G2 m9 W3 ` U7 N' g) G
AnsiString ass;
5 m! O0 f8 {/ H; N5 b int ii,ll;' j1 P2 [7 D5 v' P& Y
unsigned char cc;
F3 S z) p4 Z9 k1 z3 g b8 S ass="";& z, X. R. t5 ~/ K! Q1 l
ll=ss.Length();
; B) ` j( |6 A8 H+ k& a for(ii=0;ii<ll;ii++)/ P6 ?1 m6 q- ]( b6 k$ G* Z
{
7 K% Z2 a& @0 t1 v$ u0 i- ?7 n cc=ss.c_str()[ii];; O- b. H- v; B& M. l6 x8 W
if(cc>0xa0)) _1 D( i2 O% _$ G# N$ ]
{# f6 K. ?8 r6 r! h! x3 @0 d
ass=ass+ss.SubString(ii+1,2)+"\n";7 ]0 m+ W: L4 l; m; s' B
ii++;
7 L0 L; I0 Z+ V) b$ \ }
* L5 {' S0 S! x `3 ^0 p$ t, ` else
3 S, }$ Z0 u& o- N { B* Z8 Q& J# k3 ~/ T. `6 O
ass=ass+ss.SubString(ii+1,1)+"\n";5 l& \' M& A2 Q6 u9 M( B
}
1 V1 [6 |: N. }$ I" m2 r5 V }
$ H. y" t9 L& C B' F5 ^2 u return ass;
: d, Z0 H8 V, |2 ?; U1 ?' u }
8 Q; t! @( B4 d+ P 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!/ ]6 n; T& R1 U9 L1 M% l3 n
4.鼠标指向Label控件时改变说明文字的颜色9 n ]9 z: ]) d% X: C$ l
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
" Z7 J: I' x, @, _5 u1 a 红色,其他的字体颜色变成黑色!
6 Q" {0 C1 ]2 G( o/ J8 e A 下面的代码实现了这个功能:9 J- ?: o m/ _- B0 p
void __fastcall TForm1::Test(TObject *Sender)- S# l* Q9 [; p b
{
. t4 f4 p# k( C2 }: h8 }6 o int i;: m z1 U6 U& r, b0 ~- k8 j( A, z
TLabel *lb;
9 _- J! k+ i* C, j; [( B AnsiString ss1,ss2;
$ c P% H! h/ I3 d ss1=Sender->ClassName();//获取参数的类型
6 U9 k* k. w5 X. C' u if(ss1!="TLabel")return;//如果不是标签不处理! T% U4 w8 n) l
lb=(TLabel*)Sender; ?3 H; x& i& v& ^7 s2 R
ss1=lb->Name;, h: J0 H: \. F
for(i=0;i<ControlCount;i++)
. u( G# {3 c G5 c* }% h. U {
2 \: k0 C, X, a2 p lb=(TLabel *)Controls;0 d9 X+ v9 N1 N# O8 a i; R. H
ss2=lb->Name;1 P2 A2 ^1 _2 q" X
if(ss1==ss2)' v8 r5 q: E3 q- I6 p ]% k
lb->Font->Color=clRed;
- }# ~" i. E+ O1 v$ |3 b else
; o! H9 [9 s$ E7 X lb->Font->Color=clBlack;; m. O- @) N: ?1 s$ W6 D7 W$ f" `
}6 ], P: o% }$ V+ T1 d
}
+ \( k9 h5 d7 q- E7 m# K' [ //---------------------------------------------------------------------------
8 }. t* [) A8 D- S3 i void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,) v% T" W' G) U Q/ ?
int X, int Y)0 c1 \! D l8 Q& k% X- s0 \
{
0 D5 B, L, Y4 b( s4 g Test(Sender);% ^4 A/ _( i6 I) V3 j
} |
zan
|