- 在线时间
- 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控件显示多行文本
T' j# U8 ^ t; Y 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
% P6 |; l4 C# @& o- f; Q/ G Label1->Caption="第一行\n第二行\n第三行";
& {" g& E3 d% ` x Label1->Caption="第一行\r第二行\r第三行";
/ [. Z! v9 x* i7 ~" l7 ` Label1->Caption="第一行\r\n第二行\r\n第三行";
& s& }% m( Y: n4 J 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
+ y6 W% Z1 r) {; K3 i. K9 n- T "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!/ Q/ f) n) g# ~
2.Label控件显示超长文本时自动换行' Q+ X$ r' P& M3 j. y5 q: J& H
只要对Label的两个属性进行修改。* b# L! y; X1 \6 j$ b& O( J
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
! |7 s% ^4 q4 y; @ 第二个是WordWrap,将它设为True。( u- e, w2 ^$ m
注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,9 Q3 ?# U7 j2 ~6 a% u$ I
这时的显示应以空格区分多个单词!, M8 {, k- K- w" r% |2 A
3.使Label控件上的文字纵向显示
2 ^9 {5 ?0 c1 d1 H/ u/ ^- h6 b 最直接的方法是改变字体的旋转度和方向!* _6 U: R8 d3 o
下面这些代码实现了旋转的功能:) E# H5 u: [8 k B9 Q
void __fastcall TForm1::Button1Click(TObject *Sender)
5 Z8 h; y4 r+ W6 X {5 [3 F3 d* {) o8 z( n$ m
TFont *font;
; D5 O5 i$ c A2 f' u$ A% z LOGFONT logfont;
0 T- k( ~+ j; q font=new TFont;
. e: y+ y$ I& [8 X+ j* E( D9 M font->Assign(Label1->Font);5 F3 V# y O" s4 U$ I, ^5 T3 m) z' e
GetObject(font->Handle,sizeof(LOGFONT),&logfont);+ J1 a4 m! W, v) H5 T
logfont.lfEscapement=-900;
0 V9 f& G! g7 a/ L) O8 k0 D7 k logfont.lfOrientation=-900;7 i0 I- u5 i8 _7 Z. U
font->Handle=CreateFontIndirect(&logfont);
5 O: [# ?4 E1 D2 Y5 U: e Label1->Font=font;
' B8 Y: |& X l' b2 | delete font;
1 w+ U/ V4 b+ B& Z Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
2 Q/ y! M6 ?2 u* V% @2 Q }0 ~7 z% B4 v5 M' @% e
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ @9 L+ G, C% t% T5 H# w6 w
将Alignment设为taCenter。
2 s( O* \, X9 D0 O* b 9 X0 e: K3 [ ` r0 s2 X
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的3 q% \0 x3 o, h8 h% e i( R
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字; D3 e6 a' O) B: ^8 `5 i4 S
识别出来,整体分拆,否则会出现乱码!
. Y( R' Z3 I& m/ o0 v 下面的代码实现了这个功能:
; u) z6 C: J3 u$ D void __fastcall TForm1::Button1Click(TObject *Sender)* t+ v0 ]2 C" s2 H0 I y
{
5 W- p7 h0 {* j9 [+ i' ^& E Label1->Caption=VString(Label1->Caption);
+ S& y2 X2 [+ o& Z. c) H* f6 J }, ?! `4 c5 Z" `$ G
//---------------------------------------------------------------------------0 }% U) N9 I* q& g! D! j0 c. h
AnsiString __fastcall TForm1::VString(AnsiString ss)* N; b% j Q2 g8 B9 ]3 F$ v, w/ ]
{
- \* Y; L) d0 c; r" M8 R AnsiString ass;
8 \8 w! ?5 O# M( w9 ~# [1 I. \- Y int ii,ll;% J _0 e: u; ] \; s9 S
unsigned char cc;+ M4 X5 r2 T5 a! x2 U) A
ass="";+ D. \6 I* ^( L! \( X
ll=ss.Length();) x' D2 ~4 {0 E
for(ii=0;ii<ll;ii++)
4 H/ o+ W: B0 [1 O9 j! } {
' @: G! S+ I& [7 \. R( z cc=ss.c_str()[ii];
* @, G8 T+ }0 O3 b- F* D4 d' F if(cc>0xa0)
; n6 K) D" d7 e$ }' G {
1 j8 D4 f& p0 i ass=ass+ss.SubString(ii+1,2)+"\n";
1 b$ ]* _7 Q, i! I ii++;
" _0 Y; F4 y; E0 e( n }8 C) u S7 q5 B Z" E4 R1 ~8 x6 x5 ?+ |
else% d/ ]8 K. O: h# g d
{( [7 \6 ^9 q0 b3 `+ }* {
ass=ass+ss.SubString(ii+1,1)+"\n";! a+ \. b, q, k1 h) ]' a
}
# B; w% O7 L4 C4 \. z/ S0 J, G: d }2 d. T8 D2 }! Q$ w
return ass; Z$ ~4 n8 w) U. z: A+ i3 Z
}: W B8 |) L- R* X
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!: V# [* W2 A" a0 a P
4.鼠标指向Label控件时改变说明文字的颜色
: H4 ?: h$ ?3 Y9 a A7 l 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
7 x8 t4 _9 S$ p. U: o1 l; `) E 红色,其他的字体颜色变成黑色!+ H1 s5 T3 q; W$ W8 Z4 p
下面的代码实现了这个功能:
2 Z! U$ D) H _! H, I8 o void __fastcall TForm1::Test(TObject *Sender)
' q' w' E* e' D! p# |2 O8 ~" |- D" i {- h7 ]4 X" h; X \- T: u. Y/ ^) k; e
int i;3 [: n2 z; G% n: Q
TLabel *lb;6 m# z8 R8 `$ o8 K6 V. m
AnsiString ss1,ss2; r) K( ?! ~& y4 v
ss1=Sender->ClassName();//获取参数的类型6 c1 K" H6 E1 ~) g7 D0 `
if(ss1!="TLabel")return;//如果不是标签不处理
0 B# T3 v; l. Q. D lb=(TLabel*)Sender;
: ^1 L* Y+ H: G; b+ N* A v) w; w7 C ss1=lb->Name;
+ S1 V. a* I! S; f* Z! l G- J; l* ^" j for(i=0;i<ControlCount;i++)
; j) Y z" W& O' k {3 _: Y+ w5 I/ K
lb=(TLabel *)Controls;
S' }' ^5 D' X; @ ss2=lb->Name;* `2 q8 O5 t3 h) x. N# k2 |
if(ss1==ss2)" w# t9 d2 y* e. n- i" T& w$ g. W- l
lb->Font->Color=clRed;
& Z. H' x5 r S$ ]* _" P' n else7 b8 @2 U W6 P# e
lb->Font->Color=clBlack; R8 z+ F" A9 p4 ~8 m
}: R% y% O- k+ D( s4 [. S! m8 Y, f
}
! x. }/ P) k( V m, v: W //---------------------------------------------------------------------------: C$ I' Z5 t$ O: H$ y: }, J
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
6 [4 g" S# W9 _' ^) G int X, int Y)
6 B( h" k3 B; K0 E {! n6 r$ c; V2 b9 `6 v5 [" a
Test(Sender);3 [1 Z$ A7 x- Y/ ^0 \5 S) U
} |
zan
|