- 在线时间
- 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控件显示多行文本: F9 ^9 X& p& R; W" Y L
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:0 P, n3 b# p$ u N
Label1->Caption="第一行\n第二行\n第三行";9 i3 Q4 y% U; P7 B
Label1->Caption="第一行\r第二行\r第三行";; X" a R" {& g9 J
Label1->Caption="第一行\r\n第二行\r\n第三行"; Z% H( C8 O0 b6 E ^) H
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入& O2 @$ M! e& e* l) D' I9 A
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!4 R; t0 c2 e4 F+ V
2.Label控件显示超长文本时自动换行5 l, w. f" N% d' R! c2 F) [
只要对Label的两个属性进行修改。% T9 z. _1 v& g. K, \
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
u+ n$ t. l# m5 U: |! F 第二个是WordWrap,将它设为True。; O+ R7 C, {" }9 _
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,; }* F1 i( o: [% X# F, d2 B) \: w
这时的显示应以空格区分多个单词!
( [1 o% e+ p+ ]3.使Label控件上的文字纵向显示
6 L! d' L, |; J; P 最直接的方法是改变字体的旋转度和方向!: ]7 D7 J/ I& }1 m0 k
下面这些代码实现了旋转的功能:
" q; F' W) R' l% ^9 t void __fastcall TForm1::Button1Click(TObject *Sender)5 k8 b' h$ N" ^2 {* l
{- W- P5 q x* j2 ]4 ?
TFont *font;1 }4 k4 ] S* A1 T" i0 g
LOGFONT logfont;
# j' q3 N/ @) k5 F+ L font=new TFont;
7 O3 l+ d. L8 T font->Assign(Label1->Font); J* u7 r% R9 _+ o1 }4 S
GetObject(font->Handle,sizeof(LOGFONT),&logfont);0 ]) f. v5 T7 H0 J) b% U" B( {
logfont.lfEscapement=-900;
- @' |3 B7 e: u, o* X+ Q: s2 @ logfont.lfOrientation=-900;* y* m0 ]& U- t Z: n; k
font->Handle=CreateFontIndirect(&logfont);
6 Q% i+ S3 Q: O Label1->Font=font;5 D5 L. T- I- S8 @
delete font;
) O/ b3 l& a& _( B8 N- S Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";& r$ x( U# b8 z
}
: q1 e- T7 F' C L4 p8 g! } 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
/ B/ f- H$ w3 U+ j& A+ J& X- G 将Alignment设为taCenter。, d4 [+ C- W1 r/ z( Z" P
- ?- K! V! D' R9 |/ V 还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
! @7 p3 T, b: Q Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字0 F5 B7 [5 Z/ ` T: m! z. i( P* W& g
识别出来,整体分拆,否则会出现乱码!
1 y H& b% t) `9 F 下面的代码实现了这个功能:
, z/ Z/ r+ B3 M Y* e void __fastcall TForm1::Button1Click(TObject *Sender)
, D& M3 Q* O6 j {
1 L! {; B! s) I% x' z Label1->Caption=VString(Label1->Caption);
+ @; T+ o6 Y/ O+ B }
0 c2 h$ a+ R! l/ R. j //---------------------------------------------------------------------------. A1 U/ F) Y& l. J' K1 I
AnsiString __fastcall TForm1::VString(AnsiString ss)2 Y' M% U4 |1 B
{
. y6 E) L! r4 A% L; B: ~ AnsiString ass;
; c# l+ F \- U8 ^9 K) O9 ^ int ii,ll;$ P. b7 V( g. b5 p% h# X% @8 }3 M. l
unsigned char cc;
( x' l" z+ ?1 ^# d. o# H9 r2 r5 Y ass="";
3 {5 _# p" S2 u; w7 J ll=ss.Length();" D4 G. ~( W4 }7 k$ |) R
for(ii=0;ii<ll;ii++)3 m0 W! |4 T1 w# h
{# Y$ g5 C' t3 z* {/ @8 G6 h
cc=ss.c_str()[ii];! c' F0 i! v" E+ C+ B* V
if(cc>0xa0)
# H* W" ~. E$ \* K% q% A5 h {4 F9 C. Z" }& j$ P. {! k- q
ass=ass+ss.SubString(ii+1,2)+"\n";, P; t! v5 ?6 H6 h1 k
ii++;
a( U2 m8 g- D: ^ }
9 Q4 t7 v& ?! u1 \0 M' G( B5 B3 O8 `* } else
$ I6 C% ]7 h) J$ D1 u" d {
3 N+ Q1 r% K7 G7 e8 s" g% f ass=ass+ss.SubString(ii+1,1)+"\n";
4 [% I* @ o: `6 j0 i3 Z7 ] }! Q% K f( k" X1 ~& r1 q
}% ^5 z( q: K: }( Y. d
return ass;* b0 w0 |6 p h" n- Z: r
}% ~& G3 P) D( Z, H3 [
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!# `. f* i$ S# J C
4.鼠标指向Label控件时改变说明文字的颜色
, Z5 E$ e3 z4 Z7 e3 a: G1 S 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
+ O6 \9 S1 x7 b* Y6 ~3 U5 k 红色,其他的字体颜色变成黑色!
7 X2 v3 `% j- R U6 U 下面的代码实现了这个功能:
5 v: i+ k6 f2 v7 t9 X2 E void __fastcall TForm1::Test(TObject *Sender)1 ~; s# S2 `% f
{: e! f0 {! m7 E* N8 A
int i;
8 F8 z( U! ]* A# M$ N! q6 s TLabel *lb;" |, X1 p5 Q y7 C2 R
AnsiString ss1,ss2;
/ }3 V- O% d) i! v$ ]+ f ss1=Sender->ClassName();//获取参数的类型4 _1 ~3 S+ o5 b
if(ss1!="TLabel")return;//如果不是标签不处理: P1 r' _' W% o$ O/ H
lb=(TLabel*)Sender;/ F- L3 w$ A& F" t- I; G
ss1=lb->Name;/ V( w$ j" W0 E- U' n( V2 Y
for(i=0;i<ControlCount;i++)
7 ?5 h: E/ ?; s4 M {& |9 Z. D! C! P% r" t& C$ c% S% T
lb=(TLabel *)Controls;& Z2 F4 ]/ ~8 L' [2 c* N
ss2=lb->Name;" ^, o# A3 u( _& @. m
if(ss1==ss2)
: l+ u3 k* _5 ?% g lb->Font->Color=clRed;; m' L, M' X! q
else
5 m A" x1 S, X* w; n \ lb->Font->Color=clBlack;
1 t9 I4 u2 e) K7 A( | }
9 K" P/ z* A/ A+ s* d" W( v }
* X$ }6 G; b: k: n //---------------------------------------------------------------------------
5 R) b& X' x) A* r" a9 T, _ void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,4 Z( @3 z. _! h( D
int X, int Y)6 C% x9 E0 x$ G$ ], }
{
& y3 _6 U. e" }4 N0 b Test(Sender); h" M4 j7 i& s7 l9 y- L' i
} |
zan
|