QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3809|回复: 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控件显示多行文本! k% a6 p/ z4 o% s
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    4 E% e% S( \6 [  `2 O  Label1->Caption="第一行\n第二行\n第三行";
      M9 k4 T6 L1 W$ ?  Label1->Caption="第一行\r第二行\r第三行";
    : t8 C; B' x! Y! E' d6 J. i6 ~  Label1->Caption="第一行\r\n第二行\r\n第三行";5 z2 R! k: ?' A' d4 b1 S
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入5 R3 A# O; g7 n
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!1 H" t8 \2 [0 b& c( m
    2.Label控件显示超长文本时自动换行
    # e. c) k$ b9 ]# H  L: A- D9 v  k6 l  只要对Label的两个属性进行修改。; m3 ^- v- `- ]: v1 W
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!. @3 x1 s4 X9 O$ r4 {+ w
      第二个是WordWrap,将它设为True。2 }% P/ ?8 K  q# `6 P) s# j* W
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,) k: @$ I3 g+ }$ ^/ z& \. R
      这时的显示应以空格区分多个单词!
    0 w7 V/ x9 l0 J' Y: f3.使Label控件上的文字纵向显示9 N9 P) ^/ m4 p; N% g4 t
      最直接的方法是改变字体的旋转度和方向!3 }1 o. J( O, C- ?1 z
      下面这些代码实现了旋转的功能:) o; W( Y/ Q% t* ]7 m  `* R0 F
      void __fastcall TForm1::Button1Click(TObject *Sender)
    # j; }0 U8 Z0 ~  Y$ m  {
    . l  e5 b9 ~4 \9 l$ d$ q7 d    TFont *font;
    , f' y4 w4 L; L6 K  M2 S    LOGFONT logfont;* q0 u- v& t8 `+ w! r9 n4 {
        font=new TFont;: b( P; @, u. p, k
        font->Assign(Label1->Font);8 h: S# _; w( Q6 O# N
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);0 U9 d' s1 W; x1 `6 D
        logfont.lfEscapement=-900;2 x7 o( j: i/ _. o% i3 U
        logfont.lfOrientation=-900;+ T2 S3 x) ]8 Z1 H5 Z4 _
        font->Handle=CreateFontIndirect(&logfont);! T' j8 Y- L. {; d' R
        Label1->Font=font;# u1 M' e+ p- C% x2 h- b0 U! W1 @; L
        delete font;0 `* d+ F0 o& N% L
        Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    * a! p' {6 g1 L3 j' U; x  }' R) Z* P/ @  P- R
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    : z1 W% L4 b7 g  将Alignment设为taCenter。
    3 J5 p: [8 E7 [  
    # k" q% ]+ M5 J) l1 _3 W5 s, |2 M  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的- t/ Q% A; |" N4 a' j5 K- C/ m2 x
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    & d6 l0 r; i. \  P- o# J$ T7 b  识别出来,整体分拆,否则会出现乱码!2 x  s' D9 x) u- j
      下面的代码实现了这个功能:
    1 a' k0 t* o% B" s- Q  A. G  void __fastcall TForm1::Button1Click(TObject *Sender)
    ) f/ @0 ?- W) |1 C( C  {+ E9 f& w" o' E# T; y
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
      p# ]0 t# b4 {5 e! d3 r- _. c' o  }( G$ K* E& ^3 W
      //---------------------------------------------------------------------------: l3 w% d8 J( V& d) S4 D
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    ' p6 \3 g7 B" b# v* E  {5 E4 }" y' C5 u2 L/ y
        AnsiString ass;# M& G5 ]9 ?; e
        int ii,ll;3 k/ P7 _0 {7 ]$ E; E# `
        unsigned char cc;
    + j& Q: v- t' x9 E, V3 m* N    ass="";
    ) n3 _; ]! u0 A: U    ll=ss.Length();) X, U1 v4 G% |/ B3 w4 l& J( m
        for(ii=0;ii&lt;ll;ii++)( N2 A6 ]. h3 @3 [! Q! @
        {
    ) ]; @- D+ z9 D       cc=ss.c_str()[ii];
    5 q' j7 |0 e6 F4 d2 ]" w       if(cc&gt;0xa0)
    3 T/ N) M/ ?  w5 q% I2 N       {, D( g- ^/ ~( F
             ass=ass+ss.SubString(ii+1,2)+"\n";
    ( j/ s, Y: X8 f5 [7 v$ F         ii++;
    / d: T# @5 H* F0 O# Y+ R       }
    2 d3 `" S1 [$ M$ I0 E+ ?5 j       else! H( }9 L0 \, t' P
           {
    ! L, }. [* t4 e         ass=ass+ss.SubString(ii+1,1)+"\n";* H: ]" h- K; g9 a0 r5 C
           }/ }8 m" l3 G$ ~0 z/ V# l# [
        }. K0 y$ U2 l& J- X* ^$ O
        return ass;
    5 M  [1 s& F5 s+ d  }
    / M" w7 J# s6 e  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ M" v5 _% O! x" z4 R2 u8 s% |  O
    4.鼠标指向Label控件时改变说明文字的颜色+ v7 o8 P% t  A5 V0 C. j/ T
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    6 ]8 s$ p# U% l9 C' Y. h  红色,其他的字体颜色变成黑色!
    * |* a- E- q" T- ^  下面的代码实现了这个功能:
    , L9 u, Z3 V2 b8 G3 w5 W, S  void __fastcall TForm1::Test(TObject *Sender)5 N/ J7 A# x9 v  ?! \# G( m% u% O
      {: ]# ~, ^: ?( J5 H
        int i;
    2 _3 T8 G" d1 I    TLabel *lb;: Y' O- J" Z8 V7 f8 {, t* j
        AnsiString ss1,ss2;
    4 a+ S. I. b* Q. p  @- I8 Y4 |+ M5 V    ss1=Sender-&gt;ClassName();//获取参数的类型8 U5 i4 b) i% U: q1 P
        if(ss1!="TLabel")return;//如果不是标签不处理
    4 G% d& @9 i8 `" w9 I    lb=(TLabel*)Sender;$ A( {% r, @1 k0 R7 ]
        ss1=lb-&gt;Name;3 _; n& h2 b5 `  p# A1 @
        for(i=0;i&lt;ControlCount;i++)
    1 k: B" H2 v. f: A    {  J7 p5 P7 ^5 A
          lb=(TLabel *)Controls;2 \. ]5 @, _2 U: C: T, s) e2 Z7 F
          ss2=lb-&gt;Name;
    ; H% X8 |5 x3 f  X+ _      if(ss1==ss2); [2 B! R1 |0 r0 {; z5 k; {, M
             lb-&gt;Font-&gt;Color=clRed;& b/ ?, Y7 \2 |7 x6 Y5 t/ |
          else) g9 g) P/ T6 c7 w* T6 S( g; ]- }1 S
             lb-&gt;Font-&gt;Color=clBlack;
    ! {, G: A, n6 X- Q  i( N    }
    - f; u0 p1 f7 t5 n9 ?  }
    + B0 k& [0 j% V  k  //---------------------------------------------------------------------------
    0 z& l" y$ w/ Y" K  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    1 H" I& F, d1 H8 w$ s7 x8 w      int X, int Y)
    7 w: }( S3 s3 X- |2 `! I  {! X8 R8 x5 ?' p0 u3 ~7 h* K
         Test(Sender);
    2 `2 N! S4 }! D5 j# D  }
    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-23 09:03 , Processed in 0.734062 second(s), 50 queries .

    回顶部