QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3736|回复: 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控件显示多行文本0 X) d! E& g# m8 D3 Z2 `4 X
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    ( S: o  ]3 W& z( ?' Y# F  Label1->Caption="第一行\n第二行\n第三行";
    / `' {3 b) c. g9 u# H- B6 M9 n$ O  Label1->Caption="第一行\r第二行\r第三行";7 b7 H' j* P/ v, z9 l5 D" z
      Label1->Caption="第一行\r\n第二行\r\n第三行";
    7 S' O2 p& w, w* S, A  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    : J* \& U" D+ t( H, N* z* \/ v  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    ; X) w" `0 H+ V( _/ z% [4 E2.Label控件显示超长文本时自动换行
    ' ]4 q7 [+ V0 _/ d0 l) f  只要对Label的两个属性进行修改。
    * _/ q( n' {, D0 |* m; X  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!4 s& Y: f( a1 ~- `$ S
      第二个是WordWrap,将它设为True。
    # [( f2 o% V0 a, g  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    ! r! {- A5 S& r  这时的显示应以空格区分多个单词!
    # \: ]; ~( x0 x3.使Label控件上的文字纵向显示
    ( u* V) p7 l+ {8 B" p; H  最直接的方法是改变字体的旋转度和方向!/ ]' C/ N& J. q! q$ O# }3 P
      下面这些代码实现了旋转的功能:
    9 `- i% G/ j4 O; T3 A  void __fastcall TForm1::Button1Click(TObject *Sender)
    + W& x9 s0 `" f8 \  {
    # S! _$ d1 D4 }3 H. m, k( _- {    TFont *font;
    ) l3 X& Y9 z9 y( @9 h4 {  h    LOGFONT logfont;# }) a1 P$ }0 o* s# m( K
        font=new TFont;
    * w' A' a4 \5 Y: |! I+ f, E6 i    font->Assign(Label1->Font);
    2 N& U0 d" _$ a/ p6 a8 U    GetObject(font->Handle,sizeof(LOGFONT),&logfont);  `- g+ g* `( [3 g
        logfont.lfEscapement=-900;
    $ i$ ~4 f( C" ^5 o    logfont.lfOrientation=-900;
    . s7 k1 [6 G+ {; G% r. X% |    font->Handle=CreateFontIndirect(&logfont);
    " C# g8 w! E$ T9 `% f" h    Label1->Font=font;  ?, E" F! L6 s; J) b
        delete font;
    # G' A( v. i- j; Z3 g    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";1 c4 a1 I5 A  K% B: b) l
      }" C7 Q. k, d$ m! r
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!  Z6 |! B4 K8 m; o
      将Alignment设为taCenter。
    ( [5 e9 d" @1 h1 H  6 V. N1 j( \0 z7 K
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    " h' e5 L* k4 A. z  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    , l* |4 h2 K* ?) ^# H  识别出来,整体分拆,否则会出现乱码!7 d4 Q/ s  g1 R  s. e
      下面的代码实现了这个功能:& I. p1 Y, a- ^2 b4 H% o
      void __fastcall TForm1::Button1Click(TObject *Sender)' r6 h' [, r; K# C
      {  J# |3 V0 K8 x- [0 {0 C- ]
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
    ( `* }+ i) P1 n( d$ T  p, L. Z  }( C7 E. z3 R4 `. z3 U2 n
      //---------------------------------------------------------------------------2 {  b- x# V: I  u5 i" ^! f* x
      AnsiString __fastcall TForm1::VString(AnsiString ss), A9 i  ]: h3 D; J! p9 ^, h% t6 v4 E* h
      {
    : u/ e2 T% w) F4 h+ Z$ R    AnsiString ass;
    / l& l/ H. }4 w+ H% V) k    int ii,ll;
    4 P0 o# x* v* s9 k    unsigned char cc;3 W9 _/ e1 {" g% [9 u, z
        ass="";
    7 `9 d  Q$ m- [/ v( F- W2 S" s    ll=ss.Length();
    : D, k  h) Q; i/ U0 f2 @+ C    for(ii=0;ii&lt;ll;ii++)
    ' y6 M' }- d- t0 S) k% y1 j    {6 `0 k' M9 K! e& R
           cc=ss.c_str()[ii];
    * j) C3 B% s4 f3 z8 u; O       if(cc&gt;0xa0)0 f* V4 p1 q9 p# V: \% T
           {
    ( K: D5 V0 X8 i         ass=ass+ss.SubString(ii+1,2)+"\n";
    - R  |0 i/ s, i# W         ii++;* `# W9 W. {, ?, E2 B
           }
    , G7 A$ z- Y4 _& ^. l       else# [( s6 ^% h% b( {7 F7 H
           {0 j5 t0 p# D9 N3 c7 r9 A
             ass=ass+ss.SubString(ii+1,1)+"\n";% G6 u. ~# k1 j, G) a: R3 u
           }2 W/ p5 @8 ~- ]; u
        }1 D8 \% D9 @) s* z" ], O' Z5 p
        return ass;
    ) I  p( s4 n2 m1 `8 \# l6 i! c  }3 V* z" D- A# W: z9 a
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ B# @1 A- U$ |2 @3 W6 ]9 ~
    4.鼠标指向Label控件时改变说明文字的颜色
    + }' q2 \5 E' @+ G  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    # @6 ?) l$ I/ e+ k5 U% d0 ~  红色,其他的字体颜色变成黑色!! e: I8 z; v8 Y% Y& d
      下面的代码实现了这个功能:9 x- T( o- E) C4 o% d
      void __fastcall TForm1::Test(TObject *Sender)
      ~. ~: `* A! ]6 a; T' d  {
      i/ x5 c: O1 W) w4 y9 L    int i;
    + F2 ]- G' \% G7 c& J- _9 U3 D' m    TLabel *lb;
    . U1 b9 L4 c6 d/ f' B7 Z: R    AnsiString ss1,ss2;
    , m) \) V; e! U; X5 F+ a    ss1=Sender-&gt;ClassName();//获取参数的类型
    * ^( F; D  G5 L4 e6 A8 L$ u% z6 x    if(ss1!="TLabel")return;//如果不是标签不处理
    4 U7 o) T/ |* {$ x7 `    lb=(TLabel*)Sender;
    / @+ n3 K/ G8 J, k  t    ss1=lb-&gt;Name;
    : n8 a' H$ H0 U    for(i=0;i&lt;ControlCount;i++)
    : s6 ~4 ]" Z/ D: Q2 I    {
    0 z1 i- I% |7 s3 J, @* M: s  B      lb=(TLabel *)Controls;7 C& C1 e" o  I  u6 I8 y! W+ x; y) a
          ss2=lb-&gt;Name;8 _) R" b& x0 [/ K: s: B3 B4 ^; m
          if(ss1==ss2)
    ' R9 S, A, N, _2 u6 p4 F& f         lb-&gt;Font-&gt;Color=clRed;
    ( G2 j% n, ]% Z      else
    # |9 x/ q/ B" O+ {9 u# t$ `. _         lb-&gt;Font-&gt;Color=clBlack;
    7 C( H  m+ i6 }: J: B7 P3 v; `! _    }3 k9 r  K: _9 W4 k; a& F+ Z
      }
    8 H4 I! H7 m4 _+ z( D* b& X3 e  //---------------------------------------------------------------------------# m9 o0 n, Q. y8 C2 F. ]3 r6 F
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    ! V; h7 V) P5 B; Z      int X, int Y)9 L/ _: l1 z1 k# I; T
      {, Y% S  P6 w& t
         Test(Sender);
      U8 d4 k  a6 i6 D8 ?. [. S  }
    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 06:14 , Processed in 0.308826 second(s), 51 queries .

    回顶部