- 在线时间
- 1957 小时
- 最后登录
- 2024-6-29
- 注册时间
- 2004-4-26
- 听众数
- 49
- 收听数
- 0
- 能力
- 60 分
- 体力
- 40960 点
- 威望
- 6 点
- 阅读权限
- 255
- 积分
- 23863
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 20501
- 主题
- 18182
- 精华
- 5
- 分享
- 0
- 好友
- 140
TA的每日心情 | 奋斗 2024-6-23 05:14 |
|---|
签到天数: 1043 天 [LV.10]以坛为家III
 群组: 万里江山 群组: sas讨论小组 群组: 长盛证券理财有限公司 群组: C 语言讨论组 群组: Matlab讨论组 |
1.Label控件显示多行文本
* {' p+ a5 |) h1 y3 i0 S3 U, K 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:% O" v$ g9 ~% D) f6 ~
Label1->Caption="第一行\n第二行\n第三行";" y$ V$ o; f! _9 P/ t
Label1->Caption="第一行\r第二行\r第三行";( U: f8 w2 Q$ Y8 C; H
Label1->Caption="第一行\r\n第二行\r\n第三行";
q1 @ o: _# f4 F 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
0 M, s: G! q. U% k! s "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
9 C$ A: C$ U5 u2.Label控件显示超长文本时自动换行
( u# W3 E) v; p1 S 只要对Label的两个属性进行修改。
& x1 o( F% p. x. D& e0 Z" Q 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!& x7 F/ z, l; j5 r" [: l+ t& H
第二个是WordWrap,将它设为True。8 W8 u' f: o$ |8 G
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,% @6 \6 p% ^7 [7 P( `0 ]
这时的显示应以空格区分多个单词!
. P- l8 b; W' g3 U3.使Label控件上的文字纵向显示
2 O5 h1 J4 _) ^" k. y 最直接的方法是改变字体的旋转度和方向!
0 B7 Q! C- S5 Y; M 下面这些代码实现了旋转的功能:' }* K: u% L: t- L
void __fastcall TForm1::Button1Click(TObject *Sender)& _1 \& Z* Y% ~4 W1 d
{, j3 [( u2 f5 T; G4 {+ z
TFont *font;. y, b# I0 R* y
LOGFONT logfont;
; e$ j- v( T, O: C' c" F( H) w$ w" v font=new TFont;
1 j- @3 l6 v; D. B. j font->Assign(Label1->Font);3 c! }: K& l) W& }5 X
GetObject(font->Handle,sizeof(LOGFONT),&logfont);. \0 Y. Z. x4 O% m0 `" O
logfont.lfEscapement=-900;
3 u, l) p7 h T3 y" }2 } logfont.lfOrientation=-900;2 T# S. s& I+ {- f9 Y( ]
font->Handle=CreateFontIndirect(&logfont);2 _" }# n3 J G! ^4 \' ^
Label1->Font=font;
" C5 t3 e. c) _/ V+ Q4 S% c5 ] delete font;0 O6 T. C6 E( G5 W. j6 q0 j! w( @/ I
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
! _" |9 N: E3 v+ r4 L }: O5 N. q0 |! Y$ k6 C+ s
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
* o& m5 u+ C) A) N! M 将Alignment设为taCenter。0 N {& w% U G- d% n) u
. Z0 u3 [5 [# Y* r9 Y6 A. ?& l/ L
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
) Q1 {4 R7 r1 e# ~& D0 O, A1 c Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字- k5 T4 q+ E' a- q: ]) [, I; e
识别出来,整体分拆,否则会出现乱码!8 H; y( ]' [. A4 u1 Y
下面的代码实现了这个功能:/ O x( v9 r, j. `/ R. M/ j* r7 z
void __fastcall TForm1::Button1Click(TObject *Sender); P1 L' ?* f0 z/ c
{* R5 J* s( V9 T0 E f
Label1->Caption=VString(Label1->Caption);) b6 L# T) ~* C
}7 y% X- Z I* X @- G: I; V
//---------------------------------------------------------------------------3 N D f0 }! e7 Q7 E
AnsiString __fastcall TForm1::VString(AnsiString ss)
% K; t: t! e* Q8 x! s+ t4 S {
1 Q" B+ T7 [. p& S, K& e4 l AnsiString ass;4 l% A4 U2 M, f2 ~: H
int ii,ll;
% q# u+ o& i. B1 E unsigned char cc;4 h/ e/ X9 P7 a) W! d8 c: E1 V
ass="";
" ]' H7 W5 D" m; s' `# f ll=ss.Length();) O8 Y. w8 `7 D9 L7 v! g7 y+ M, z
for(ii=0;ii<ll;ii++)
* U5 Y( j' }; u+ x) U* F {
& N1 Z* q0 A$ m cc=ss.c_str()[ii];" P. c7 }1 U) G) s( w9 I
if(cc>0xa0)7 { E6 [# Z% z: D7 F$ k
{
, K" k9 W1 p9 [3 D9 P ass=ass+ss.SubString(ii+1,2)+"\n";
. {# E0 I. P1 a ii++;. y5 B! u& T9 q% _3 W& _, l2 @
}: }% V5 l! \' ?% O5 A; B
else" ^9 H$ F7 Z; [5 u1 e
{
. B& i4 s+ K* G) g9 e5 {8 r6 @ ass=ass+ss.SubString(ii+1,1)+"\n";
! m9 p. x4 X0 j, |9 b3 c U }
0 J5 j7 z/ V, ?( m2 ^) `2 M }5 `8 h* P( m* Q6 K) r5 ^
return ass;
; x' r# j* o9 M. w7 _, N- v }# [* @- H% r. r, q
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!, o+ C6 t" E# x9 X" X. r# X
4.鼠标指向Label控件时改变说明文字的颜色
, |- c7 q8 P- }0 V1 C, j 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成9 k" S, @+ R* e8 p- e; F) p
红色,其他的字体颜色变成黑色!- Z( f" O D" c2 c3 @8 H3 {6 Q
下面的代码实现了这个功能:; Y# {5 Z1 T! w9 X/ y
void __fastcall TForm1::Test(TObject *Sender)+ \1 x% M4 [; H4 f
{
# Y$ ~, B, s2 G* Z l, J" w( u* Q int i;
/ s0 e# H; a2 ?/ u: ? TLabel *lb;
y/ H" [1 U+ r N- ]" Z9 F4 k8 A AnsiString ss1,ss2;
5 [. v3 i/ {; Y# O Y1 }3 e ss1=Sender->ClassName();//获取参数的类型. n+ j6 q1 J+ V% O# m7 _, e
if(ss1!="TLabel")return;//如果不是标签不处理/ x( L: \* h4 _; p& n+ X1 v
lb=(TLabel*)Sender;* p0 ]# `: O5 E. J; j
ss1=lb->Name;- t$ L @/ U) N! B
for(i=0;i<ControlCount;i++)
6 {) @) c4 p: F6 r" A$ b' w W1 p {$ l: u2 L0 `; W! e+ q, | X
lb=(TLabel *)Controls;
2 O8 m9 S9 p' n% ?. H& t$ v ss2=lb->Name;% _' [: }* V+ u* p V
if(ss1==ss2)
3 A4 |! F" K& |7 u5 n7 J) q lb->Font->Color=clRed;
* |* F: S- Q" k8 i. P- h else/ [* K: z- @' I" X9 f: v' n
lb->Font->Color=clBlack;
5 U! l4 c1 l w2 D. F6 ~6 U }
9 e4 G. V W0 M } a& t" a E& M4 c$ t6 D
//---------------------------------------------------------------------------
8 A/ T, p; Z) T3 T void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,0 K* [) g# s: G5 Y4 A1 D0 H
int X, int Y)0 l0 o9 ^# h6 I0 O
{* U$ C. n+ |* O9 e& z
Test(Sender);4 B# ?7 P. d# b }
} |
zan
|