数学建模社区-数学中国

标题: Label的使用技巧(由ilikenba收集、整理、调试通过) [打印本页]

作者: ilikenba    时间: 2004-6-23 17:31
标题: Label的使用技巧(由ilikenba收集、整理、调试通过)
1.Label控件显示多行文本3 x; I1 n. r2 V( G( I# u  D
  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
8 X6 z0 o) |! U) d4 O8 U  Label1->Caption="第一行\n第二行\n第三行";
% ]5 T) a3 ?  L& x1 }7 N- w  Label1->Caption="第一行\r第二行\r第三行";' W+ i3 j% O% x
  Label1->Caption="第一行\r\n第二行\r\n第三行";+ z( X) v3 k4 q/ T: n: l
  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
/ b7 w( i6 @1 U  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!& g+ }; O$ H' i
2.Label控件显示超长文本时自动换行. B. u4 S3 C  B- E, j
  只要对Label的两个属性进行修改。$ c& W8 X. J# a- P+ C3 [$ s. O
  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ u; e/ `2 h, e4 O% K$ T
  第二个是WordWrap,将它设为True。
5 w; \8 U  c. n+ I; K$ J$ H  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
$ Y. B7 ^. W0 m% h2 p  这时的显示应以空格区分多个单词!3 q# s) T1 ?" E* K' ^
3.使Label控件上的文字纵向显示
+ @/ E& O$ P5 I9 u" l: w  i  最直接的方法是改变字体的旋转度和方向!
6 Z2 z# I3 b& T  下面这些代码实现了旋转的功能:
. g$ B$ z2 H6 U/ D( L" u  void __fastcall TForm1::Button1Click(TObject *Sender)1 B- w4 Z% I# V3 u
  {9 E" |) l+ w9 T0 c; I
    TFont *font;7 Z0 D* x( j4 U# A3 B1 P* S1 M) n8 _
    LOGFONT logfont;, Z" g# T& n  d/ D( U
    font=new TFont;
, W9 K$ e: A: o    font->Assign(Label1->Font);
6 Y" X% U# b+ ]0 a8 \  k    GetObject(font->Handle,sizeof(LOGFONT),&logfont);( E: q: a) l/ N
    logfont.lfEscapement=-900;" X6 [/ ^% u# Z+ c
    logfont.lfOrientation=-900;: N7 a2 y6 l* b3 {8 L* N3 U
    font->Handle=CreateFontIndirect(&logfont);
1 B3 V6 H3 C6 q    Label1->Font=font;
7 B. w* w. @; @    delete font;
2 U% D* K" p( A    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";4 N9 R2 H- j( C8 l$ P
  }
# A* E' `3 d6 K5 A# D4 ]  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
, X6 W/ u( \3 [. {  将Alignment设为taCenter。# a2 R, e" f. O  S: h- O( S
  5 X! ?/ `- {4 K& s6 U% \: p
  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
$ ?5 b; I4 w# I8 I; |. m4 C$ ~  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字$ D2 ^2 y# t5 F4 d# c0 S
  识别出来,整体分拆,否则会出现乱码!0 K/ m% v& m# h% V5 S
  下面的代码实现了这个功能:
5 P; o3 h) f* F1 m! S9 {2 X  void __fastcall TForm1::Button1Click(TObject *Sender)
+ H% \: X/ t0 h9 F: m( w2 D7 F  {7 N$ \0 Z! e% l2 ]
    Label1-&gt;Caption=VString(Label1-&gt;Caption);1 w) S5 f* Q$ O+ w8 S( B
  }1 j: y8 `8 Z% \* S$ F
  //---------------------------------------------------------------------------9 ^6 I! ^' ^6 [4 T
  AnsiString __fastcall TForm1::VString(AnsiString ss)4 c& O" r3 E, g, y
  {/ k* q2 A* d& @; `! \7 [( l
    AnsiString ass;
. E+ E& |" }) }0 j9 Y' M4 i    int ii,ll;* X- B' l- t" Y& V7 n' n( y
    unsigned char cc;
! ]" D, x6 E" F- o2 Z8 X    ass="";1 f- _6 s$ Q( O- T6 H4 O
    ll=ss.Length();2 k2 ?8 C8 q+ b2 U
    for(ii=0;ii&lt;ll;ii++)/ ?2 g, [3 O- F- G
    {0 S  C. C' O, L; @- i2 Q
       cc=ss.c_str()[ii];2 s; U5 Y% N' y0 U* q* e
       if(cc&gt;0xa0)
: k! R. k# _1 M; U8 K6 h       {
, @  {0 _' V9 B- B! k5 k& K         ass=ass+ss.SubString(ii+1,2)+"\n";
' h! `8 D9 P& e  k6 W+ E         ii++;; M' A' x" k% q* Q# _- e
       }1 {+ Z# P5 W) C4 W: x3 P6 x' S
       else
. ~( l0 J" B+ @" ~/ `0 g       {
& R* c, K0 b+ M0 J1 `) ^; U) ^: X         ass=ass+ss.SubString(ii+1,1)+"\n";
2 G- K, A9 l* p, j       }! h( G9 P+ T' M  I! O2 r7 q( x$ o! d
    }
: x8 X3 H( ^& E1 w+ X- s    return ass;
2 v* K' n# ^/ F  }
! n* C+ q4 z& ~- w) `+ ]# F: B  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
  ]+ K  m3 q6 S$ x* ?# U4.鼠标指向Label控件时改变说明文字的颜色$ P0 g: v& p) L, k6 b' w) P& B
  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成6 f+ d1 C1 z' T9 e. U) H+ F% `
  红色,其他的字体颜色变成黑色!
/ g6 P3 A+ l! p  t  下面的代码实现了这个功能:$ \* d  P9 t+ I* C+ `" S
  void __fastcall TForm1::Test(TObject *Sender)
6 t" x+ e2 w( v: @/ w  {- p. G2 g6 V8 D. J2 ~; |  u
    int i;) @- e+ m2 g! y: t/ d( E
    TLabel *lb;; E( r+ f9 v, L5 s5 a
    AnsiString ss1,ss2;3 F7 b( l( E/ M* e% G1 q
    ss1=Sender-&gt;ClassName();//获取参数的类型+ D2 [$ T& S8 G0 ^! E
    if(ss1!="TLabel")return;//如果不是标签不处理
: `0 Q5 E) d; q2 r# I' y5 N5 D    lb=(TLabel*)Sender;" r# L; V3 ~3 j. g4 z, g% s: J
    ss1=lb-&gt;Name;( s% T! H+ Z9 l
    for(i=0;i&lt;ControlCount;i++)
" @* B8 ~7 y' l% K    {; T% S' L0 H: R( Z9 [, R; L
      lb=(TLabel *)Controls;' @# S. T: }1 K( b
      ss2=lb-&gt;Name;( _8 U; m. a  ]  y
      if(ss1==ss2)+ a0 |. \. Q0 Z, u; w$ k
         lb-&gt;Font-&gt;Color=clRed;( g2 {- P% n, V8 J/ N5 i- f4 u
      else2 O$ u% v0 Z  K. {. p
         lb-&gt;Font-&gt;Color=clBlack;: G, ^  r. d0 d4 o6 M
    }
; \) I0 a/ I3 i  }  O" {5 T+ a/ r* M( k
  //---------------------------------------------------------------------------
% b4 S/ }! S, n  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
# n( O3 c! R$ d6 N5 _, \      int X, int Y)
# m8 ~, D. ?/ M  {
. \7 a: J- k4 R  @& F: j     Test(Sender);
6 I6 }1 f& e- U5 V9 r  }




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5