- 在线时间
- 1957 小时
- 最后登录
- 2024-6-29
- 注册时间
- 2004-4-26
- 听众数
- 49
- 收听数
- 0
- 能力
- 60 分
- 体力
- 40957 点
- 威望
- 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控件显示多行文本0 X) d! E& g# m8 D3 Z2 `4 X
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
( S: o ]3 W& z( ?' Y# F Label1->Caption="第一行\n第二行\n第三行";
/ `' {3 b) c. g9 u# H- B6 M9 n$ O Label1->Caption="第一行\r第二行\r第三行";7 b7 H' j* P/ v, z9 l5 D" z
Label1->Caption="第一行\r\n第二行\r\n第三行";
7 S' O2 p& w, w* S, A 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
: J* \& U" D+ t( H, N* z* \/ v "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
; X) w" `0 H+ V( _/ z% [4 E2.Label控件显示超长文本时自动换行
' ]4 q7 [+ V0 _/ d0 l) f 只要对Label的两个属性进行修改。
* _/ q( n' {, D0 |* m; X 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!4 s& Y: f( a1 ~- `$ S
第二个是WordWrap,将它设为True。
# [( f2 o% V0 a, g 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
! r! {- A5 S& r 这时的显示应以空格区分多个单词!
# \: ]; ~( x0 x3.使Label控件上的文字纵向显示
( u* V) p7 l+ {8 B" p; H 最直接的方法是改变字体的旋转度和方向!/ ]' C/ N& J. q! q$ O# }3 P
下面这些代码实现了旋转的功能:
9 `- i% G/ j4 O; T3 A void __fastcall TForm1::Button1Click(TObject *Sender)
+ W& x9 s0 `" f8 \ {
# S! _$ d1 D4 }3 H. m, k( _- { TFont *font;
) l3 X& Y9 z9 y( @9 h4 { h LOGFONT logfont;# }) a1 P$ }0 o* s# m( K
font=new TFont;
* w' A' a4 \5 Y: |! I+ f, E6 i font->Assign(Label1->Font);
2 N& U0 d" _$ a/ p6 a8 U GetObject(font->Handle,sizeof(LOGFONT),&logfont); `- g+ g* `( [3 g
logfont.lfEscapement=-900;
$ i$ ~4 f( C" ^5 o logfont.lfOrientation=-900;
. s7 k1 [6 G+ {; G% r. X% | font->Handle=CreateFontIndirect(&logfont);
" C# g8 w! E$ T9 `% f" h Label1->Font=font; ?, E" F! L6 s; J) b
delete font;
# G' A( v. i- j; Z3 g Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";1 c4 a1 I5 A K% B: b) l
}" C7 Q. k, d$ m! r
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域! Z6 |! B4 K8 m; o
将Alignment设为taCenter。
( [5 e9 d" @1 h1 H 6 V. N1 j( \0 z7 K
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
" h' e5 L* k4 A. z Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
, l* |4 h2 K* ?) ^# H 识别出来,整体分拆,否则会出现乱码!7 d4 Q/ s g1 R s. e
下面的代码实现了这个功能:& I. p1 Y, a- ^2 b4 H% o
void __fastcall TForm1::Button1Click(TObject *Sender)' r6 h' [, r; K# C
{ J# |3 V0 K8 x- [0 {0 C- ]
Label1->Caption=VString(Label1->Caption);
( `* }+ i) P1 n( d$ T p, L. Z }( C7 E. z3 R4 `. z3 U2 n
//---------------------------------------------------------------------------2 { b- x# V: I u5 i" ^! f* x
AnsiString __fastcall TForm1::VString(AnsiString ss), A9 i ]: h3 D; J! p9 ^, h% t6 v4 E* h
{
: u/ e2 T% w) F4 h+ Z$ R AnsiString ass;
/ l& l/ H. }4 w+ H% V) k int ii,ll;
4 P0 o# x* v* s9 k unsigned char cc;3 W9 _/ e1 {" g% [9 u, z
ass="";
7 `9 d Q$ m- [/ v( F- W2 S" s ll=ss.Length();
: D, k h) Q; i/ U0 f2 @+ C for(ii=0;ii<ll;ii++)
' y6 M' }- d- t0 S) k% y1 j {6 `0 k' M9 K! e& R
cc=ss.c_str()[ii];
* j) C3 B% s4 f3 z8 u; O if(cc>0xa0)0 f* V4 p1 q9 p# V: \% T
{
( K: D5 V0 X8 i ass=ass+ss.SubString(ii+1,2)+"\n";
- R |0 i/ s, i# W ii++;* `# W9 W. {, ?, E2 B
}
, G7 A$ z- Y4 _& ^. l else# [( s6 ^% h% b( {7 F7 H
{0 j5 t0 p# D9 N3 c7 r9 A
ass=ass+ss.SubString(ii+1,1)+"\n";% G6 u. ~# k1 j, G) a: R3 u
}2 W/ p5 @8 ~- ]; u
}1 D8 \% D9 @) s* z" ], O' Z5 p
return ass;
) I p( s4 n2 m1 `8 \# l6 i! c }3 V* z" D- A# W: z9 a
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ B# @1 A- U$ |2 @3 W6 ]9 ~
4.鼠标指向Label控件时改变说明文字的颜色
+ }' q2 \5 E' @+ G 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
# @6 ?) l$ I/ e+ k5 U% d0 ~ 红色,其他的字体颜色变成黑色!! e: I8 z; v8 Y% Y& d
下面的代码实现了这个功能:9 x- T( o- E) C4 o% d
void __fastcall TForm1::Test(TObject *Sender)
~. ~: `* A! ]6 a; T' d {
i/ x5 c: O1 W) w4 y9 L int i;
+ F2 ]- G' \% G7 c& J- _9 U3 D' m TLabel *lb;
. U1 b9 L4 c6 d/ f' B7 Z: R AnsiString ss1,ss2;
, m) \) V; e! U; X5 F+ a ss1=Sender->ClassName();//获取参数的类型
* ^( F; D G5 L4 e6 A8 L$ u% z6 x if(ss1!="TLabel")return;//如果不是标签不处理
4 U7 o) T/ |* {$ x7 ` lb=(TLabel*)Sender;
/ @+ n3 K/ G8 J, k t ss1=lb->Name;
: n8 a' H$ H0 U for(i=0;i<ControlCount;i++)
: s6 ~4 ]" Z/ D: Q2 I {
0 z1 i- I% |7 s3 J, @* M: s B lb=(TLabel *)Controls;7 C& C1 e" o I u6 I8 y! W+ x; y) a
ss2=lb->Name;8 _) R" b& x0 [/ K: s: B3 B4 ^; m
if(ss1==ss2)
' R9 S, A, N, _2 u6 p4 F& f lb->Font->Color=clRed;
( G2 j% n, ]% Z else
# |9 x/ q/ B" O+ {9 u# t$ `. _ lb->Font->Color=clBlack;
7 C( H m+ i6 }: J: B7 P3 v; `! _ }3 k9 r K: _9 W4 k; a& F+ Z
}
8 H4 I! H7 m4 _+ z( D* b& X3 e //---------------------------------------------------------------------------# m9 o0 n, Q. y8 C2 F. ]3 r6 F
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
! V; h7 V) P5 B; Z int X, int Y)9 L/ _: l1 z1 k# I; T
{, Y% S P6 w& t
Test(Sender);
U8 d4 k a6 i6 D8 ?. [. S } |
zan
|