- 在线时间
- 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控件显示多行文本
7 Q7 J. }; {5 q 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:' g# Y* k. o& L1 \5 G, |1 `- K2 X
Label1->Caption="第一行\n第二行\n第三行";( c) H, N8 q' i. I s
Label1->Caption="第一行\r第二行\r第三行";& V' \7 d0 N# A& ~. Z
Label1->Caption="第一行\r\n第二行\r\n第三行";
C8 n' H: ~) z7 W4 V 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入 G6 M. n" ^! C$ w/ q6 d1 C
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
6 u( C: _. f3 W# j2.Label控件显示超长文本时自动换行# t- x! u. y# Y+ Z/ h
只要对Label的两个属性进行修改。
4 x+ }" i( h, f' h 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
! P3 G& I- v: K1 R# b& f1 i i 第二个是WordWrap,将它设为True。
4 }" [& r( t' [# c/ A1 j! n% \ 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了, F1 b7 ^# V9 g4 m' X
这时的显示应以空格区分多个单词!( W- m5 z% j! _2 ?! y$ ^( i
3.使Label控件上的文字纵向显示
$ K7 h, N- {; G; T 最直接的方法是改变字体的旋转度和方向!% ~+ G$ a- |3 \, ~0 R9 K. F
下面这些代码实现了旋转的功能:: U2 }& l5 Q+ _ f
void __fastcall TForm1::Button1Click(TObject *Sender)
$ t7 C+ d2 K+ q; l, {) e {
9 B; l. K. q4 C& I4 x3 n( ` TFont *font;
& i; D8 m. }) K, m/ L2 I7 ~9 s LOGFONT logfont;
3 s3 E+ T+ n4 l& }( j4 A7 z font=new TFont;6 Z$ E0 H' V( ~, p3 ]& ^
font->Assign(Label1->Font);* Z0 ?/ \; e, W& x! I* |
GetObject(font->Handle,sizeof(LOGFONT),&logfont);
4 x2 l% c, a/ I* a L: R5 s logfont.lfEscapement=-900;/ m; @3 r( C8 P' O
logfont.lfOrientation=-900;
5 D. f5 u; _1 C5 d8 w font->Handle=CreateFontIndirect(&logfont);
' Q* X0 b9 x9 ^& g0 U1 J! H Label1->Font=font;- O# f# f1 u& E+ U# P, j' F
delete font;( t- J) a- S! T$ J* u; {- n$ X
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";5 I% ]- w q$ C: h( |
}3 m6 F/ y+ l0 l( P+ @4 [
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!: U0 a. [ C2 w3 q2 c, ^6 x
将Alignment设为taCenter。% C& ^" H" x, \/ h
) f, j+ C" F( e# Y: t 还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
4 X8 O. m' w! T/ |! l! E Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
" N6 D1 r& l/ w( f8 M3 h 识别出来,整体分拆,否则会出现乱码!
% T( c6 L: n( H7 T6 C. i 下面的代码实现了这个功能:
8 [7 `( b( r. N$ m1 y void __fastcall TForm1::Button1Click(TObject *Sender)/ {$ W, R/ Q* M
{8 B" p" k% p1 ^) l- y
Label1->Caption=VString(Label1->Caption);6 I5 k3 ?& ?. Q2 W7 w0 E/ e7 o
}
8 g* \: |! s8 K: X7 |9 M# g //---------------------------------------------------------------------------
' O( c' ]. U1 ~! }! ~2 @* N AnsiString __fastcall TForm1::VString(AnsiString ss)( B- |+ q) Q$ u7 Q
{
7 T! I* e/ L; x* a! U AnsiString ass;
8 H+ m! A( e& G( a. M: D int ii,ll;* w9 s- z# t) x& L
unsigned char cc;; `# \7 ~8 @- | R. L: ~- A9 S
ass="";5 j: r7 n3 a- z7 \
ll=ss.Length();1 ^$ l: l2 }# \: b @& ^
for(ii=0;ii<ll;ii++)
2 Z; [% K1 H$ z. J5 X& _' L- f {$ l, E: s4 c0 Z; e5 F
cc=ss.c_str()[ii];2 V' a7 H, s% h2 e
if(cc>0xa0)$ R& k2 |: r9 m o- z
{$ W+ A9 r1 ?" L7 `& Q b1 T
ass=ass+ss.SubString(ii+1,2)+"\n";
' ]+ {$ G$ E" X' ^" _2 l/ v* A ii++;
4 p3 y- L& I# d. E# N9 R+ @ }
! u1 m# A6 @# M else9 l- F4 G7 W/ S. Q$ |' R
{
. J7 H7 T. o* n3 [ ass=ass+ss.SubString(ii+1,1)+"\n";
$ C3 R- z& h! u9 [/ X- m, ?3 u) A$ l }9 T4 l5 R; T& f% y7 |3 l, j
}% H4 g m9 O1 E* j+ L; U3 T
return ass;* d% x4 L# [4 \0 t( k5 k: w7 w
}
4 V: B# p1 X1 v. _8 e; |" v9 e; [ 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!0 S7 q7 H8 {6 `/ @- R
4.鼠标指向Label控件时改变说明文字的颜色( B+ ?: N9 |" ^, P2 p
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
2 g$ ^' Q8 t* v$ ?, e" R 红色,其他的字体颜色变成黑色!/ O9 I7 V/ q0 R* p- t' u7 r+ {
下面的代码实现了这个功能:, E8 R9 x/ w/ S. ]2 v: m( l) w
void __fastcall TForm1::Test(TObject *Sender)
7 v6 w0 e$ u) j! ^ {
+ L0 F8 r6 U2 l& M int i;
: Q' g1 h; f# y( i TLabel *lb;/ ^. j* v. r; e7 m% b3 w
AnsiString ss1,ss2;
3 V, r* l0 r+ `+ E* l ss1=Sender->ClassName();//获取参数的类型5 U+ Z, n5 E# [) p# U
if(ss1!="TLabel")return;//如果不是标签不处理; H$ P+ k% x/ B% U/ T. H& t- @. Z4 |
lb=(TLabel*)Sender;0 s2 d! C/ M8 F! D$ x, J5 V5 x/ U
ss1=lb->Name;
# p& f3 N" w" T0 A" { for(i=0;i<ControlCount;i++)
9 E9 v' G" X( y# M {" p8 U+ G% v2 q2 Y0 h5 C: y M) o2 M
lb=(TLabel *)Controls;
6 G$ H# B; K+ P* Q. b8 _) a- Q ss2=lb->Name;
# Z i1 d- B$ i if(ss1==ss2): r! ^$ Y/ e1 |# r
lb->Font->Color=clRed;# t t; W* p5 C4 R" I
else6 v4 p$ Y& |5 T! R1 S6 N
lb->Font->Color=clBlack;3 X# b0 b( F. F! R& }6 {- r
}' N! A* Q, [$ i( h. f, W8 g
}
; [: p. o. V( C2 |9 N6 [3 V //---------------------------------------------------------------------------! H) ^+ `. w% @$ M
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
6 m3 y* Z! {$ q3 t6 g- b9 J int X, int Y)
* j! y+ E4 s( X+ _3 k$ N$ _$ y; K {
9 [* s0 i1 g$ b7 h, L Test(Sender);
8 }% j$ P) R5 @9 e. V } |
zan
|