- 在线时间
- 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控件显示多行文本
8 V% s% F8 F* U& @" h/ ^0 J8 g3 t 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:( }; h& [, b5 _
Label1->Caption="第一行\n第二行\n第三行";
9 C" s+ `6 S) S! d1 V) ]5 P Label1->Caption="第一行\r第二行\r第三行";! @9 [% R- t) V7 s$ l5 @
Label1->Caption="第一行\r\n第二行\r\n第三行";6 ^0 I2 [# b! j5 @
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
- d/ P; ]% B/ P" w6 Y3 ] "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!$ S3 n; d! @; D3 u7 g. A
2.Label控件显示超长文本时自动换行
_% {! Z* z) e$ F- s 只要对Label的两个属性进行修改。# G) R1 G& @9 ^# Z
第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!6 L+ q1 `" K2 Q4 w- z9 C3 l
第二个是WordWrap,将它设为True。
; c) R0 ~: m( p6 A: M: c5 W! G 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
! ]% ]4 h' a9 V9 [9 t; `/ j) C 这时的显示应以空格区分多个单词!
' c1 i1 j/ V9 j3.使Label控件上的文字纵向显示* P2 F) B/ y3 ~. o/ H
最直接的方法是改变字体的旋转度和方向!
9 J V" \# Q. L! {* u8 I* R3 F1 u 下面这些代码实现了旋转的功能:% Z. z' C4 x4 w9 `* W6 O
void __fastcall TForm1::Button1Click(TObject *Sender)
" Y7 J% v' J" Y. m; @ { z/ }% Y' R& G- N' J
TFont *font;) b5 R8 F1 W% E: f* E
LOGFONT logfont;
_+ Z0 F ?/ x font=new TFont;
% i P1 s' X# \/ N. u0 d font->Assign(Label1->Font);
( |8 Y$ X$ d/ w GetObject(font->Handle,sizeof(LOGFONT),&logfont);% Z. C+ Z' A4 c% G0 m. L
logfont.lfEscapement=-900;% S' R# c2 a2 S. Q5 Q9 f
logfont.lfOrientation=-900;
- v* b6 L9 ~4 G- ~ font->Handle=CreateFontIndirect(&logfont);
! B: i5 R' B9 E Label1->Font=font;
3 }5 ^7 m3 `. J5 {+ ]8 h3 H- G2 _9 i8 B delete font;
# K% `& }) p: d0 V4 g4 X Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
- ]0 y, J8 d. j- T }2 O& Z( H, X, `, t6 f7 y8 v$ {
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!7 |1 O8 d: [. f
将Alignment设为taCenter。
; j k* e' a7 d0 z. v7 K3 _
) T8 @* W2 l* W6 I 还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的! J5 L4 J! ^- S8 u) ]& d
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
% E+ b4 \7 \7 O, I1 k5 o* N 识别出来,整体分拆,否则会出现乱码!
# [; V8 C0 G% K1 _/ X 下面的代码实现了这个功能: p+ \. f. t- m+ ^7 \' R
void __fastcall TForm1::Button1Click(TObject *Sender)
3 X$ ^ |/ N' n o3 O6 f {7 A/ j. O& g. d
Label1->Caption=VString(Label1->Caption);+ O' x! d; z! y9 S
}1 y1 S- Q4 p* `& {; l* x
//---------------------------------------------------------------------------
& L( J* t, h4 S7 @+ b' g" N AnsiString __fastcall TForm1::VString(AnsiString ss)
% ^- B4 ]( @% @" Z( j {% B7 A' i' |5 ]; }- ?* E1 p" T
AnsiString ass;
; I6 ^6 L, c* e, W int ii,ll;
( c* O1 S5 P& m+ \; K unsigned char cc;
/ l! f: Q# A1 i1 i& {) K; | ass="";
1 X \4 F* J" L' q2 D- ^3 g7 l ll=ss.Length();, j- T6 Q# n- J a' V
for(ii=0;ii<ll;ii++)% ]+ T, c9 s: G
{
+ W9 S' e9 E1 s7 L cc=ss.c_str()[ii];
2 I# t. z3 R @' C, g if(cc>0xa0)
% @& p2 h ?5 f' [0 { {
' h, x1 Y$ r. E ass=ass+ss.SubString(ii+1,2)+"\n";5 i6 w1 C2 Y. _$ H3 y
ii++;2 |7 X, E: k' t5 C
}( L2 t3 X0 ?3 N
else
, a% V% q! s- W* y {$ P j) o3 y: Y0 B/ m1 @/ |% t
ass=ass+ss.SubString(ii+1,1)+"\n";
0 y$ i& a9 b* O0 [2 F# g! y }0 H' K! i& Z2 u# ]. Z% G
}
! E) l# P O, J: J! o& u: @/ K5 [. } return ass;
/ ^9 x9 J: K" B- I }" ~& w" [8 ] [8 S4 R
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
, W* k5 u# N) J' m4.鼠标指向Label控件时改变说明文字的颜色2 m5 A/ W4 B3 N% l; L4 E, v
通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成* Q5 H" b) [. n! E* B, S8 x" u
红色,其他的字体颜色变成黑色!
' l7 E! M: F9 J6 M# A1 W+ }& d 下面的代码实现了这个功能:
( {8 N! t" Y( {3 u void __fastcall TForm1::Test(TObject *Sender)
( R5 N) |/ I8 f {6 ` X! A% C F0 {
int i;
3 X* `3 |4 L. b/ N- m L" [7 V4 a TLabel *lb;
8 m9 ^1 I5 b/ J# z0 Y AnsiString ss1,ss2;3 U" F0 \3 V& U, }9 E% W
ss1=Sender->ClassName();//获取参数的类型. R, g* Q4 @0 S3 R5 {
if(ss1!="TLabel")return;//如果不是标签不处理9 U* A# ?6 ?) @! p; q9 t. e
lb=(TLabel*)Sender;
/ @8 R1 s% ~) T1 g* Y ss1=lb->Name;
6 p! m9 [7 L3 C6 K9 y for(i=0;i<ControlCount;i++)8 t- C; Y6 j* e0 f& {6 N
{
$ p8 K7 d/ H& z lb=(TLabel *)Controls;
* J( ?7 x& N f" ^' R2 K ss2=lb->Name;% Z5 k+ h* C& Q: y& t0 C' F
if(ss1==ss2), ~0 \2 }" C2 f. K1 }7 v2 y
lb->Font->Color=clRed;
0 T3 Y" @: A( [8 H4 d else
& j" F2 [* `: N3 H& \$ [# \: A0 u lb->Font->Color=clBlack;
/ Y2 Y1 P# [/ C8 p- Z+ X0 ]0 z }" J/ f9 @. r. L5 y. w @7 P- r
}4 I; F" `8 }, \
//---------------------------------------------------------------------------4 Y5 K+ n+ I. I2 p" |9 G& g
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,$ j- l. c+ U4 ]! i- N$ N+ w7 T
int X, int Y)- i1 t, O* K( w9 k4 r) c8 ] \3 Z/ i
{6 Q) D# I* t) W# I& c/ u
Test(Sender);
* s6 p% `; f6 s) b! u } |
zan
|