- 在线时间
- 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控件显示多行文本* o/ m4 ]# f% T
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:0 v) n; K }& H- W
Label1->Caption="第一行\n第二行\n第三行";$ l! B) b1 C V# \3 q! W
Label1->Caption="第一行\r第二行\r第三行";8 H" Y% |' }) Q0 W
Label1->Caption="第一行\r\n第二行\r\n第三行";
4 l9 o" @3 C0 A, m& ] 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
2 l/ a, ` [3 X" H "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!$ M; K6 h4 i: g M' [; C5 j
2.Label控件显示超长文本时自动换行
- J A6 M' u/ f& k9 K) a2 J 只要对Label的两个属性进行修改。
- ?" Z% k# I i9 M( ] 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!0 u/ a5 H/ `! C+ K: W& w" ?
第二个是WordWrap,将它设为True。
; N6 a2 @: H: v" O) c' R9 S& ? 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,! G- v( n! d$ O$ `5 O
这时的显示应以空格区分多个单词!, L7 T! I, M" ]! ~
3.使Label控件上的文字纵向显示( N: ], u5 G3 T, m+ p6 t
最直接的方法是改变字体的旋转度和方向!4 i/ v- u9 O# M
下面这些代码实现了旋转的功能:
: O5 M# E7 Z. U void __fastcall TForm1::Button1Click(TObject *Sender)
$ \* N9 T( j* z, M {! s$ Z' y4 g( f6 O. g2 n
TFont *font;
8 S4 G2 a% A2 j0 y# G0 ?! e LOGFONT logfont;
- v- n; |- o* u# {6 _, V: { font=new TFont;
' L G! r( S6 E, M font->Assign(Label1->Font);( P/ E6 A* |9 X4 m9 c8 X3 i
GetObject(font->Handle,sizeof(LOGFONT),&logfont);
3 z# B7 G+ T' E# `5 f$ T5 A' X logfont.lfEscapement=-900;* J4 t) f' s6 {. w
logfont.lfOrientation=-900;6 m! w$ s2 s( Q# Q3 i) l
font->Handle=CreateFontIndirect(&logfont);; y& S/ ?2 H4 ~- b+ q
Label1->Font=font;
& i" ?1 m$ ~1 E( Z c! `& g; x. R delete font;% }! }# c/ P$ D/ v( G- K% O
Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";8 H! q5 B5 k# i4 v) r4 T% Z
}- N: E6 ?( K: }0 N) {! I
这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!, b7 H% x4 ~0 L+ [ k4 u
将Alignment设为taCenter。' N5 u* h* n; D0 o4 s" F7 w& Z8 L8 O
$ T0 [ h q# A# P* N8 V6 f* c 还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
& Q' [$ l' ?% o* d% e Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字" I/ L- o; H4 a( ~' s9 k
识别出来,整体分拆,否则会出现乱码!! W0 a4 X" a+ n# L( w! \( w
下面的代码实现了这个功能:
8 W0 k) O2 \- M2 v* I; i' o void __fastcall TForm1::Button1Click(TObject *Sender)
5 `' a* M+ p$ J- S" _0 _( P) {, Y {6 z) X& U- v/ w( p
Label1->Caption=VString(Label1->Caption);
" j0 i: b) k! o5 W% Y }3 u+ l! Z" E1 O- G, A) S
//---------------------------------------------------------------------------
/ G1 I2 k" Y+ Z- G" H+ k, @: y& ^ AnsiString __fastcall TForm1::VString(AnsiString ss)( H: u' C1 |# ^) p4 n
{
5 Y3 Y3 _# Z. p; r' R0 z AnsiString ass;, {2 g3 r J: u: g9 D
int ii,ll;) w p: L, d7 O7 M9 o
unsigned char cc;9 C: e/ o2 \) ]! e6 d* b
ass="";5 E4 d, ^' y) h
ll=ss.Length();8 O3 |7 @# C a- X, K
for(ii=0;ii<ll;ii++)( P! R b# O5 \% O- v0 L% N
{% y% F7 ]5 o# ?, }9 w4 ~4 Q9 @8 \( J
cc=ss.c_str()[ii];
$ Q+ X* n! |/ A4 c4 J* p if(cc>0xa0)
0 Z E0 J. q4 f$ W5 G {8 k h/ ]$ V* A0 q8 c5 d
ass=ass+ss.SubString(ii+1,2)+"\n";
+ g# R1 e9 z3 A" R% T4 H- p& c, Y/ z ii++;3 X4 y% K3 \1 u
}- c* e2 P0 p- F! P1 H8 T
else
9 i: p8 N, f. v7 O) u& x5 F+ F" {( L; h {
; f1 Y: [; X" j5 r ass=ass+ss.SubString(ii+1,1)+"\n";
) F$ o$ S3 D# y' T# i }
1 {. I P2 T3 z, ]( C) _ }5 {' J% F8 r* M8 F6 L6 L! ^$ _
return ass;' z/ f9 a$ P1 T3 p. [/ i' K
}
& O* ~5 r* n) \" [! w/ Y% Q 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
! l: p# Y$ T+ T6 m: y8 Q7 m4.鼠标指向Label控件时改变说明文字的颜色
1 {$ Q; B! h& u( B, \$ c0 u, | 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
. E4 c! ^( Y0 C% ~9 `; ?1 q 红色,其他的字体颜色变成黑色!
- ]% r/ f! g" e$ H 下面的代码实现了这个功能:, A. j. G( Q& a% m0 Q, d
void __fastcall TForm1::Test(TObject *Sender)# {8 `$ o0 ?* i; B. i
{ n& O& b& ?. o8 e; C
int i;1 A, Y# W5 D5 d B( X8 p5 a9 o3 H
TLabel *lb;+ ]' o8 O3 _5 D3 O
AnsiString ss1,ss2;
+ O8 w- L, ^+ y: g ss1=Sender->ClassName();//获取参数的类型
5 q$ L0 |3 W' k) j$ p if(ss1!="TLabel")return;//如果不是标签不处理2 O3 m# R; V' X: S
lb=(TLabel*)Sender;
/ C# ~+ l# P) v0 A) q4 f! p$ w; ] ss1=lb->Name;
H; X) r' @; R+ { for(i=0;i<ControlCount;i++)* E1 a! A9 K) r& y7 ?# c
{
* F n! R) N# k3 D3 n+ _% |" R lb=(TLabel *)Controls;
; Z9 g! J0 W5 A9 \* m ss2=lb->Name;* i9 W5 l: \' W4 n0 Y
if(ss1==ss2)
' s5 V- q) g/ Y8 _ J) D lb->Font->Color=clRed;6 r4 ~: S8 i( W) F
else4 f& k* n1 E' d' L8 c5 U% A) X" y
lb->Font->Color=clBlack;
: `; n: u5 X& h: M }: f" f5 Y' `" H8 B& Y% n
}( I! P& a* p: V2 K6 u* h x
//---------------------------------------------------------------------------. v& m7 L! X& [9 }' e
void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,3 D) R2 Z/ Q) l! l
int X, int Y)
% q- |6 x) ^- S {
3 x$ Z' } |* g Test(Sender);
9 d( i& J) ]0 w' s } |
zan
|