QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3757|回复: 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控件显示多行文本
    ; j+ D8 p9 G: h) P0 ^) ~$ u  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:( R) D" W7 ]( V' {
      Label1->Caption="第一行\n第二行\n第三行";1 @- Z2 @/ [* ?" s% e
      Label1->Caption="第一行\r第二行\r第三行";* f2 e8 W* Q2 h4 v8 L5 h/ A
      Label1->Caption="第一行\r\n第二行\r\n第三行";
    0 K( e" p  @( |0 E- P  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入( `, O2 O% f2 n
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!& W0 X# w; p4 A
    2.Label控件显示超长文本时自动换行
    + ?5 ]; ~$ X- C# Q' w- J' ]  只要对Label的两个属性进行修改。) x( K' U4 E- p4 @& F9 y! t
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!1 W3 t; L+ U5 s9 B4 {) \
      第二个是WordWrap,将它设为True。
    % \, L5 n; F5 R) F, {$ _0 r+ d  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,, @' [3 N- V$ F! g# S. |
      这时的显示应以空格区分多个单词!/ ^7 [; `6 E" L6 M
    3.使Label控件上的文字纵向显示; w7 p' u; N. c4 ?# {
      最直接的方法是改变字体的旋转度和方向!1 w+ M" z4 G% d! i% q- e
      下面这些代码实现了旋转的功能:
    4 d  m2 J3 o6 N  void __fastcall TForm1::Button1Click(TObject *Sender)9 ]9 K. m! O" _
      {* C; c. B( s  U3 A
        TFont *font;
    ' R# m" [) {+ u- [8 Z' Y    LOGFONT logfont;$ F  l4 A' [" E" s2 B
        font=new TFont;$ w( V1 a& W0 f+ Y/ n2 m
        font->Assign(Label1->Font);5 \# M/ ~( V+ m+ _3 P3 V. o
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);# `. `6 _9 _8 V1 ]( a
        logfont.lfEscapement=-900;
    5 R. z' d5 R: {+ M2 y% _# _+ [6 z+ L    logfont.lfOrientation=-900;( |) F$ M4 N1 l0 k/ j
        font->Handle=CreateFontIndirect(&logfont);
    1 l6 [0 t  Q2 F8 J    Label1->Font=font;8 K8 J* H/ f6 H/ L& X5 v6 X( P
        delete font;
    + l! M1 `# l. B0 @+ F/ U+ ~- M    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";0 U8 A9 {5 ]1 {; [+ U9 F6 S
      }3 Q* k2 [0 d& Q) s- X  @" `
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    2 I; v. J2 Y! n# s' F8 H  将Alignment设为taCenter。! t( x/ Z2 A. k6 Z. H
      9 @* a/ e5 d9 o; O7 l; t
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    / |9 e1 n9 |. D4 E& {2 i' v  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    5 {% R$ b- }/ A9 n. P" C  识别出来,整体分拆,否则会出现乱码!
    ; I  i3 \1 }' S& m$ [2 F8 r4 G5 C  下面的代码实现了这个功能:
    : }5 d+ o' e8 l2 M! y% v  void __fastcall TForm1::Button1Click(TObject *Sender)
    + v+ H  s' F# Z  o0 k  {' m2 W* @) O3 Y7 c! H9 y6 Z
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
    # W$ i/ X; ], D/ e  }
    9 s4 h, \" N( w) P) b. j' w  //---------------------------------------------------------------------------1 B" u9 {, s& x) I) {' a. ?3 D
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    % a4 a  a  u( Y# {  {
    0 B/ Y$ M- Y) d% w: q2 s    AnsiString ass;& F) V. K. u8 K* z7 b) g
        int ii,ll;
    9 |) W* z$ L$ m/ J" Q0 [; u; H    unsigned char cc;
    & D0 [5 o" _$ Q8 {1 Z    ass="";
    / Z' c, m( u& m$ p" Q: o- X    ll=ss.Length();
    3 e- u: X6 [3 E/ L    for(ii=0;ii&lt;ll;ii++)& x  U5 h* z: \5 u$ |8 Q
        {
    / n! G8 x; A0 Z# a9 T, j# ^. V$ u       cc=ss.c_str()[ii];
      w, F8 f; @5 x       if(cc&gt;0xa0); t# T9 b' R% u( c/ S( W- I: ]
           {, W9 q, s0 F0 g* D
             ass=ass+ss.SubString(ii+1,2)+"\n";6 ?/ q6 }, x# Z  L- i5 B. }
             ii++;6 D8 X! s3 b' M" b  _+ o+ `) Z
           }, f) ?& C8 L+ m8 D5 w3 j8 ?
           else6 R/ N" |6 D% K, @
           {4 B% ~9 z7 f; d# Q" D% \, D
             ass=ass+ss.SubString(ii+1,1)+"\n";
    " M8 u) F0 y. T  i5 n! ?9 W       }
    ' K% l3 G. s! m- w9 c8 Q    }' Z4 Z6 e7 I! H
        return ass;
    & f5 m2 E! u% P+ \4 b2 _  }! o5 G% f6 G2 [& p
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    6 M0 ?. C: G7 s" j. N4.鼠标指向Label控件时改变说明文字的颜色4 c3 Y# k( Q7 B9 ]
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    % F( O# z, @7 q+ d  红色,其他的字体颜色变成黑色!; t( R# I& p5 M0 [# n" V
      下面的代码实现了这个功能:; H4 z6 [+ g; Y+ a! r( P  ?: n1 F
      void __fastcall TForm1::Test(TObject *Sender): m6 w: h9 R8 }6 M# y4 Z, N& m
      {
    6 H$ a- a5 M: U* ]8 |! Z    int i;
    . e  T1 K3 R/ ]! [' Y9 }    TLabel *lb;
    ) O& `' b: C" n/ Y; B( F1 G% s" d* C    AnsiString ss1,ss2;
    $ j; e! ]1 [1 ^    ss1=Sender-&gt;ClassName();//获取参数的类型, N% v* {$ _1 V: \. i. V# y
        if(ss1!="TLabel")return;//如果不是标签不处理
    " F/ T5 W; B% O+ w" z    lb=(TLabel*)Sender;/ w8 j4 p( ^/ ^. \% K) P% H1 a9 c0 Y
        ss1=lb-&gt;Name;
      a: `8 S. a7 t0 L' f% d    for(i=0;i&lt;ControlCount;i++)
    ' l! O4 A' g' _0 J4 O    {
    $ c/ U- L0 Q. n, Z4 a, i7 U      lb=(TLabel *)Controls;
    & b, k! v  ~3 U  |8 }4 p      ss2=lb-&gt;Name;/ t( o# E, S* d1 K( V/ W( a* s! ]
          if(ss1==ss2)3 B1 H: l+ \- c5 _7 P+ j
             lb-&gt;Font-&gt;Color=clRed;
    4 V/ A  h9 ~3 E5 D5 X      else2 W, b1 o5 w  }) P# P) e8 N
             lb-&gt;Font-&gt;Color=clBlack;
    , t- ?( Y9 |* Z* P1 t! |    }5 Z# ]4 t) C( p9 V1 I2 J! g
      }; [3 @. B* [6 u2 W( Z& _, S6 \
      //---------------------------------------------------------------------------. _- C1 A" a- w/ T/ M# G
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    6 d( E  o% ]6 e! T; j( C2 V8 j+ [2 |' w      int X, int Y)) L/ k/ G7 c* a) y
      {) Z" U( D, G, Z, p) {
         Test(Sender);. ]+ _; f" z5 _6 j9 T
      }
    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-13 02:48 , Processed in 0.416003 second(s), 51 queries .

    回顶部