QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3738|回复: 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控件显示多行文本6 U; H, P1 R7 y; h
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    ; [' z" |7 `2 t3 H2 ?  Label1->Caption="第一行\n第二行\n第三行";
    4 e$ y3 x% \7 b6 C  Label1->Caption="第一行\r第二行\r第三行";
    5 c% T2 N& r- R! w  Label1->Caption="第一行\r\n第二行\r\n第三行";
    8 C1 M8 s" d" b1 x  Q* w  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    * Y' H* I( K, G% m$ f  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!# v( z3 P, W/ m/ w
    2.Label控件显示超长文本时自动换行
    , N8 P6 J' i: @9 g  ~  只要对Label的两个属性进行修改。
    : {* Z0 |; H2 k$ N; N" b! u  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!7 B0 d) U/ j( W0 M
      第二个是WordWrap,将它设为True。4 w/ M2 W5 Z6 l& m& X, ]$ T' C
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    3 F$ Z8 J$ c0 q: a+ i, W6 ~  这时的显示应以空格区分多个单词!
    4 H) S1 I& D  o9 q: U" a3.使Label控件上的文字纵向显示
    2 U% z( W2 n8 ^# \  最直接的方法是改变字体的旋转度和方向!
    * P' k# T' U, Z  下面这些代码实现了旋转的功能:: T! T! m! @+ U4 V- t/ k: H
      void __fastcall TForm1::Button1Click(TObject *Sender)- Y0 i% F/ o7 C, ~
      {
    : v" E) [: R+ i7 p7 [' d' V    TFont *font;
    % d% ^' x  H# J( ~# U, |    LOGFONT logfont;' Y2 `8 d8 ]! n$ g  E4 k, Z  u" U
        font=new TFont;
    4 C1 Q; D4 ?& y, {5 [) C  ^$ g% O    font->Assign(Label1->Font);3 C6 y0 u7 Z  m5 y! b1 u, s$ e1 u
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);. i! Y9 s% f6 {" y/ w6 |1 P; ]
        logfont.lfEscapement=-900;( E9 I7 o* b( {9 }! g
        logfont.lfOrientation=-900;6 ~/ r! ?) Q7 s( ]8 w( H1 A
        font->Handle=CreateFontIndirect(&logfont);
    . Y& ~( k9 ?9 J, z( }    Label1->Font=font;
    - W1 a- Q5 A$ \: r. e: C3 R9 _; q$ `    delete font;
    ' P0 \9 A# x% |2 ^+ V2 ]% U8 O# _    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";) }4 X  b3 @, V1 \  a4 I+ l0 L
      }
    ) D4 i2 f8 N/ W; l/ ?! t2 v$ @  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    , k. m1 N( Z+ b  将Alignment设为taCenter。. p+ B  F0 B! a0 \
      + v8 o: g  z2 A$ a$ r& ]+ A
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的' |# {; `; g1 @) c0 V
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    4 T8 b- K) x! n  识别出来,整体分拆,否则会出现乱码!
    1 j9 H3 ?. x( s  下面的代码实现了这个功能:: L  a; E0 D- C
      void __fastcall TForm1::Button1Click(TObject *Sender)
    $ v) |" D' g* C5 ^) b5 f  {
    3 w: Y( \5 f7 q    Label1-&gt;Caption=VString(Label1-&gt;Caption);
    # @) \  p2 C# V4 T  }
    6 n: r9 e' m& @" X9 h  //---------------------------------------------------------------------------& c; S4 I9 f* X4 j% K# M; C/ R
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    ' w: j1 Y0 M" C. a" r  v! e  {  g7 b9 ]: f' J! V9 k9 t* U& X
        AnsiString ass;
    ; k* C% b; A/ ~8 C) F9 [2 ?; o    int ii,ll;
    , c0 W% g! i+ a4 Y- R- J: T- c    unsigned char cc;$ }$ {' L" }1 Y  L
        ass="";' `9 D7 Y. s6 F: H6 D/ k
        ll=ss.Length();
    % S' R# Q( g, G: Z# Y- p/ I3 G/ W    for(ii=0;ii&lt;ll;ii++)% Z& S/ `. J. T$ ~5 `" _& {7 T
        {6 N) U, Q# D3 u4 [  X' Y: ?
           cc=ss.c_str()[ii];
    5 n% H  U/ w, \1 l! R* X       if(cc&gt;0xa0)) @8 E) K* w1 j" u& p0 A0 m1 }9 _
           {
    ' O1 ?# q  l: g7 V4 e0 p         ass=ass+ss.SubString(ii+1,2)+"\n";3 k# w9 J0 o8 e4 a0 q1 V, ?
             ii++;
    8 p! i0 T+ W5 J. ?       }
    1 E: l  s0 A+ ], T, }- s$ f       else
    4 o$ ~) s' o9 R6 H       {
    , n+ u& A& o: w         ass=ass+ss.SubString(ii+1,1)+"\n";
    7 S) h5 j+ W/ |6 p# N       }; `2 R; t: i2 ]' Q$ S3 M( u& F
        }% P" W$ ]: a; y! M- ^4 M1 i
        return ass;$ l; `; [& Q6 Z0 ^. e
      }
    9 ]0 M/ Q1 m' n* U  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!4 n  g, V* X) }$ T9 _+ v9 k, Q
    4.鼠标指向Label控件时改变说明文字的颜色
      b, }# y$ M" S' k2 Z$ x0 p  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成( F2 C# W9 J. E6 n: `6 @4 ^; q
      红色,其他的字体颜色变成黑色!6 L& `+ c: w5 `0 j6 n% }9 r7 c
      下面的代码实现了这个功能:
    ' s# c, c3 v6 D# j  void __fastcall TForm1::Test(TObject *Sender)) y5 m: [: L- p" v( L+ v, Y# A
      {/ U. M* ^$ L* s1 [( g4 k; c
        int i;$ q* F% B0 ?; a# U( M2 B7 S9 `% u! c6 M
        TLabel *lb;4 u: g2 Y, X$ M( `8 `, r* m
        AnsiString ss1,ss2;
    & n+ T6 R% i/ o0 y    ss1=Sender-&gt;ClassName();//获取参数的类型/ r7 X* e& M1 q' e9 U! H
        if(ss1!="TLabel")return;//如果不是标签不处理1 r7 m8 S) ^) e' J
        lb=(TLabel*)Sender;
    0 O2 l# c1 @# S' g- o    ss1=lb-&gt;Name;
    ( u! V5 E. o; n5 p    for(i=0;i&lt;ControlCount;i++)
    , Y8 X5 Q9 V% N& U5 g, X4 J- n    {
    ' Y8 Z7 L% s, z6 E  j2 F1 n( N! Y/ D      lb=(TLabel *)Controls;
    $ y' _; G- `4 I: z9 M3 q      ss2=lb-&gt;Name;
    / `) r% X) m2 L" ~0 k- l      if(ss1==ss2)9 H1 Q, ~8 n* u  Y- T' A; w8 A
             lb-&gt;Font-&gt;Color=clRed;
    / ~+ i" g3 W6 K2 d6 s      else
    , c* v% \+ x9 d5 v! r0 g6 Z# F& J         lb-&gt;Font-&gt;Color=clBlack;
    ' s! I4 K# |$ f# j    }
    % N# H% q) b! m- _% g8 h( R  }
    % P9 z+ C" l  p% W6 q  P: a! n  //---------------------------------------------------------------------------
    : t/ S* h, J% M8 }5 |  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,3 W5 w2 e; o& d( u
          int X, int Y)
      f" A. _; Q- ?8 R5 N  {! r8 r; b) ^( L5 t: U/ `1 }
         Test(Sender);" g" A# l# B/ g2 m6 m( @' A
      }
    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-4-20 09:55 , Processed in 0.453637 second(s), 51 queries .

    回顶部