- 在线时间
- 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控件显示多行文本- G1 U7 W" C* ~' F7 w
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:4 G6 i- V- Z+ y, w. e
Label1->Caption="第一行\n第二行\n第三行";
1 Y" y$ t7 ]- a$ u* H7 V Label1->Caption="第一行\r第二行\r第三行";3 a% @) h9 q7 }9 U
Label1->Caption="第一行\r\n第二行\r\n第三行";
! e" W7 K0 j3 z- T+ S2 x 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
5 Q. ^6 e1 k. Q8 [2 D) P3 `1 E "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
$ N. q4 A, o ~' K2.Label控件显示超长文本时自动换行+ Y% @, b* B3 E$ u
只要对Label的两个属性进行修改。/ I4 \. o4 a9 Y0 V/ Z
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!2 j" X% k) ~. x; U# K
第二个是WordWrap,将它设为True。9 r$ G- j" }3 i, m/ ]
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
! l1 u1 w3 {4 Z/ e+ }' o2 ^. J 这时的显示应以空格区分多个单词!) S0 V* n) o* U8 }* l: z6 D
3.使Label控件上的文字纵向显示0 n4 g: v) L0 {/ j3 e
最直接的方法是改变字体的旋转度和方向!; a* ]1 _' ?3 J+ \- n8 N W: [7 Q
下面这些代码实现了旋转的功能:
$ g' E! F" [+ ~/ Z( ^: y" A Z* G void __fastcall TForm1::Button1Click(TObject *Sender)
/ b' l; A5 K5 K. e# k6 f$ F {
5 M3 U) D& w5 [# g. W. l0 m, [ TFont *font;$ [$ l1 b v) f% @
LOGFONT logfont;
- R' s) ?) L7 Y font=new TFont; {! r2 m2 @6 p6 j! e$ \
font->Assign(Label1->Font);
7 \& O$ g$ j& }3 G) P9 V% V7 U; i GetObject(font->Handle,sizeof(LOGFONT),&logfont);
7 p; P$ \* Y0 x logfont.lfEscapement=-900;
u' _7 g& c! n0 b) ~ logfont.lfOrientation=-900;
, s* R- X; e) G, I+ q2 g3 T font->Handle=CreateFontIndirect(&logfont);5 ]0 _8 o4 A' p7 n
Label1->Font=font;0 t$ G& i$ W( R1 s0 \0 r
delete font;
( j" q6 ]& h$ v2 Y8 |: z) F Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";/ F. z& `, l; ^3 u' ~ v( o
}) G5 Y& i! M( W9 I$ s! _' g! S
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
# m3 O4 Z1 Y& h6 P 将Alignment设为taCenter。- d; P9 O( W. |& V
( e/ S; Q3 d+ J, `3 i% H 还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
8 Z/ j4 j4 @4 p6 r% D* e+ s Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字5 {1 i( D& T8 G, u g
识别出来,整体分拆,否则会出现乱码!
6 ]: x# Y# E$ C! C& e3 Y0 J/ o 下面的代码实现了这个功能:% A( W& k7 {4 ^: I3 D( j. S
void __fastcall TForm1::Button1Click(TObject *Sender); [+ ]* b0 D$ B( R N# v
{
_& z% D% m& K Label1->Caption=VString(Label1->Caption);
' C) z/ g1 B+ ^5 U4 q0 F) a i p }
9 M# q' K) d! y- s1 s9 ` //---------------------------------------------------------------------------& X: S5 S& H$ s
AnsiString __fastcall TForm1::VString(AnsiString ss)
% ]- f1 v* I5 T C) c {
' k/ }% p$ x( @' X. }) m AnsiString ass;
9 f: \$ V+ r0 a8 G int ii,ll;
) [0 ]' P* V: w; T* B2 T unsigned char cc;; I2 k4 ~( R* y+ O% h. j+ f) r
ass="";
" t+ y! Y% s( p' {/ y' r ll=ss.Length();
- B/ J9 E- N2 S' R* v1 n" u5 s. g for(ii=0;ii<ll;ii++)
0 t3 w! `5 o5 Q$ v8 P {
7 y/ r& u2 n4 U* y2 |2 T cc=ss.c_str()[ii];5 V, [* S# W+ K) V) Q
if(cc>0xa0)
% y% m, U- s, Z& Q: x {0 U! V3 J! M4 K* m: i) A: L
ass=ass+ss.SubString(ii+1,2)+"\n";4 \# |) b' w8 [$ a1 i0 ]/ j. [7 {, Q* K
ii++;
3 _! q* S. g7 i2 L$ |/ r }
, t8 y2 n/ W1 \5 w' y else
5 w0 g' J! i% u3 y {
3 C: F/ @& s/ @2 n1 h7 Z ass=ass+ss.SubString(ii+1,1)+"\n";
5 q( r A5 P: A5 n4 ^ }! I. L& z, k d1 d* i# i: ]7 N( M* }
}6 _& \' P& {5 [& M) ~7 m
return ass;, r* [! c& V. X$ {
}
. [: M, ?0 x- ~: z" m* } 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
h5 N: W. W5 v9 v! R4.鼠标指向Label控件时改变说明文字的颜色
$ N2 t! }( X, G 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成5 V' u/ D1 L) w' D5 z, \+ w
红色,其他的字体颜色变成黑色!, C7 X" A0 V i8 d7 Z8 g
下面的代码实现了这个功能:, Q5 u: |, K$ e$ k, k; i8 z
void __fastcall TForm1::Test(TObject *Sender)0 s B; o* k5 w, \
{ d6 v8 H) V; F2 Y. V
int i;
3 @; M* r+ w0 W. V' ?3 V7 D; G% B TLabel *lb;5 Z6 N( |% t; l. y! q8 N+ }
AnsiString ss1,ss2;1 G5 o& S# c; U+ G2 J- `: Y* E
ss1=Sender->ClassName();//获取参数的类型( e( u0 l% E) A! K
if(ss1!="TLabel")return;//如果不是标签不处理4 Y: L8 L7 Z4 Q* v' S3 a
lb=(TLabel*)Sender;
j4 N$ A, u" g2 O5 b ss1=lb->Name;
; Y. f! S/ l( G: K& P0 r for(i=0;i<ControlCount;i++)
]) I5 X1 N- O: S# P4 O {
* ]3 s" I0 x1 L$ ?3 F& m1 ^ lb=(TLabel *)Controls;
# f3 ?5 H A- R+ V ss2=lb->Name;8 k1 Y8 N+ d, g9 B9 P' b. W# m
if(ss1==ss2)* ^: ]5 O% j, C8 v" h# e
lb->Font->Color=clRed;7 n& ?% b7 z0 {+ \% h
else
" c1 l6 u' F/ ] lb->Font->Color=clBlack;
4 |1 U6 B! S) X5 J, m0 Y3 ~' Q }
" k0 Z# p" }0 p* Q# e: k/ K0 f$ B% H }6 N9 ~" J/ ^6 n* t) N. T! \
//---------------------------------------------------------------------------% i$ g9 L" z& l) M3 i* B( k2 J
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,, u0 Z# j" E" }* ]' M3 N e3 g
int X, int Y)% @( D. @5 Y( `% b" w1 l6 F
{+ n8 Z; ?1 y; a
Test(Sender);
: x3 F( u# c, n } |
zan
|