- 在线时间
- 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 K. i1 g. i' y: B3 Q& I4 L. ^ n8 S9 n 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
) x7 _) O9 i& F) x$ z Label1->Caption="第一行\n第二行\n第三行";# V; I0 T; w+ s8 f
Label1->Caption="第一行\r第二行\r第三行";
5 H% o2 j/ G; [- H Q. V5 R$ Z4 | Label1->Caption="第一行\r\n第二行\r\n第三行";" Y: y$ q, o7 x6 u; {' [
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入" |% z3 R, ?( b* @3 |
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
" S1 m# H- \' j# W# l2.Label控件显示超长文本时自动换行3 n5 L: l) r4 D
只要对Label的两个属性进行修改。+ [1 X! l$ r9 Q+ a5 e6 {. M
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
6 V7 v! q0 R1 G6 z2 I% d- q( i 第二个是WordWrap,将它设为True。; W3 y1 `; x. ?0 w g2 t& p1 r# ^
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
) _* {7 |, p9 F1 P" i$ c# h9 N% w 这时的显示应以空格区分多个单词!
6 I) Q5 B- u- z+ e0 ?4 c" T3.使Label控件上的文字纵向显示: l. x' ~% |# c& m3 f4 ^
最直接的方法是改变字体的旋转度和方向!8 u: u' L* ^5 y
下面这些代码实现了旋转的功能:' ~! h5 u% [3 A7 N7 ~
void __fastcall TForm1::Button1Click(TObject *Sender)) I1 \+ G7 T; L$ \6 l
{
( U6 s3 A! O. v- \ TFont *font;
5 ~& V _* \+ J4 L4 N. ^9 q' } LOGFONT logfont;
3 P! o. Q* n5 P7 G- A0 f% @ font=new TFont;
t( R+ V7 n' R* z* {: W, ^3 W font->Assign(Label1->Font);
. y0 i( U) b* H* X GetObject(font->Handle,sizeof(LOGFONT),&logfont);
1 _# H7 V: S! V5 O$ T logfont.lfEscapement=-900;
: W0 s! |3 T. Z+ S1 B9 S logfont.lfOrientation=-900;
$ x" U; A. F+ Y6 a# F- Q+ e font->Handle=CreateFontIndirect(&logfont);
9 O1 B" L( d/ ?' q& {/ g; X7 P/ m, z Label1->Font=font;
( @* T2 z2 ]5 ~' r, |& `" N delete font;
* |2 C5 `2 Q$ f7 r2 G0 f h& z+ |- O2 l Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";$ b2 R$ d8 Q/ ~
}* _" ~3 Q# ~+ m. P
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!% X* P1 u: a7 }0 J/ v
将Alignment设为taCenter。! g" B1 U% D4 W* l! |9 d' S
# N6 K: U7 B/ j7 d0 C
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的5 ?5 h+ a) [; a$ B
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
/ T p9 n3 G' b! V4 s; W 识别出来,整体分拆,否则会出现乱码!
# E3 V' r' |3 P 下面的代码实现了这个功能:1 i9 D" b9 m9 N5 Z
void __fastcall TForm1::Button1Click(TObject *Sender)% m- F: B+ x5 U/ H3 q4 Q
{
* f$ [9 g% c2 z Label1->Caption=VString(Label1->Caption);
4 }8 Z$ u: R7 O+ O/ M }
2 p/ K1 l; v. x, K# K4 V //---------------------------------------------------------------------------* r( J3 `9 M; J1 C
AnsiString __fastcall TForm1::VString(AnsiString ss)- ^( H2 h! @7 |
{
/ ?7 i- y! \- R+ V+ C8 } AnsiString ass;
) p. m8 c" f- l X8 x* u6 t int ii,ll;
* x: b. k. m+ F I, _' K3 i# \ unsigned char cc;1 o0 F& n6 G" n* C3 ^; X' U. e' o/ i
ass="";
9 i+ H8 P4 p6 e' J ll=ss.Length();. e. C8 {5 X# G& {; G
for(ii=0;ii<ll;ii++)1 }; h0 l, m, o- C5 @! ]% O& g% g
{& Z( i/ }/ u1 K+ P0 G; @
cc=ss.c_str()[ii];0 w% X2 K: e- ?+ n1 k
if(cc>0xa0)5 F1 `) D0 O9 M! }
{
* u) C7 p h, G4 m! s2 c0 X5 ? ass=ass+ss.SubString(ii+1,2)+"\n";
( J8 b% g6 b! ?6 u ii++;8 C# }0 m1 J6 k6 f
}
& m- p( l3 W0 Y2 X else* v1 [* n9 A& E) Q- w
{: A$ j6 S$ m8 x# r" o' H& j
ass=ass+ss.SubString(ii+1,1)+"\n";
# b A$ A) e% K( x }
7 `. Z4 O; d, u# a; g0 A0 m; R }
, R4 H/ E& Q$ y, t Y" K6 s0 u return ass;/ X3 O9 Y1 h9 z# {) u( Q+ b
}
. S0 x n3 y# ]: I# D5 K# X; P 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!9 x; K! V6 l" {9 T' @; d
4.鼠标指向Label控件时改变说明文字的颜色
; |; i. h) Q# T 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
3 Q! H6 I& {4 @! B 红色,其他的字体颜色变成黑色!/ h9 ]; _2 G0 Q. t6 K: O5 H
下面的代码实现了这个功能:
5 X( S# S, \, X+ Y- M* Q- a+ r void __fastcall TForm1::Test(TObject *Sender)
W: K" `: H% l$ i" F, ^3 ?' x7 E {& Z/ ^1 \7 K9 p: J% w2 N7 e
int i;& |3 y, l7 M- |/ U- y
TLabel *lb;$ d) F4 t' W# E2 }! F& Y
AnsiString ss1,ss2;
3 `4 Y6 ^9 Z; B ss1=Sender->ClassName();//获取参数的类型1 d4 S* l2 ~; A* M% J
if(ss1!="TLabel")return;//如果不是标签不处理: F; ]- x7 n8 w6 a0 i
lb=(TLabel*)Sender;4 G' r# ?! U0 ]& ]6 _. x
ss1=lb->Name;
% L1 L/ V. \9 D for(i=0;i<ControlCount;i++)
* ?# p3 ]0 k! V; d- n {$ |% z/ K3 _2 T: s
lb=(TLabel *)Controls;6 `0 L1 a6 Y" V0 `
ss2=lb->Name;, p8 r) O9 j: j) Q4 B# z+ t
if(ss1==ss2)
6 h5 C. G& Q9 H% s3 l lb->Font->Color=clRed;9 t' ~, W' p8 `
else
; O3 n% r8 D) i3 X" [* \9 ?( ` lb->Font->Color=clBlack;
- s3 t: b9 J# Z$ ^* { }
9 _; q8 \4 ]1 c2 j+ b b5 C2 D }6 v* ~+ W! g* k- z; ?
//---------------------------------------------------------------------------( l/ H- m9 f7 x/ Z& K: s
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,& Z( I X1 s, m0 n
int X, int Y)
7 G' r# [/ I" \! F% B! T {
1 `% ]$ g4 @9 ?3 H2 R Test(Sender);
' M }7 J3 s O' Y: T6 u. ?0 E } |
zan
|