QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3823|回复: 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控件显示多行文本5 K( s1 a2 n" n
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    2 [" v& U6 [2 s) l/ G% L9 r  Label1->Caption="第一行\n第二行\n第三行";
    3 t5 R/ E( }% i$ s8 F6 u8 R6 A+ d  Label1->Caption="第一行\r第二行\r第三行";
    # X1 }) y9 c2 c5 U- e  Label1->Caption="第一行\r\n第二行\r\n第三行";
    5 L  g  J& Q) `9 c2 B5 u- ?  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入6 Q/ t( o' e, Q; d. R$ F
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    - ]+ {/ S9 g' p' u& O' H$ Z2.Label控件显示超长文本时自动换行& S2 A: g& D$ i+ ^  X: {6 ]; m
      只要对Label的两个属性进行修改。0 f+ r0 P9 ]1 R! \/ \
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!( f! v2 L. z0 J- c/ B$ |
      第二个是WordWrap,将它设为True。
    / r! H0 r1 H4 n6 b. J# `8 i/ _  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,  A7 B/ c( f0 m& f* i  \' v- K
      这时的显示应以空格区分多个单词!9 T2 M, Y  i$ t
    3.使Label控件上的文字纵向显示4 N4 D: z  q3 {, d$ s  D& I
      最直接的方法是改变字体的旋转度和方向!
    / u5 H6 O" ?% L( k% Q' T" E  下面这些代码实现了旋转的功能:
    % U" ]: H: V& q  void __fastcall TForm1::Button1Click(TObject *Sender)  j: V" t6 ]1 c8 E, I" i
      {
    " E% _! _! v5 z, A0 }' d. P    TFont *font;
    ( e+ Y$ _; N! u# ^1 s* J    LOGFONT logfont;
    ) K" A/ c; u( n. C; \    font=new TFont;- L8 P& w' }) D7 {9 L
        font->Assign(Label1->Font);5 f! N  x" c, m) ~5 S" G" ?* x4 g
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);7 ?! u/ V3 Y5 }% g: V
        logfont.lfEscapement=-900;5 t/ z0 y5 Y4 u0 `
        logfont.lfOrientation=-900;
    # @' I/ ?# y: X/ k: }' S  K% K* b    font->Handle=CreateFontIndirect(&logfont);
    % }6 s$ T4 Q" y+ |4 D7 r# F9 t- K    Label1->Font=font;( z. d6 T: A' T8 U
        delete font;2 k, T* B% C% _0 h
        Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    * w3 O- b2 Z. B+ o' N2 |' G( j2 o  }& _0 N1 B: l% M* h1 T4 k
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!# _2 |% R& X) r2 {: f0 G0 [
      将Alignment设为taCenter。4 v- h! ]) U9 }+ ^
      7 D6 c$ |3 \& E2 U* w6 W+ @
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的& h* Y* ^9 C9 W, p, J
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字3 e. Z4 z7 z, `* N4 O# ^
      识别出来,整体分拆,否则会出现乱码!2 W5 B0 o/ q# G1 f& |
      下面的代码实现了这个功能:' F) Z* j: h" J# U5 Q
      void __fastcall TForm1::Button1Click(TObject *Sender)
    - n% u# n3 i* j; t$ e. n9 R  {
    * k1 h3 O! m# I* k" g! w7 m) e( Y    Label1-&gt;Caption=VString(Label1-&gt;Caption);; o7 t5 D+ ^7 i, G
      }
    $ j9 B/ [. H" ^6 J2 i( G  //---------------------------------------------------------------------------
    % u" z7 F4 }  ]( \  AnsiString __fastcall TForm1::VString(AnsiString ss)
    ( h/ n% ]% H* G$ H6 E- f, s  {4 i0 G2 m9 W3 `  U7 N' g) G
        AnsiString ass;
    5 m! O0 f8 {/ H; N5 b    int ii,ll;' j1 P2 [7 D5 v' P& Y
        unsigned char cc;
      F3 S  z) p4 Z9 k1 z3 g  b8 S    ass="";& z, X. R. t5 ~/ K! Q1 l
        ll=ss.Length();
    ; B) `  j( |6 A8 H+ k& a    for(ii=0;ii&lt;ll;ii++)/ P6 ?1 m6 q- ]( b6 k$ G* Z
        {
    7 K% Z2 a& @0 t1 v$ u0 i- ?7 n       cc=ss.c_str()[ii];; O- b. H- v; B& M. l6 x8 W
           if(cc&gt;0xa0)) _1 D( i2 O% _$ G# N$ ]
           {# f6 K. ?8 r6 r! h! x3 @0 d
             ass=ass+ss.SubString(ii+1,2)+"\n";7 ]0 m+ W: L4 l; m; s' B
             ii++;
    7 L0 L; I0 Z+ V) b$ \       }
    * L5 {' S0 S! x  `3 ^0 p$ t, `       else
    3 S, }$ Z0 u& o- N       {  B* Z8 Q& J# k3 ~/ T. `6 O
             ass=ass+ss.SubString(ii+1,1)+"\n";5 l& \' M& A2 Q6 u9 M( B
           }
    1 V1 [6 |: N. }$ I" m2 r5 V    }
    $ H. y" t9 L& C  B' F5 ^2 u    return ass;
    : d, Z0 H8 V, |2 ?; U1 ?' u  }
    8 Q; t! @( B4 d+ P  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!/ ]6 n; T& R1 U9 L1 M% l3 n
    4.鼠标指向Label控件时改变说明文字的颜色9 n  ]9 z: ]) d% X: C$ l
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    " Z7 J: I' x, @, _5 u1 a  红色,其他的字体颜色变成黑色!
    6 Q" {0 C1 ]2 G( o/ J8 e  A  下面的代码实现了这个功能:9 J- ?: o  m/ _- B0 p
      void __fastcall TForm1::Test(TObject *Sender)- S# l* Q9 [; p  b
      {
    . t4 f4 p# k( C2 }: h8 }6 o    int i;: m  z1 U6 U& r, b0 ~- k8 j( A, z
        TLabel *lb;
    9 _- J! k+ i* C, j; [( B    AnsiString ss1,ss2;
    $ c  P% H! h/ I3 d    ss1=Sender-&gt;ClassName();//获取参数的类型
    6 U9 k* k. w5 X. C' u    if(ss1!="TLabel")return;//如果不是标签不处理! T% U4 w8 n) l
        lb=(TLabel*)Sender;  ?3 H; x& i& v& ^7 s2 R
        ss1=lb-&gt;Name;, h: J0 H: \. F
        for(i=0;i&lt;ControlCount;i++)
    . u( G# {3 c  G5 c* }% h. U    {
    2 \: k0 C, X, a2 p      lb=(TLabel *)Controls;0 d9 X+ v9 N1 N# O8 a  i; R. H
          ss2=lb-&gt;Name;1 P2 A2 ^1 _2 q" X
          if(ss1==ss2)' v8 r5 q: E3 q- I6 p  ]% k
             lb-&gt;Font-&gt;Color=clRed;
    - }# ~" i. E+ O1 v$ |3 b      else
    ; o! H9 [9 s$ E7 X         lb-&gt;Font-&gt;Color=clBlack;; m. O- @) N: ?1 s$ W6 D7 W$ f" `
        }6 ], P: o% }$ V+ T1 d
      }
    + \( k9 h5 d7 q- E7 m# K' [  //---------------------------------------------------------------------------
    8 }. t* [) A8 D- S3 i  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,) v% T" W' G) U  Q/ ?
          int X, int Y)0 c1 \! D  l8 Q& k% X- s0 \
      {
    0 D5 B, L, Y4 b( s4 g     Test(Sender);% ^4 A/ _( i6 I) V3 j
      }
    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-10-30 08:55 , Processed in 0.343467 second(s), 51 queries .

    回顶部