QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3766|回复: 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控件显示多行文本
      T' j# U8 ^  t; Y  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    % P6 |; l4 C# @& o- f; Q/ G  Label1->Caption="第一行\n第二行\n第三行";
    & {" g& E3 d% `  x  Label1->Caption="第一行\r第二行\r第三行";
    / [. Z! v9 x* i7 ~" l7 `  Label1->Caption="第一行\r\n第二行\r\n第三行";
    & s& }% m( Y: n4 J  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    + y6 W% Z1 r) {; K3 i. K9 n- T  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!/ Q/ f) n) g# ~
    2.Label控件显示超长文本时自动换行' Q+ X$ r' P& M3 j. y5 q: J& H
      只要对Label的两个属性进行修改。* b# L! y; X1 \6 j$ b& O( J
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    ! |7 s% ^4 q4 y; @  第二个是WordWrap,将它设为True。( u- e, w2 ^$ m
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,9 Q3 ?# U7 j2 ~6 a% u$ I
      这时的显示应以空格区分多个单词!, M8 {, k- K- w" r% |2 A
    3.使Label控件上的文字纵向显示
    2 ^9 {5 ?0 c1 d1 H/ u/ ^- h6 b  最直接的方法是改变字体的旋转度和方向!* _6 U: R8 d3 o
      下面这些代码实现了旋转的功能:) E# H5 u: [8 k  B9 Q
      void __fastcall TForm1::Button1Click(TObject *Sender)
    5 Z8 h; y4 r+ W6 X  {5 [3 F3 d* {) o8 z( n$ m
        TFont *font;
    ; D5 O5 i$ c  A2 f' u$ A% z    LOGFONT logfont;
    0 T- k( ~+ j; q    font=new TFont;
    . e: y+ y$ I& [8 X+ j* E( D9 M    font->Assign(Label1->Font);5 F3 V# y  O" s4 U$ I, ^5 T3 m) z' e
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);+ J1 a4 m! W, v) H5 T
        logfont.lfEscapement=-900;
    0 V9 f& G! g7 a/ L) O8 k0 D7 k    logfont.lfOrientation=-900;7 i0 I- u5 i8 _7 Z. U
        font->Handle=CreateFontIndirect(&logfont);
    5 O: [# ?4 E1 D2 Y5 U: e    Label1->Font=font;
    ' B8 Y: |& X  l' b2 |    delete font;
    1 w+ U/ V4 b+ B& Z    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    2 Q/ y! M6 ?2 u* V% @2 Q  }0 ~7 z% B4 v5 M' @% e
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ @9 L+ G, C% t% T5 H# w6 w
      将Alignment设为taCenter。
    2 s( O* \, X9 D0 O* b  9 X0 e: K3 [  `  r0 s2 X
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的3 q% \0 x3 o, h8 h% e  i( R
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字; D3 e6 a' O) B: ^8 `5 i4 S
      识别出来,整体分拆,否则会出现乱码!
    . Y( R' Z3 I& m/ o0 v  下面的代码实现了这个功能:
    ; u) z6 C: J3 u$ D  void __fastcall TForm1::Button1Click(TObject *Sender)* t+ v0 ]2 C" s2 H0 I  y
      {
    5 W- p7 h0 {* j9 [+ i' ^& E    Label1-&gt;Caption=VString(Label1-&gt;Caption);
    + S& y2 X2 [+ o& Z. c) H* f6 J  }, ?! `4 c5 Z" `$ G
      //---------------------------------------------------------------------------0 }% U) N9 I* q& g! D! j0 c. h
      AnsiString __fastcall TForm1::VString(AnsiString ss)* N; b% j  Q2 g8 B9 ]3 F$ v, w/ ]
      {
    - \* Y; L) d0 c; r" M8 R    AnsiString ass;
    8 \8 w! ?5 O# M( w9 ~# [1 I. \- Y    int ii,ll;% J  _0 e: u; ]  \; s9 S
        unsigned char cc;+ M4 X5 r2 T5 a! x2 U) A
        ass="";+ D. \6 I* ^( L! \( X
        ll=ss.Length();) x' D2 ~4 {0 E
        for(ii=0;ii&lt;ll;ii++)
    4 H/ o+ W: B0 [1 O9 j! }    {
    ' @: G! S+ I& [7 \. R( z       cc=ss.c_str()[ii];
    * @, G8 T+ }0 O3 b- F* D4 d' F       if(cc&gt;0xa0)
    ; n6 K) D" d7 e$ }' G       {
    1 j8 D4 f& p0 i         ass=ass+ss.SubString(ii+1,2)+"\n";
    1 b$ ]* _7 Q, i! I         ii++;
    " _0 Y; F4 y; E0 e( n       }8 C) u  S7 q5 B  Z" E4 R1 ~8 x6 x5 ?+ |
           else% d/ ]8 K. O: h# g  d
           {( [7 \6 ^9 q0 b3 `+ }* {
             ass=ass+ss.SubString(ii+1,1)+"\n";! a+ \. b, q, k1 h) ]' a
           }
    # B; w% O7 L4 C4 \. z/ S0 J, G: d    }2 d. T8 D2 }! Q$ w
        return ass;  Z$ ~4 n8 w) U. z: A+ i3 Z
      }: W  B8 |) L- R* X
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!: V# [* W2 A" a0 a  P
    4.鼠标指向Label控件时改变说明文字的颜色
    : H4 ?: h$ ?3 Y9 a  A7 l  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    7 x8 t4 _9 S$ p. U: o1 l; `) E  红色,其他的字体颜色变成黑色!+ H1 s5 T3 q; W$ W8 Z4 p
      下面的代码实现了这个功能:
    2 Z! U$ D) H  _! H, I8 o  void __fastcall TForm1::Test(TObject *Sender)
    ' q' w' E* e' D! p# |2 O8 ~" |- D" i  {- h7 ]4 X" h; X  \- T: u. Y/ ^) k; e
        int i;3 [: n2 z; G% n: Q
        TLabel *lb;6 m# z8 R8 `$ o8 K6 V. m
        AnsiString ss1,ss2;  r) K( ?! ~& y4 v
        ss1=Sender-&gt;ClassName();//获取参数的类型6 c1 K" H6 E1 ~) g7 D0 `
        if(ss1!="TLabel")return;//如果不是标签不处理
    0 B# T3 v; l. Q. D    lb=(TLabel*)Sender;
    : ^1 L* Y+ H: G; b+ N* A  v) w; w7 C    ss1=lb-&gt;Name;
    + S1 V. a* I! S; f* Z! l  G- J; l* ^" j    for(i=0;i&lt;ControlCount;i++)
    ; j) Y  z" W& O' k    {3 _: Y+ w5 I/ K
          lb=(TLabel *)Controls;
      S' }' ^5 D' X; @      ss2=lb-&gt;Name;* `2 q8 O5 t3 h) x. N# k2 |
          if(ss1==ss2)" w# t9 d2 y* e. n- i" T& w$ g. W- l
             lb-&gt;Font-&gt;Color=clRed;
    & Z. H' x5 r  S$ ]* _" P' n      else7 b8 @2 U  W6 P# e
             lb-&gt;Font-&gt;Color=clBlack;  R8 z+ F" A9 p4 ~8 m
        }: R% y% O- k+ D( s4 [. S! m8 Y, f
      }
    ! x. }/ P) k( V  m, v: W  //---------------------------------------------------------------------------: C$ I' Z5 t$ O: H$ y: }, J
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    6 [4 g" S# W9 _' ^) G      int X, int Y)
    6 B( h" k3 B; K0 E  {! n6 r$ c; V2 b9 `6 v5 [" a
         Test(Sender);3 [1 Z$ A7 x- Y/ ^0 \5 S) U
      }
    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-7-21 07:39 , Processed in 1.025584 second(s), 51 queries .

    回顶部