- 在线时间
- 1957 小时
- 最后登录
- 2024-6-29
- 注册时间
- 2004-4-26
- 听众数
- 49
- 收听数
- 0
- 能力
- 60 分
- 体力
- 40959 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 23862
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 20501
- 主题
- 18182
- 精华
- 5
- 分享
- 0
- 好友
- 140
TA的每日心情 | 奋斗 2024-6-23 05:14 |
|---|
签到天数: 1043 天 [LV.10]以坛为家III
 群组: 万里江山 群组: sas讨论小组 群组: 长盛证券理财有限公司 群组: C 语言讨论组 群组: Matlab讨论组 |
1.Label控件显示多行文本
; j+ D8 p9 G: h) P0 ^) ~$ u 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:( R) D" W7 ]( V' {
Label1->Caption="第一行\n第二行\n第三行";1 @- Z2 @/ [* ?" s% e
Label1->Caption="第一行\r第二行\r第三行";* f2 e8 W* Q2 h4 v8 L5 h/ A
Label1->Caption="第一行\r\n第二行\r\n第三行";
0 K( e" p @( |0 E- P 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入( `, O2 O% f2 n
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!& W0 X# w; p4 A
2.Label控件显示超长文本时自动换行
+ ?5 ]; ~$ X- C# Q' w- J' ] 只要对Label的两个属性进行修改。) x( K' U4 E- p4 @& F9 y! t
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!1 W3 t; L+ U5 s9 B4 {) \
第二个是WordWrap,将它设为True。
% \, L5 n; F5 R) F, {$ _0 r+ d 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,, @' [3 N- V$ F! g# S. |
这时的显示应以空格区分多个单词!/ ^7 [; `6 E" L6 M
3.使Label控件上的文字纵向显示; w7 p' u; N. c4 ?# {
最直接的方法是改变字体的旋转度和方向!1 w+ M" z4 G% d! i% q- e
下面这些代码实现了旋转的功能:
4 d m2 J3 o6 N void __fastcall TForm1::Button1Click(TObject *Sender)9 ]9 K. m! O" _
{* C; c. B( s U3 A
TFont *font;
' R# m" [) {+ u- [8 Z' Y LOGFONT logfont;$ F l4 A' [" E" s2 B
font=new TFont;$ w( V1 a& W0 f+ Y/ n2 m
font->Assign(Label1->Font);5 \# M/ ~( V+ m+ _3 P3 V. o
GetObject(font->Handle,sizeof(LOGFONT),&logfont);# `. `6 _9 _8 V1 ]( a
logfont.lfEscapement=-900;
5 R. z' d5 R: {+ M2 y% _# _+ [6 z+ L logfont.lfOrientation=-900;( |) F$ M4 N1 l0 k/ j
font->Handle=CreateFontIndirect(&logfont);
1 l6 [0 t Q2 F8 J Label1->Font=font;8 K8 J* H/ f6 H/ L& X5 v6 X( P
delete font;
+ l! M1 `# l. B0 @+ F/ U+ ~- M Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";0 U8 A9 {5 ]1 {; [+ U9 F6 S
}3 Q* k2 [0 d& Q) s- X @" `
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
2 I; v. J2 Y! n# s' F8 H 将Alignment设为taCenter。! t( x/ Z2 A. k6 Z. H
9 @* a/ e5 d9 o; O7 l; t
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
/ |9 e1 n9 |. D4 E& {2 i' v Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
5 {% R$ b- }/ A9 n. P" C 识别出来,整体分拆,否则会出现乱码!
; I i3 \1 }' S& m$ [2 F8 r4 G5 C 下面的代码实现了这个功能:
: }5 d+ o' e8 l2 M! y% v void __fastcall TForm1::Button1Click(TObject *Sender)
+ v+ H s' F# Z o0 k {' m2 W* @) O3 Y7 c! H9 y6 Z
Label1->Caption=VString(Label1->Caption);
# W$ i/ X; ], D/ e }
9 s4 h, \" N( w) P) b. j' w //---------------------------------------------------------------------------1 B" u9 {, s& x) I) {' a. ?3 D
AnsiString __fastcall TForm1::VString(AnsiString ss)
% a4 a a u( Y# { {
0 B/ Y$ M- Y) d% w: q2 s AnsiString ass;& F) V. K. u8 K* z7 b) g
int ii,ll;
9 |) W* z$ L$ m/ J" Q0 [; u; H unsigned char cc;
& D0 [5 o" _$ Q8 {1 Z ass="";
/ Z' c, m( u& m$ p" Q: o- X ll=ss.Length();
3 e- u: X6 [3 E/ L for(ii=0;ii<ll;ii++)& x U5 h* z: \5 u$ |8 Q
{
/ n! G8 x; A0 Z# a9 T, j# ^. V$ u cc=ss.c_str()[ii];
w, F8 f; @5 x if(cc>0xa0); t# T9 b' R% u( c/ S( W- I: ]
{, W9 q, s0 F0 g* D
ass=ass+ss.SubString(ii+1,2)+"\n";6 ?/ q6 }, x# Z L- i5 B. }
ii++;6 D8 X! s3 b' M" b _+ o+ `) Z
}, f) ?& C8 L+ m8 D5 w3 j8 ?
else6 R/ N" |6 D% K, @
{4 B% ~9 z7 f; d# Q" D% \, D
ass=ass+ss.SubString(ii+1,1)+"\n";
" M8 u) F0 y. T i5 n! ?9 W }
' K% l3 G. s! m- w9 c8 Q }' Z4 Z6 e7 I! H
return ass;
& f5 m2 E! u% P+ \4 b2 _ }! o5 G% f6 G2 [& p
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
6 M0 ?. C: G7 s" j. N4.鼠标指向Label控件时改变说明文字的颜色4 c3 Y# k( Q7 B9 ]
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
% F( O# z, @7 q+ d 红色,其他的字体颜色变成黑色!; t( R# I& p5 M0 [# n" V
下面的代码实现了这个功能:; H4 z6 [+ g; Y+ a! r( P ?: n1 F
void __fastcall TForm1::Test(TObject *Sender): m6 w: h9 R8 }6 M# y4 Z, N& m
{
6 H$ a- a5 M: U* ]8 |! Z int i;
. e T1 K3 R/ ]! [' Y9 } TLabel *lb;
) O& `' b: C" n/ Y; B( F1 G% s" d* C AnsiString ss1,ss2;
$ j; e! ]1 [1 ^ ss1=Sender->ClassName();//获取参数的类型, N% v* {$ _1 V: \. i. V# y
if(ss1!="TLabel")return;//如果不是标签不处理
" F/ T5 W; B% O+ w" z lb=(TLabel*)Sender;/ w8 j4 p( ^/ ^. \% K) P% H1 a9 c0 Y
ss1=lb->Name;
a: `8 S. a7 t0 L' f% d for(i=0;i<ControlCount;i++)
' l! O4 A' g' _0 J4 O {
$ c/ U- L0 Q. n, Z4 a, i7 U lb=(TLabel *)Controls;
& b, k! v ~3 U |8 }4 p ss2=lb->Name;/ t( o# E, S* d1 K( V/ W( a* s! ]
if(ss1==ss2)3 B1 H: l+ \- c5 _7 P+ j
lb->Font->Color=clRed;
4 V/ A h9 ~3 E5 D5 X else2 W, b1 o5 w }) P# P) e8 N
lb->Font->Color=clBlack;
, t- ?( Y9 |* Z* P1 t! | }5 Z# ]4 t) C( p9 V1 I2 J! g
}; [3 @. B* [6 u2 W( Z& _, S6 \
//---------------------------------------------------------------------------. _- C1 A" a- w/ T/ M# G
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
6 d( E o% ]6 e! T; j( C2 V8 j+ [2 |' w int X, int Y)) L/ k/ G7 c* a) y
{) Z" U( D, G, Z, p) {
Test(Sender);. ]+ _; f" z5 _6 j9 T
} |
zan
|