- 在线时间
- 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控件显示多行文本9 [; N `0 u( Q7 B' {# P7 k
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
3 ]/ x5 }! F& g7 `$ q! @- b$ R6 M& V Label1->Caption="第一行\n第二行\n第三行";
9 K1 N) j" p- e2 E: R( X Label1->Caption="第一行\r第二行\r第三行";
! M; O1 M6 |& J, I# ]0 ?, v7 Q; O Label1->Caption="第一行\r\n第二行\r\n第三行";% M7 @; y6 P, Q' K9 T: g+ R" |8 R5 p! U
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
0 p! |* a1 j5 e1 v+ C4 ]/ s1 I, @ _ "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!% N- _! ~5 M6 ]' g0 L: T
2.Label控件显示超长文本时自动换行' s% j2 d7 H; Q2 u9 \. ?( V4 W/ H$ }
只要对Label的两个属性进行修改。
# L3 s _) v/ }8 S 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
8 _& N* M4 u" t* T- R 第二个是WordWrap,将它设为True。
. F. w( L3 y3 z" m$ O 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,0 G' ^! E6 \% g1 d
这时的显示应以空格区分多个单词!
. g4 w; [8 C9 d0 ~, B- _3.使Label控件上的文字纵向显示
3 G, v$ k3 m. v 最直接的方法是改变字体的旋转度和方向!
- Y1 L$ k. J6 F5 j: H6 \3 ` 下面这些代码实现了旋转的功能:1 Q/ m1 p8 S6 z5 _4 q" ?
void __fastcall TForm1::Button1Click(TObject *Sender)
- z1 U2 O5 x: @: ]: ~ {
' Z" \1 L. k; ^5 F9 I TFont *font;
# [/ i6 ^7 A; a- Q4 r' P# r LOGFONT logfont;
! C9 J/ k+ w0 g5 v# B1 `# P% {* t font=new TFont;
( e6 x) a% J8 I/ N( h font->Assign(Label1->Font);
" B& N9 J4 _2 K3 h: S1 C! q4 q GetObject(font->Handle,sizeof(LOGFONT),&logfont);
4 c/ L0 J, F4 |2 q6 y logfont.lfEscapement=-900;
# m6 {/ H5 S) {0 H8 I9 J4 w logfont.lfOrientation=-900;
" Z4 i* E2 i) q Z font->Handle=CreateFontIndirect(&logfont);
4 }' G( {" [$ i; \0 V Label1->Font=font;: o- t4 w& s7 F3 V/ J. h1 H: _
delete font;
& G2 I6 ~. g0 [ Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";1 R# f7 f% J0 G9 t
}
. i2 u. d3 S& K& M 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ }0 {& y y1 S w. D; R" P
将Alignment设为taCenter。
! _0 c' S8 O" k7 W & a: `$ a7 I7 U1 n
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
6 x4 } k& h, T% h; w Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
R% ~! c- X' ?1 ] 识别出来,整体分拆,否则会出现乱码!
) g+ q; K/ f3 N( t+ ]- A7 z 下面的代码实现了这个功能:; a& }& C' b) H. G- W5 W! l
void __fastcall TForm1::Button1Click(TObject *Sender)7 a! u, g3 ~; ?- `& d D" g9 D" c! Z
{
$ ~1 b, N# t; C: F Label1->Caption=VString(Label1->Caption);
0 B* K; h! q% V a/ y }# w3 L0 H9 V+ l- h" p2 g
//---------------------------------------------------------------------------; w6 i0 j! c3 J# G0 P
AnsiString __fastcall TForm1::VString(AnsiString ss)/ u: c) g1 Q& B, y7 K4 {
{; h4 ^( A* s. k" n$ W& D* N+ Q4 C
AnsiString ass;8 N9 `# M6 [4 f/ h3 n% l& H
int ii,ll;
6 t1 k7 U7 z5 ?, B: z* ? unsigned char cc;
2 a) m. y% ]; i: Q- k2 f/ [, G ass="";
- O. b- m% p( ^0 [ ll=ss.Length();
& c# H& c! c+ V# x5 T+ q for(ii=0;ii<ll;ii++), Z* r7 A2 b4 X, _3 m$ p
{
! ~! x7 S5 P5 l) }8 s! s5 x8 ]* I cc=ss.c_str()[ii];1 H. @3 j1 y# [
if(cc>0xa0)3 d. V3 J. X5 y7 @+ O
{
* y H9 ~7 ~3 o+ K" l ass=ass+ss.SubString(ii+1,2)+"\n";
% Q+ D: o' z7 {$ p5 X9 Q' F ii++;
7 N" T0 Y1 U/ b( Q% r, A }
7 H. ^' t" b4 d$ V; ?0 E) I8 M4 a5 {/ T, ? else7 N. B# W" Y* ?; W
{6 d( L" M$ ]% R: C
ass=ass+ss.SubString(ii+1,1)+"\n";
1 s& S2 Q/ N" w8 B% H. P$ G& E }
6 o6 P5 A2 A& g# O }" Q9 i8 w2 j$ W, ?. l
return ass;
$ O2 O/ u" W0 J4 G8 M9 Y( h- w }/ F7 |& d2 L0 n7 I3 D+ D
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
4 f& p& A) D6 Y4.鼠标指向Label控件时改变说明文字的颜色% `0 g" D8 D" Y+ \9 w
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
, J6 K' i. M/ ~: D 红色,其他的字体颜色变成黑色!
2 n. }+ a0 p% O! t+ { 下面的代码实现了这个功能:1 t; w- ^ E) K
void __fastcall TForm1::Test(TObject *Sender)" Q. V6 P. j; Z1 C1 u& M/ Z9 |
{
6 R) f( s( w% \* U3 L int i;
/ s( N, ?9 d9 `0 q! n6 g TLabel *lb;# M7 B- Q2 }) Z" E' V+ w4 W" y$ B
AnsiString ss1,ss2;
9 L* i: I( G* ?1 v' O# y) S6 D ss1=Sender->ClassName();//获取参数的类型 J/ |5 f, ~, d
if(ss1!="TLabel")return;//如果不是标签不处理, T3 v7 c* o' P @( ~
lb=(TLabel*)Sender;
" x, `5 e- `8 i4 H2 D0 C ss1=lb->Name;
) n) K% X+ C: f# | for(i=0;i<ControlCount;i++)
( `( \+ Q3 k. Z* E9 W1 K l0 o5 D {3 v% b A5 h) {" r9 Z
lb=(TLabel *)Controls;: x* ]/ {8 q/ t- f1 P5 i+ [. S
ss2=lb->Name;0 O5 S3 T) q, F
if(ss1==ss2)
* ^7 e( B8 o' j! E( T- a* T& m lb->Font->Color=clRed;
( }1 P5 ]4 c; ]7 H: o& l else/ y* W6 X4 L9 L8 ?! M
lb->Font->Color=clBlack;) q4 e% w: w/ Y ^' s k
}! ^% H) z$ @$ n, w
}
! k2 P2 ]8 k/ y' o //---------------------------------------------------------------------------$ y1 \. S" {/ b8 w- [7 ~% o
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
/ z4 n/ `0 u3 {* J( X3 C int X, int Y)
0 j9 V$ o) s8 ?3 G# D: I; ` {
' e' R" \2 K) J5 l; J6 j; |5 K" T Test(Sender);# T$ {9 K6 d4 z
} |
zan
|