- 在线时间
- 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控件显示多行文本5 |- V0 w+ J8 W w2 h1 q
可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:1 B |' H2 S: x: b& U
Label1->Caption="第一行\n第二行\n第三行";
1 C' P) {+ s2 t/ T4 g+ q Label1->Caption="第一行\r第二行\r第三行";& b+ Z/ E4 v" u* u4 y- p, V
Label1->Caption="第一行\r\n第二行\r\n第三行";/ m. J! a. U2 }) ]
但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
, y9 ~7 _1 X6 q: ^- |! t& U. B "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!; z: i& C- N5 G8 L* t: f' g3 h% i
2.Label控件显示超长文本时自动换行- ^4 Z8 G# R" k/ o! i( j0 k
只要对Label的两个属性进行修改。
$ f. A8 W* H% F1 P- v# G, o 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!6 g) u7 ~) H/ f* Q3 H3 L( @
第二个是WordWrap,将它设为True。
* A; y' k& a$ ?, H$ ]* v 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,- g: X) X1 S! I3 Q- t' l! Y& _
这时的显示应以空格区分多个单词!' f& t$ I% O* f! l
3.使Label控件上的文字纵向显示# I+ I2 l0 `0 h. Y) h
最直接的方法是改变字体的旋转度和方向!' m9 q, \4 t! d, T _6 i/ |( N
下面这些代码实现了旋转的功能:- L; U l- ^+ K; X$ Z4 P' v
void __fastcall TForm1::Button1Click(TObject *Sender)4 v- z3 Y, C; b" T% x9 X' X; w
{
0 a+ [# b0 S9 M, G7 }8 Z& c4 I+ U TFont *font;
+ j8 P U# Y1 e+ X6 q( P LOGFONT logfont;
/ O. @2 c, N# g# }) R4 U font=new TFont;2 p; Y3 n& M9 N
font->Assign(Label1->Font);* l; Z, R6 {) [* h0 X& n
GetObject(font->Handle,sizeof(LOGFONT),&logfont);5 k) G3 ] Q' N/ v4 A! A
logfont.lfEscapement=-900;
2 v$ D3 {8 l$ z4 h- } logfont.lfOrientation=-900;
; @* ]% c9 b6 K0 W9 H font->Handle=CreateFontIndirect(&logfont);1 n5 k6 D! {- b! X3 o
Label1->Font=font;$ I! u" |' e2 c- v- Q
delete font;
9 |% D: l# H/ o+ D, [& y$ X Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
0 Z y3 ?; F4 ?+ i/ x+ h c! R }
6 m0 w( c4 {3 M; }/ q' T( J# q 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!# ] ?; Y4 b/ ~6 w5 Q5 h3 H
将Alignment设为taCenter。: S# }. \9 |' D" b0 D
6 I9 q2 c8 ~0 b5 c8 x7 D( `. a 还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的, ]# o( R8 B5 Z0 f' {
Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
3 L# p) ~6 U3 K0 B1 ^6 O 识别出来,整体分拆,否则会出现乱码!
3 |$ E! L. C) [+ s 下面的代码实现了这个功能:
6 ?( H3 {4 R' c void __fastcall TForm1::Button1Click(TObject *Sender)
+ P/ U, X/ ]! O7 l7 R {
1 ?% K. j& s$ x- v Label1->Caption=VString(Label1->Caption);% X" D/ d0 h# T3 k3 L% _/ p- q
}
/ k# e( ?0 _7 i. i% m //--------------------------------------------------------------------------- a' G0 c+ U3 O
AnsiString __fastcall TForm1::VString(AnsiString ss)3 B# Z8 j6 P9 ~* C6 U
{
1 V8 B& q$ O) i3 h- H AnsiString ass;
) R2 R* e% Q; B6 p int ii,ll;
; x" K! a5 W8 G2 n- D+ A2 ^ unsigned char cc;
% B; t- f t, y. K8 g& u. o9 J ass="";
, z- `7 O; _- C/ }3 h! w# J ll=ss.Length();
+ ^" S) S* s# B1 O for(ii=0;ii<ll;ii++)7 p& `' e! z0 ]8 g7 t+ n8 U! k
{
. c( ` U: c' c- w9 S! f; V; o9 F cc=ss.c_str()[ii];
Y) H2 ?$ O5 `5 M R9 }& I if(cc>0xa0)
m& G+ {+ m! M+ S' ^ {
6 X3 h) J/ V5 [/ k& g* n ass=ass+ss.SubString(ii+1,2)+"\n";0 z! f) N. G- O, [* O
ii++;& O+ S" I% k* r1 p
}( l9 ?6 i: y g: J
else
2 e$ j$ |0 ~- P9 G B {, P- K X; ?+ v1 `: y" k, t
ass=ass+ss.SubString(ii+1,1)+"\n";
) C9 i4 q6 j/ G2 @2 v/ `3 ~ }
# P! e1 s7 C! d* T% N }
& Q4 @) ]8 ^6 l# C return ass;" I' |2 M8 @$ j+ W, ^3 k0 W
}
8 T% b! [, x# j Q8 a2 k+ [ 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!) U7 a* S! W1 ]3 p" V/ o+ h
4.鼠标指向Label控件时改变说明文字的颜色
0 z* n9 U- C: w. e. [) N& H4 X 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
- u: Y4 \5 B0 b 红色,其他的字体颜色变成黑色!
5 r3 s: @9 A- B9 s9 a6 k2 W 下面的代码实现了这个功能:
5 Z! |( @! Q) m' `4 Y& _+ F void __fastcall TForm1::Test(TObject *Sender)5 ]; `+ t _& r/ P3 Q- D- D
{0 G8 q- Z: V. y
int i;
$ {5 d! m1 b. b. G9 j; ? TLabel *lb;
# X1 d; ]2 _- ?& ^9 w AnsiString ss1,ss2;7 V5 J5 N G5 X7 V6 f0 P
ss1=Sender->ClassName();//获取参数的类型' `7 z5 y9 H# J# l- q
if(ss1!="TLabel")return;//如果不是标签不处理
- i4 j- q6 I$ L3 ?5 ^0 U( Z lb=(TLabel*)Sender;8 q' Z8 f4 \- W8 l" I. R( R
ss1=lb->Name;; ]1 ?4 n1 } N \
for(i=0;i<ControlCount;i++)
6 {$ x6 O7 g# k1 q" A( k& [ {9 P4 C, E. Y- q- I! K9 u
lb=(TLabel *)Controls;
: |1 ^, p m$ x. R& j ss2=lb->Name;/ q9 \: ?) o1 f# x1 c
if(ss1==ss2)) a6 b+ A) x: i" @5 \2 V. E
lb->Font->Color=clRed;
2 v- g4 h ^- z g$ x/ u5 v; B else
5 p8 z7 [1 B9 ]7 ]& I lb->Font->Color=clBlack;
' k- H; O6 [% N0 U. |4 d; V! O% \ }
, l0 `% s$ Z$ h7 v+ g+ e, `3 c }
+ _8 S0 l# _0 _/ t1 Q+ }# X0 r //---------------------------------------------------------------------------
" u: ?5 d. X; q. A void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
& I! |% j) q) i' `% {! }' e int X, int Y)
( ?4 F+ i$ I4 M2 i2 G {: V5 I. I5 Y4 m' l3 q
Test(Sender);
% o- k0 b4 N J2 Q5 u; X } |
zan
|