QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3755|回复: 0
打印 上一主题 下一主题

Label的使用技巧(由ilikenba收集、整理、调试通过)

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

1万

主题

49

听众

2万

积分

  • TA的每日心情
    奋斗
    2024-6-23 05:14
  • 签到天数: 1043 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组万里江山

    群组sas讨论小组

    群组长盛证券理财有限公司

    群组C 语言讨论组

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2004-6-23 17:31 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    1.Label控件显示多行文本
    ) A/ s& B$ j0 w7 x  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:$ e( E; {6 s9 v: G7 _3 g; i$ a
      Label1->Caption="第一行\n第二行\n第三行";( Y/ J4 s% h) |$ E
      Label1->Caption="第一行\r第二行\r第三行";1 ^6 N. F& o: A
      Label1->Caption="第一行\r\n第二行\r\n第三行";. Q8 t( Q# L, ^& I6 E! Z! Y
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入' q  [$ c1 T' Z0 a
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    , q+ v2 A3 T; y1 Y% `' f. {% m2.Label控件显示超长文本时自动换行! U& m' K. m& [& P0 X) \" G
      只要对Label的两个属性进行修改。
    7 Z4 p9 _6 K$ q$ N1 W  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!8 K; S& F8 A6 r' g3 X
      第二个是WordWrap,将它设为True。
    0 Z/ k: X5 R' ^3 u4 Y  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    & @0 ~; S' p8 o  这时的显示应以空格区分多个单词!! O& X- G3 b* c! C$ c9 ~
    3.使Label控件上的文字纵向显示8 B9 B2 d, d2 C' p* X
      最直接的方法是改变字体的旋转度和方向!  r2 Y3 [. {4 C  a3 Y- T
      下面这些代码实现了旋转的功能:5 }- {1 ?+ I- W1 j; \5 R
      void __fastcall TForm1::Button1Click(TObject *Sender)
    9 @) h3 w+ |; y7 C. t/ h6 k9 K5 f0 ~+ q) P  {
    ! W$ a# h) C' ~! E    TFont *font;
    ! k8 ]( E6 }# E) Q  m+ C( N8 K  M/ b    LOGFONT logfont;, D+ D4 D. ]/ T: n
        font=new TFont;
    3 F( E9 y- z5 P' b8 G    font->Assign(Label1->Font);
    5 V1 x% d; m! \* O% v    GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    1 t" ~. Q- i# I5 q8 T    logfont.lfEscapement=-900;9 a: _$ ]7 l6 w3 e! A. B
        logfont.lfOrientation=-900;' M! t! @& v  ]" s
        font->Handle=CreateFontIndirect(&logfont);
    6 Z0 E" h! a$ C. l0 {& l    Label1->Font=font;+ Z/ x- R2 ?& \0 W
        delete font;) V% ]2 _8 g" q/ |
        Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    : U6 @- X$ d) c  }
    + }1 e! ~/ w0 m  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!. ^) i2 o2 J( ], l. w% B8 V6 v: X
      将Alignment设为taCenter。
    . k5 f5 O* r: f9 E  % O" X" t% ^, G# D! B
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    8 G6 K, J( W! \9 x: I6 c  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    - Y2 U1 I& v6 I7 m7 O* _- C  识别出来,整体分拆,否则会出现乱码!6 V" @) M: J: Z9 L6 }
      下面的代码实现了这个功能:3 ~3 X! m  n* @" k! F5 M" P( K
      void __fastcall TForm1::Button1Click(TObject *Sender)
    7 E! x6 E" \- a4 O, |  {9 C+ S2 ]* b# R, B& z  O& `  G  K
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
    + T; @$ {4 I* e% A, S  }
    + J& g1 H- N/ x, J, {  //---------------------------------------------------------------------------  e. |) R& S+ C" q& G( c
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    ) ], Z" y4 E/ Z/ }  {7 V2 ]$ }, `% B0 ?
        AnsiString ass;
    $ i0 I' ]1 D( B! o9 C9 K2 r1 J    int ii,ll;
    8 H* C' g/ c+ r" f: F: y: ]    unsigned char cc;8 B; S7 Q& \7 o5 ~% o0 T
        ass="";
    2 I0 ?# u; w5 |8 R" `+ T    ll=ss.Length();
    ; j* j. h( `' w2 f, A" m    for(ii=0;ii&lt;ll;ii++)5 \. X& s2 e5 d0 b; |4 l9 ~' P
        {/ }3 {. W6 Y% d- a# i
           cc=ss.c_str()[ii];, C! w" S8 g: q5 S
           if(cc&gt;0xa0)9 Q9 R6 `" Y, {
           {
    8 ?  ?7 C1 Y5 d1 B7 L9 z         ass=ass+ss.SubString(ii+1,2)+"\n";; Q4 v# x6 w! l% P
             ii++;
    * N& t5 o: E8 w2 S* `       }; _# b# y8 b; T' g, x# g
           else
    ) O' G: O1 w  B4 R+ h       {  g7 c$ X/ Y' x7 v( M* a3 F4 z
             ass=ass+ss.SubString(ii+1,1)+"\n";
    ' g" f( _3 p4 F9 {5 ^, m) r       }
      V$ P/ X5 y  X$ O$ C* L    }  R' A1 j6 M& b$ J- j' w
        return ass;
    , G* e+ f) h9 |6 l  }# h) j5 U6 |, r$ \' H+ d
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!5 @2 }, u) T6 B1 _# l
    4.鼠标指向Label控件时改变说明文字的颜色. W, N* U, ?. N5 G
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成9 q( H  [! l! A" Q  U6 h' E) F& A
      红色,其他的字体颜色变成黑色!
    & {' r+ X) Z* c$ Z, B  下面的代码实现了这个功能:
    " T* w, N; Z7 J! d  void __fastcall TForm1::Test(TObject *Sender)" z  ~) Y* m* [. F& y9 S% ], T2 h
      {( O$ h6 K6 ]( u  O+ j
        int i;% {: V3 D( D& R) a* d' I1 g$ E  }( E
        TLabel *lb;% R4 P  C" A9 a, K2 U. Z( r
        AnsiString ss1,ss2;: V/ J% l9 A, j3 s5 X2 s1 t
        ss1=Sender-&gt;ClassName();//获取参数的类型
    # t6 O( v) f# F/ @    if(ss1!="TLabel")return;//如果不是标签不处理
    $ s9 V. I$ }# g3 E' j    lb=(TLabel*)Sender;
    9 ]* W3 q9 [$ d9 ]% z$ s7 J- b    ss1=lb-&gt;Name;- U# n0 z% V6 N; [% M2 H
        for(i=0;i&lt;ControlCount;i++)! E; y( J) X: a8 f" J) e$ x9 Y* N
        {
    5 p( D4 r: n  H+ n      lb=(TLabel *)Controls;
    , c+ ]9 E( t5 \6 P9 d, Q1 A  u      ss2=lb-&gt;Name;5 s2 |, R2 s$ t, `3 H  ~  |
          if(ss1==ss2)
    9 g: j1 E+ ?7 u, E         lb-&gt;Font-&gt;Color=clRed;
    " E3 R- J8 v8 B7 B      else
    4 x7 R8 X) J* t0 [! T9 S. _+ V         lb-&gt;Font-&gt;Color=clBlack;; O  T- p& c& ~9 B$ W
        }4 g# V5 x  J& j4 r! D7 F
      }. _4 m* f! m# b, m& L) P
      //---------------------------------------------------------------------------+ i1 b$ I3 {$ d$ J, ^$ A: F$ }
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,: W9 _$ y; q# H/ F! |# `. t2 P
          int X, int Y)7 |" z8 u. v! W. }
      {
    1 j4 O  h  W+ R- P1 M, M     Test(Sender);
    $ A1 ~, }; V; b% O5 ?( j/ A4 }' M  }
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-12 02:39 , Processed in 0.414206 second(s), 52 queries .

    回顶部