- 在线时间
- 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控件显示多行文本
% U$ s/ h. X g 可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
; z9 N: c: ]" _) o f3 z! W) _ Label1->Caption="第一行\n第二行\n第三行";7 t2 D( O: Q! l9 P
Label1->Caption="第一行\r第二行\r第三行";9 i' B1 n* Q7 B9 G
Label1->Caption="第一行\r\n第二行\r\n第三行";
' y; |* e9 n# X, x+ F( s7 v 但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入, Q X; j! A8 z( K& W) _% J; }, F
"\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!) I! g$ O7 M, I# _/ a5 W- E
2.Label控件显示超长文本时自动换行
) d5 W& k. N8 q. P/ [! m 只要对Label的两个属性进行修改。
! }! h' b# E$ T& y% {+ B7 Y: h 第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
0 }& Z1 x% X8 U! b4 Z 第二个是WordWrap,将它设为True。
6 z. V& ?$ X" ?6 `# Y 注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,' @: ^: n4 S' }! r2 S/ X1 H4 K2 ^
这时的显示应以空格区分多个单词! l! b' @% N1 z3 t) H
3.使Label控件上的文字纵向显示* Z% y4 `) l! _) ~$ X1 R
最直接的方法是改变字体的旋转度和方向!: K# D- T! W, | P
下面这些代码实现了旋转的功能:
. j2 @; F7 c# ^4 i& w& W' Z void __fastcall TForm1::Button1Click(TObject *Sender)" X8 m/ S0 }+ E- t' C
{
* E* `9 Y# Y( Y+ b2 u TFont *font;1 U! S: A, h% h/ F) k. m
LOGFONT logfont;
- X A& @7 w9 f) J: c3 r" \ font=new TFont;
5 W: V5 A) S, ]* j6 Y font->Assign(Label1->Font);
1 x" J" H0 ^& M8 F' M% m& D GetObject(font->Handle,sizeof(LOGFONT),&logfont);/ z* s2 x! c# l) K. F6 X
logfont.lfEscapement=-900;4 U2 a) u! d7 w
logfont.lfOrientation=-900;
$ P1 W# z, a7 v: j) w font->Handle=CreateFontIndirect(&logfont);) e8 C4 Y" V: y2 q9 w0 _$ M. _% _
Label1->Font=font;- h, N0 C$ Y5 ~+ V9 d) \
delete font;
, E' l9 f9 ?4 X3 v" G; n$ ] Label1->Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
. x. }& N* h7 x }
( L) k+ p- J+ \2 A( y 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!% c `" c% C4 A9 r/ ?4 Z: ?$ i5 n
将Alignment设为taCenter。! B4 d: a8 n2 I7 m+ s- V& {! P* `
# M1 f" B- i* B$ C3 U' L8 [
还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
# M: B( c7 {3 p7 y- T) f( g+ X, \, [ Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
4 n9 z( h7 W, M% Q$ c! V 识别出来,整体分拆,否则会出现乱码!! v0 v1 C% A: l
下面的代码实现了这个功能:: r2 a; V8 b2 @( @/ _% X
void __fastcall TForm1::Button1Click(TObject *Sender)& R# ^3 v% t" G- N( G: b
{- v0 U* C1 A1 X6 _
Label1->Caption=VString(Label1->Caption);
! Y! H0 u* Z" Q% U }
+ e2 m \2 x, E //---------------------------------------------------------------------------& T4 k8 m' J) e# J4 w
AnsiString __fastcall TForm1::VString(AnsiString ss)
$ ]% s3 u; U9 T# a, X {
1 o, m' m- d. h3 R7 X4 X9 ~4 L) N) o. V AnsiString ass;2 r9 x$ C% J& k5 c/ f$ r; E3 K
int ii,ll;
' C- Y! c% @9 a2 } unsigned char cc;6 w8 w* L n4 I- x8 H4 ?8 z
ass="";/ ~& W0 h: W Z' b7 U4 F+ P0 j: T
ll=ss.Length();
) t" O( K+ k9 L4 d8 L' K for(ii=0;ii<ll;ii++) f4 n4 U# a* B5 E
{
" a9 I4 |# v0 v0 l- k cc=ss.c_str()[ii];
; K: ?# K$ v7 q- l3 q if(cc>0xa0)0 c5 s- \' P" y) X4 e" w4 E: ^
{
, o) B+ C `) T. Z# C6 p ass=ass+ss.SubString(ii+1,2)+"\n";
8 s6 w4 K1 Z+ a$ m6 _) d ii++;4 l9 x: \6 E* I4 T! h
} B7 ~6 R) x5 d# e1 H- n( R5 N: B
else" Q/ d; }6 P0 G6 v- g! Y
{
$ a& n. P6 |" ?6 t0 \. o i ass=ass+ss.SubString(ii+1,1)+"\n";
( a* m6 [# n7 T% q/ A+ J }( q" X* f9 U4 l9 \
}! f+ [% P7 U0 N4 u g
return ass;
; h2 R/ m0 N" d8 g, v }
$ `3 N s4 ~ B0 o7 G7 A! v3 ` 这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
, o. o) s2 ^3 Y% \! R% q4.鼠标指向Label控件时改变说明文字的颜色
: C) F5 U0 n: e' p5 X* j 通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
! J8 d5 q3 c; G3 g" w2 h 红色,其他的字体颜色变成黑色!
J/ l( D' w% | a 下面的代码实现了这个功能:
# W. E& J3 V0 J8 c6 m void __fastcall TForm1::Test(TObject *Sender)
1 S/ _! J0 \( I- D2 Y {: q, [- [* |1 |4 l
int i;
. \$ W% v. ? U TLabel *lb;
6 A9 u- w7 y0 Z% ^+ t AnsiString ss1,ss2;
; }, R8 y7 Z8 s( [$ c. ` ss1=Sender->ClassName();//获取参数的类型
4 \8 T$ ^% w# T4 [& d if(ss1!="TLabel")return;//如果不是标签不处理
& F( k' G3 T3 p. r$ J( K: [ lb=(TLabel*)Sender;
- e5 \3 R4 K( q" Q) d ss1=lb->Name;7 W" }/ \2 v1 [' Z6 H, D3 s! J! V. j' Y& h
for(i=0;i<ControlCount;i++)
$ s7 X2 @ W% w, V! D/ A! O- F {. U8 J# F+ b, l3 |1 {4 H% S
lb=(TLabel *)Controls;4 o4 e& H: U6 _% L" s- _
ss2=lb->Name;: A: S4 R0 S2 f) \( N6 u
if(ss1==ss2). ]8 F: t8 w, Q9 H) y; P
lb->Font->Color=clRed;+ |9 Y9 D( E6 R
else
; Y" w- N2 z0 J4 D0 F) g lb->Font->Color=clBlack;
/ q! m: r8 O% C2 k) E }
) q. k3 k7 \. H }/ r) e6 \5 ]0 a8 M' x' f
//---------------------------------------------------------------------------
, p2 }8 j0 W( v: b, ~/ A void __fastcall TForm1: abel1MouseMove(TObject *Sender, TShiftState Shift,
9 B0 Q# h7 i. H/ I int X, int Y)" t X( B' l* U: d- i' f5 a% C
{
; h# I G- O: u' x6 x! t Test(Sender);% p4 e! y2 y; w2 x0 Q0 i
} |
zan
|