QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3811|回复: 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控件显示多行文本
    8 V% s% F8 F* U& @" h/ ^0 J8 g3 t  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:( }; h& [, b5 _
      Label1->Caption="第一行\n第二行\n第三行";
    9 C" s+ `6 S) S! d1 V) ]5 P  Label1->Caption="第一行\r第二行\r第三行";! @9 [% R- t) V7 s$ l5 @
      Label1->Caption="第一行\r\n第二行\r\n第三行";6 ^0 I2 [# b! j5 @
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    - d/ P; ]% B/ P" w6 Y3 ]  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!$ S3 n; d! @; D3 u7 g. A
    2.Label控件显示超长文本时自动换行
      _% {! Z* z) e$ F- s  只要对Label的两个属性进行修改。# G) R1 G& @9 ^# Z
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!6 L+ q1 `" K2 Q4 w- z9 C3 l
      第二个是WordWrap,将它设为True。
    ; c) R0 ~: m( p6 A: M: c5 W! G  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    ! ]% ]4 h' a9 V9 [9 t; `/ j) C  这时的显示应以空格区分多个单词!
    ' c1 i1 j/ V9 j3.使Label控件上的文字纵向显示* P2 F) B/ y3 ~. o/ H
      最直接的方法是改变字体的旋转度和方向!
    9 J  V" \# Q. L! {* u8 I* R3 F1 u  下面这些代码实现了旋转的功能:% Z. z' C4 x4 w9 `* W6 O
      void __fastcall TForm1::Button1Click(TObject *Sender)
    " Y7 J% v' J" Y. m; @  {  z/ }% Y' R& G- N' J
        TFont *font;) b5 R8 F1 W% E: f* E
        LOGFONT logfont;
      _+ Z0 F  ?/ x    font=new TFont;
    % i  P1 s' X# \/ N. u0 d    font->Assign(Label1->Font);
    ( |8 Y$ X$ d/ w    GetObject(font->Handle,sizeof(LOGFONT),&logfont);% Z. C+ Z' A4 c% G0 m. L
        logfont.lfEscapement=-900;% S' R# c2 a2 S. Q5 Q9 f
        logfont.lfOrientation=-900;
    - v* b6 L9 ~4 G- ~    font->Handle=CreateFontIndirect(&logfont);
    ! B: i5 R' B9 E    Label1->Font=font;
    3 }5 ^7 m3 `. J5 {+ ]8 h3 H- G2 _9 i8 B    delete font;
    # K% `& }) p: d0 V4 g4 X    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    - ]0 y, J8 d. j- T  }2 O& Z( H, X, `, t6 f7 y8 v$ {
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!7 |1 O8 d: [. f
      将Alignment设为taCenter。
    ; j  k* e' a7 d0 z. v7 K3 _  
    ) T8 @* W2 l* W6 I  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的! J5 L4 J! ^- S8 u) ]& d
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    % E+ b4 \7 \7 O, I1 k5 o* N  识别出来,整体分拆,否则会出现乱码!
    # [; V8 C0 G% K1 _/ X  下面的代码实现了这个功能:  p+ \. f. t- m+ ^7 \' R
      void __fastcall TForm1::Button1Click(TObject *Sender)
    3 X$ ^  |/ N' n  o3 O6 f  {7 A/ j. O& g. d
        Label1-&gt;Caption=VString(Label1-&gt;Caption);+ O' x! d; z! y9 S
      }1 y1 S- Q4 p* `& {; l* x
      //---------------------------------------------------------------------------
    & L( J* t, h4 S7 @+ b' g" N  AnsiString __fastcall TForm1::VString(AnsiString ss)
    % ^- B4 ]( @% @" Z( j  {% B7 A' i' |5 ]; }- ?* E1 p" T
        AnsiString ass;
    ; I6 ^6 L, c* e, W    int ii,ll;
    ( c* O1 S5 P& m+ \; K    unsigned char cc;
    / l! f: Q# A1 i1 i& {) K; |    ass="";
    1 X  \4 F* J" L' q2 D- ^3 g7 l    ll=ss.Length();, j- T6 Q# n- J  a' V
        for(ii=0;ii&lt;ll;ii++)% ]+ T, c9 s: G
        {
    + W9 S' e9 E1 s7 L       cc=ss.c_str()[ii];
    2 I# t. z3 R  @' C, g       if(cc&gt;0xa0)
    % @& p2 h  ?5 f' [0 {       {
    ' h, x1 Y$ r. E         ass=ass+ss.SubString(ii+1,2)+"\n";5 i6 w1 C2 Y. _$ H3 y
             ii++;2 |7 X, E: k' t5 C
           }( L2 t3 X0 ?3 N
           else
    , a% V% q! s- W* y       {$ P  j) o3 y: Y0 B/ m1 @/ |% t
             ass=ass+ss.SubString(ii+1,1)+"\n";
    0 y$ i& a9 b* O0 [2 F# g! y       }0 H' K! i& Z2 u# ]. Z% G
        }
    ! E) l# P  O, J: J! o& u: @/ K5 [. }    return ass;
    / ^9 x9 J: K" B- I  }" ~& w" [8 ]  [8 S4 R
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    , W* k5 u# N) J' m4.鼠标指向Label控件时改变说明文字的颜色2 m5 A/ W4 B3 N% l; L4 E, v
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成* Q5 H" b) [. n! E* B, S8 x" u
      红色,其他的字体颜色变成黑色!
    ' l7 E! M: F9 J6 M# A1 W+ }& d  下面的代码实现了这个功能:
    ( {8 N! t" Y( {3 u  void __fastcall TForm1::Test(TObject *Sender)
    ( R5 N) |/ I8 f  {6 `  X! A% C  F0 {
        int i;
    3 X* `3 |4 L. b/ N- m  L" [7 V4 a    TLabel *lb;
    8 m9 ^1 I5 b/ J# z0 Y    AnsiString ss1,ss2;3 U" F0 \3 V& U, }9 E% W
        ss1=Sender-&gt;ClassName();//获取参数的类型. R, g* Q4 @0 S3 R5 {
        if(ss1!="TLabel")return;//如果不是标签不处理9 U* A# ?6 ?) @! p; q9 t. e
        lb=(TLabel*)Sender;
    / @8 R1 s% ~) T1 g* Y    ss1=lb-&gt;Name;
    6 p! m9 [7 L3 C6 K9 y    for(i=0;i&lt;ControlCount;i++)8 t- C; Y6 j* e0 f& {6 N
        {
    $ p8 K7 d/ H& z      lb=(TLabel *)Controls;
    * J( ?7 x& N  f" ^' R2 K      ss2=lb-&gt;Name;% Z5 k+ h* C& Q: y& t0 C' F
          if(ss1==ss2), ~0 \2 }" C2 f. K1 }7 v2 y
             lb-&gt;Font-&gt;Color=clRed;
    0 T3 Y" @: A( [8 H4 d      else
    & j" F2 [* `: N3 H& \$ [# \: A0 u         lb-&gt;Font-&gt;Color=clBlack;
    / Y2 Y1 P# [/ C8 p- Z+ X0 ]0 z    }" J/ f9 @. r. L5 y. w  @7 P- r
      }4 I; F" `8 }, \
      //---------------------------------------------------------------------------4 Y5 K+ n+ I. I2 p" |9 G& g
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,$ j- l. c+ U4 ]! i- N$ N+ w7 T
          int X, int Y)- i1 t, O* K( w9 k4 r) c8 ]  \3 Z/ i
      {6 Q) D# I* t) W# I& c/ u
         Test(Sender);
    * s6 p% `; f6 s) b! 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-10-24 16:38 , Processed in 0.924892 second(s), 50 queries .

    回顶部