- 在线时间
- 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控件显示多行文本
$ E% C, u2 V* R* H! i7 W+ { 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
. @( w6 J/ h- _8 ? Y! D Label1->Caption="第一行\n第二行\n第三行";/ {* G+ m# h( H {: p# L
Label1->Caption="第一行\r第二行\r第三行";
3 ?3 U6 v- B/ W$ W: s" Z( ]3 ?8 j4 W Label1->Caption="第一行\r\n第二行\r\n第三行";
2 Z1 C' w/ k# C5 R) @% p7 ` 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
' n* A8 e% {4 G, i' k4 w/ c% k" b* s "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
* v& k$ @- a. ]2.Label控件显示超长文本时自动换行
- G: O! g. b9 }* X 只要对Label的两个属性进行修改。1 N0 ?; M, D- {# H( f' E
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!' b' X6 O' X) s
第二个是WordWrap,将它设为True。
: K. Y1 q& g" t+ A 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
! F, k+ N, [ X/ v" R' V4 K% k4 `/ s 这时的显示应以空格区分多个单词!
' \2 i' U6 V3 [ A3.使Label控件上的文字纵向显示
& f1 J! h* y4 L2 a- h 最直接的方法是改变字体的旋转度和方向!8 i$ X, Q" g) m- |
下面这些代码实现了旋转的功能:
0 o: t( F! V5 u void __fastcall TForm1::Button1Click(TObject *Sender)
; r/ y9 D7 L1 x( q# Y {9 K- O8 Z3 o$ }: x) \
TFont *font;
, K) V$ f% c/ c+ z0 u) J) z LOGFONT logfont;
5 W9 K8 Y* s- V! ^) C7 \ font=new TFont;
- |. I9 Z! q( N: S9 \( x+ I font->Assign(Label1->Font);
: |8 V( L$ e$ R Z4 a GetObject(font->Handle,sizeof(LOGFONT),&logfont);! ~! @5 L3 ~2 K: t0 ~& q0 [. n
logfont.lfEscapement=-900;( ^# t5 I/ E0 I G
logfont.lfOrientation=-900;; M0 K. W' ] k6 a6 a
font->Handle=CreateFontIndirect(&logfont);6 }# E+ a! I- D
Label1->Font=font;# z1 {. X! w+ T! i4 X2 y' h% T
delete font;
- `; u- m* t o7 V9 t! K+ z Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
: t) V o" w. Z }
: h) J( ^. a4 Q8 F$ J 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
|) p0 | V) H" P# L& ] 将Alignment设为taCenter。6 _" E/ f7 Y2 j6 X$ }* O9 S) q
: D2 M! b7 d* X7 ~- x" H2 d$ l9 L 还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
3 H% X4 q& h: T Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字5 D4 [( f' } {: z
识别出来,整体分拆,否则会出现乱码!0 e) r; h) \) p
下面的代码实现了这个功能:
: A+ h' m0 S+ D( V& z void __fastcall TForm1::Button1Click(TObject *Sender)% ?" {+ ?1 V- w" ?+ `# }' M
{4 @& l \' e7 H, ^* c0 C3 C9 C* Y( o4 G
Label1->Caption=VString(Label1->Caption);3 C% ]/ e8 ]& z1 N9 v1 h; {# x
}3 y: G* F: H( i6 [/ Z+ G
//---------------------------------------------------------------------------. Q* t l/ K( C9 @- I# D
AnsiString __fastcall TForm1::VString(AnsiString ss)& E. A' l! _1 e
{
7 V* u# c4 g- }0 v AnsiString ass;7 [5 s- }1 Z6 A7 l; x% j' M; v+ B
int ii,ll;
( U6 |, z W( C* r, O: I* t! _ unsigned char cc;
- N/ q C( H0 R7 [ ass="";
3 |+ Q/ x/ _" C& Z4 b/ _3 o ll=ss.Length();
# n5 o2 a/ `* T, \( o9 m! E9 G for(ii=0;ii<ll;ii++)
- t4 Q/ r8 j) y M( a: ]3 W S" Y {
* P0 E8 r$ I4 |7 r3 e k cc=ss.c_str()[ii];
; x4 H3 H- r( z- R5 s8 N$ X if(cc>0xa0)0 @5 V: B0 K. k( c5 m" d8 A& a
{
3 ]: W4 c, B4 [2 T( J, v ass=ass+ss.SubString(ii+1,2)+"\n";, y& @9 k* c f% K: m9 @* J& ?
ii++;2 T: \- G) |$ r6 O; V! M
}
+ [. D% J9 M' T1 V7 B. f" ^ else) A- K4 O" ?( H$ x8 D) S
{
% |* }( B8 M. \6 `/ g/ a ass=ass+ss.SubString(ii+1,1)+"\n";
8 P% _- [: l9 B* k& S }
$ @% I, D2 E* [1 l( B }4 Q; m; g$ \1 m6 c0 R6 Q2 F5 J
return ass;0 O2 j% |/ h( v6 H( T& e
}
& f* M% j. \9 a0 Z 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
5 }% E- ]1 }, _9 H t% m! c4.鼠标指向Label控件时改变说明文字的颜色& H0 }' B" g, X( e4 N+ F" `
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成+ c1 ~ ~: z' F6 I, j9 O+ t
红色,其他的字体颜色变成黑色!+ e3 M+ W4 z! T/ c Q
下面的代码实现了这个功能:
. D5 W, I* `1 w3 f# R1 s void __fastcall TForm1::Test(TObject *Sender)" j# C# a1 d; _- x, S0 q
{
) d7 _+ [& _' P* G8 z- a$ Z3 W int i;' i/ H# c5 j# w2 ]
TLabel *lb;& u# j* o+ T1 k
AnsiString ss1,ss2;2 b8 S% r: ?8 R$ W- @! C
ss1=Sender->ClassName();//获取参数的类型# z3 |% |* Z" G, r7 n0 A
if(ss1!="TLabel")return;//如果不是标签不处理9 L O+ `: ?( b% e7 A
lb=(TLabel*)Sender;
" v/ r. `1 t- i# I ss1=lb->Name;
2 [7 o" J l6 X2 L( z for(i=0;i<ControlCount;i++)7 z" N2 C3 J( n/ i! H! G
{2 [6 X H" s, `% s5 U0 R; r2 y
lb=(TLabel *)Controls;9 ^- s, K( a" P7 T% m/ P; O2 V
ss2=lb->Name;* F, Y, {3 k% e
if(ss1==ss2)
4 c* @7 N/ w \6 q, ?6 K0 {7 _, F lb->Font->Color=clRed;9 D$ ^9 p; d" k F0 T2 P
else9 p3 a/ Y: Y( l# A% a% v/ Z
lb->Font->Color=clBlack;% [3 R; z6 |# f
}
7 U" T* }. l* P! R2 H }
& G$ n( `+ s9 I' y+ E# P- t2 c) K. S //---------------------------------------------------------------------------
! P6 ^- T+ @& X: h6 w1 P0 E void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,8 n" |# f: w: t% j1 s" B
int X, int Y)$ ^' F8 l+ G4 O9 k$ K
{
% A1 q9 c9 `, i* n/ v1 ] Test(Sender);
# k) p5 D5 N- j9 A4 { } |
zan
|