- 在线时间
- 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控件显示多行文本
) A/ s& B$ j0 w7 x 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:$ e( E; {6 s9 v: G7 _3 g; i$ a
Label1->Caption="第一行\n第二行\n第三行";( Y/ J4 s% h) |$ E
Label1->Caption="第一行\r第二行\r第三行";1 ^6 N. F& o: A
Label1->Caption="第一行\r\n第二行\r\n第三行";. Q8 t( Q# L, ^& I6 E! Z! Y
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入' q [$ c1 T' Z0 a
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
, q+ v2 A3 T; y1 Y% `' f. {% m2.Label控件显示超长文本时自动换行! U& m' K. m& [& P0 X) \" G
只要对Label的两个属性进行修改。
7 Z4 p9 _6 K$ q$ N1 W 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!8 K; S& F8 A6 r' g3 X
第二个是WordWrap,将它设为True。
0 Z/ k: X5 R' ^3 u4 Y 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
& @0 ~; S' p8 o 这时的显示应以空格区分多个单词!! O& X- G3 b* c! C$ c9 ~
3.使Label控件上的文字纵向显示8 B9 B2 d, d2 C' p* X
最直接的方法是改变字体的旋转度和方向! r2 Y3 [. {4 C a3 Y- T
下面这些代码实现了旋转的功能:5 }- {1 ?+ I- W1 j; \5 R
void __fastcall TForm1::Button1Click(TObject *Sender)
9 @) h3 w+ |; y7 C. t/ h6 k9 K5 f0 ~+ q) P {
! W$ a# h) C' ~! E TFont *font;
! k8 ]( E6 }# E) Q m+ C( N8 K M/ b LOGFONT logfont;, D+ D4 D. ]/ T: n
font=new TFont;
3 F( E9 y- z5 P' b8 G font->Assign(Label1->Font);
5 V1 x% d; m! \* O% v GetObject(font->Handle,sizeof(LOGFONT),&logfont);
1 t" ~. Q- i# I5 q8 T logfont.lfEscapement=-900;9 a: _$ ]7 l6 w3 e! A. B
logfont.lfOrientation=-900;' M! t! @& v ]" s
font->Handle=CreateFontIndirect(&logfont);
6 Z0 E" h! a$ C. l0 {& l Label1->Font=font;+ Z/ x- R2 ?& \0 W
delete font;) V% ]2 _8 g" q/ |
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
: U6 @- X$ d) c }
+ }1 e! ~/ w0 m 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!. ^) i2 o2 J( ], l. w% B8 V6 v: X
将Alignment设为taCenter。
. k5 f5 O* r: f9 E % O" X" t% ^, G# D! B
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
8 G6 K, J( W! \9 x: I6 c Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
- Y2 U1 I& v6 I7 m7 O* _- C 识别出来,整体分拆,否则会出现乱码!6 V" @) M: J: Z9 L6 }
下面的代码实现了这个功能:3 ~3 X! m n* @" k! F5 M" P( K
void __fastcall TForm1::Button1Click(TObject *Sender)
7 E! x6 E" \- a4 O, | {9 C+ S2 ]* b# R, B& z O& ` G K
Label1->Caption=VString(Label1->Caption);
+ T; @$ {4 I* e% A, S }
+ J& g1 H- N/ x, J, { //--------------------------------------------------------------------------- e. |) R& S+ C" q& G( c
AnsiString __fastcall TForm1::VString(AnsiString ss)
) ], Z" y4 E/ Z/ } {7 V2 ]$ }, `% B0 ?
AnsiString ass;
$ i0 I' ]1 D( B! o9 C9 K2 r1 J int ii,ll;
8 H* C' g/ c+ r" f: F: y: ] unsigned char cc;8 B; S7 Q& \7 o5 ~% o0 T
ass="";
2 I0 ?# u; w5 |8 R" `+ T ll=ss.Length();
; j* j. h( `' w2 f, A" m for(ii=0;ii<ll;ii++)5 \. X& s2 e5 d0 b; |4 l9 ~' P
{/ }3 {. W6 Y% d- a# i
cc=ss.c_str()[ii];, C! w" S8 g: q5 S
if(cc>0xa0)9 Q9 R6 `" Y, {
{
8 ? ?7 C1 Y5 d1 B7 L9 z ass=ass+ss.SubString(ii+1,2)+"\n";; Q4 v# x6 w! l% P
ii++;
* N& t5 o: E8 w2 S* ` }; _# b# y8 b; T' g, x# g
else
) O' G: O1 w B4 R+ h { g7 c$ X/ Y' x7 v( M* a3 F4 z
ass=ass+ss.SubString(ii+1,1)+"\n";
' g" f( _3 p4 F9 {5 ^, m) r }
V$ P/ X5 y X$ O$ C* L } R' A1 j6 M& b$ J- j' w
return ass;
, G* e+ f) h9 |6 l }# h) j5 U6 |, r$ \' H+ d
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!5 @2 }, u) T6 B1 _# l
4.鼠标指向Label控件时改变说明文字的颜色. W, N* U, ?. N5 G
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成9 q( H [! l! A" Q U6 h' E) F& A
红色,其他的字体颜色变成黑色!
& {' r+ X) Z* c$ Z, B 下面的代码实现了这个功能:
" T* w, N; Z7 J! d void __fastcall TForm1::Test(TObject *Sender)" z ~) Y* m* [. F& y9 S% ], T2 h
{( O$ h6 K6 ]( u O+ j
int i;% {: V3 D( D& R) a* d' I1 g$ E }( E
TLabel *lb;% R4 P C" A9 a, K2 U. Z( r
AnsiString ss1,ss2;: V/ J% l9 A, j3 s5 X2 s1 t
ss1=Sender->ClassName();//获取参数的类型
# t6 O( v) f# F/ @ if(ss1!="TLabel")return;//如果不是标签不处理
$ s9 V. I$ }# g3 E' j lb=(TLabel*)Sender;
9 ]* W3 q9 [$ d9 ]% z$ s7 J- b ss1=lb->Name;- U# n0 z% V6 N; [% M2 H
for(i=0;i<ControlCount;i++)! E; y( J) X: a8 f" J) e$ x9 Y* N
{
5 p( D4 r: n H+ n lb=(TLabel *)Controls;
, c+ ]9 E( t5 \6 P9 d, Q1 A u ss2=lb->Name;5 s2 |, R2 s$ t, `3 H ~ |
if(ss1==ss2)
9 g: j1 E+ ?7 u, E lb->Font->Color=clRed;
" E3 R- J8 v8 B7 B else
4 x7 R8 X) J* t0 [! T9 S. _+ V lb->Font->Color=clBlack;; O T- p& c& ~9 B$ W
}4 g# V5 x J& j4 r! D7 F
}. _4 m* f! m# b, m& L) P
//---------------------------------------------------------------------------+ i1 b$ I3 {$ d$ J, ^$ A: F$ }
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,: W9 _$ y; q# H/ F! |# `. t2 P
int X, int Y)7 |" z8 u. v! W. }
{
1 j4 O h W+ R- P1 M, M Test(Sender);
$ A1 ~, }; V; b% O5 ?( j/ A4 }' M } |
zan
|