QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3821|回复: 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控件显示多行文本& M8 o5 F, _6 O3 b
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:- k& i& A& a3 L- h, t, L& P4 O
      Label1->Caption="第一行\n第二行\n第三行";1 m5 I2 k/ a. ^- f! g2 D
      Label1->Caption="第一行\r第二行\r第三行";
    * K1 ~* _( n. w" c: z* F  Label1->Caption="第一行\r\n第二行\r\n第三行";
    / u" V! [/ Q: j" |1 O9 \0 d  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入, b+ K# Q' n. n/ {, r1 ?0 ?, c
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    # M3 ]8 L7 `  [/ N2.Label控件显示超长文本时自动换行5 h& ^  E) Y: R+ V
      只要对Label的两个属性进行修改。
    ; \4 H* `: e& {  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!" ~- u& \, F$ \, ~; F+ @
      第二个是WordWrap,将它设为True。: O0 O* g9 T1 r( x4 i
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,: q, C- @8 Y$ r7 M
      这时的显示应以空格区分多个单词!2 \+ G9 }) S. m7 v& H: O/ q
    3.使Label控件上的文字纵向显示
    7 q7 v9 J* s9 r; U; `2 Z  最直接的方法是改变字体的旋转度和方向!! s( k1 C7 _& @  B( B
      下面这些代码实现了旋转的功能:
    1 Z) W6 o% |! b) k6 c! _+ A# A  void __fastcall TForm1::Button1Click(TObject *Sender)
    . A$ k9 k4 C8 [- {- \% F8 w% v% S  {
    ( l$ a, r0 I# e: n' k1 G    TFont *font;
    & V' R/ o- [, w# i  U6 {    LOGFONT logfont;
    ( ]3 v) n+ H9 A- P" ~8 R( I    font=new TFont;! [; F% o. I0 u/ E1 t, n
        font->Assign(Label1->Font);% _# l) M! w' g# Y
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    9 D# S! p2 b% P- _! A    logfont.lfEscapement=-900;
    5 V; f; H; o7 Y+ h    logfont.lfOrientation=-900;
    % w- o2 V2 Z- F$ n" k$ U4 p+ X    font->Handle=CreateFontIndirect(&logfont);
    0 }5 j' r1 ?  R/ @    Label1->Font=font;
    5 r% j% Z( Q; S& F    delete font;
    ; N/ l0 J- U. W5 f! G5 G    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
      M5 D% q: H* Q# F/ s% N3 _" i  }* Q6 }+ ~- f, I- N# p. f
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!2 D9 s5 S. d& W+ [+ l2 L& X$ d
      将Alignment设为taCenter。* h% O7 l) m; I: d  ^
      3 }8 H. f" U9 O* x; m; N& c
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的5 w8 G0 \0 w) N" K* U3 q7 d
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    0 p) o6 f; Q% e# d  识别出来,整体分拆,否则会出现乱码!( e) [( [: x  z$ G* L+ D; e1 F
      下面的代码实现了这个功能:) i9 G/ B# f7 O/ q. I. y
      void __fastcall TForm1::Button1Click(TObject *Sender)
    , p3 L0 O4 }7 |& A  H: }  {, v2 m2 P' e  }% V; m; G
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
    ) P, u7 ?9 m4 ?7 F  E/ |  }
    + y$ k" u& q: B& F0 z7 N  //---------------------------------------------------------------------------
    / z7 c0 b( L; t7 n( J5 b  AnsiString __fastcall TForm1::VString(AnsiString ss)
    & ], |% G% N* \7 a/ ~3 ]  {
    ' \! U7 s0 x: Q0 E, W    AnsiString ass;
    ) T' u- c$ Y. y5 Z- I% s" C" [* C    int ii,ll;6 n0 z& K- b2 u9 U+ ^) |$ A
        unsigned char cc;
    0 R3 {0 o" _( i5 F" B, [3 w' r, c: d    ass="";
    : }0 O9 _! I7 l2 ^; _    ll=ss.Length();0 u( Z) T% }0 H( e- Q* W' B- W- g
        for(ii=0;ii&lt;ll;ii++): z4 X, n; a% G, T7 O1 c4 [
        {$ k, V  V! d; r
           cc=ss.c_str()[ii];1 P8 ]1 U: @! x# v8 q1 d
           if(cc&gt;0xa0)
    / \7 B! B0 X- W7 V2 N# S3 f       {! K  K; e5 R1 h2 f. w' k. M
             ass=ass+ss.SubString(ii+1,2)+"\n";
    2 E  J# @# C, q) Q* I+ l1 R         ii++;
    ! z3 w9 o# y+ c7 ?1 ]" L$ ~       }# s9 f' {' \2 l1 L4 n0 Q8 ]& w' |
           else
    1 P  P5 j- V0 E9 w8 \8 c       {. @$ b  v& M: @8 t
             ass=ass+ss.SubString(ii+1,1)+"\n";; a2 b- A  F- E" d6 o8 O
           }
    ) ?0 R" [1 Q& d8 Z8 T    }
    , E# `& ~5 I" |1 C. R    return ass;
    % R( l" l; w8 h6 v! I: |7 b5 u) c2 T  }6 I/ g& H$ s  N; K) y$ r( m: m
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ E- i3 [6 }( }4 l/ w/ n( J7 }
    4.鼠标指向Label控件时改变说明文字的颜色7 ~2 k$ q& _9 |3 S3 ]
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    - m! s! N, a% `' \  红色,其他的字体颜色变成黑色!8 a# x5 z: x7 k
      下面的代码实现了这个功能:
    - Z2 G( w( S( `% x0 W  void __fastcall TForm1::Test(TObject *Sender), d, X0 E, F$ g- S( C  T. n
      {
    ! a3 c" T& U9 v4 K( m    int i;' u8 r' k* E7 O, x% Z8 h' b# ~- ^; m
        TLabel *lb;
    0 `$ g# d/ p7 Q9 q    AnsiString ss1,ss2;2 J0 [) i* a5 T  `
        ss1=Sender-&gt;ClassName();//获取参数的类型" b5 j& e; c: P. I) x! S8 |8 m) l+ ]( @
        if(ss1!="TLabel")return;//如果不是标签不处理
    . A/ r/ `, s. D9 B    lb=(TLabel*)Sender;( k+ n# r( i. p
        ss1=lb-&gt;Name;2 A9 b% h7 ?) M0 X2 m& V7 f
        for(i=0;i&lt;ControlCount;i++)
    0 ?7 g' V9 y4 P. }/ h4 D    {( G5 U: p; p( j  ~6 ]
          lb=(TLabel *)Controls;3 ]  O, @1 c/ b# O
          ss2=lb-&gt;Name;4 Q$ y. I' `; i2 J" Q9 u
          if(ss1==ss2)
    9 z3 V" t" l- l- ]9 ~/ s         lb-&gt;Font-&gt;Color=clRed;
    / N$ R( [4 l* g  e* F      else
    ) g/ x) o$ b+ `4 i1 d( }         lb-&gt;Font-&gt;Color=clBlack;
    2 d, R" a& p, }9 d    }
    # Y* W4 z; \8 R/ z7 v% M* C& l* Q  }2 R" [3 u" I, `3 k
      //---------------------------------------------------------------------------
    5 m& o% ~& ^, s( r7 J  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    ' Y- _( H* X6 g" E% h: \: x1 v      int X, int Y)
    $ ]+ E, b' {: ]1 }/ t" i+ Z  {
      q! \1 H5 K* \     Test(Sender);# O0 F; c2 a$ H5 X% Z
      }
    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-29 02:55 , Processed in 0.279753 second(s), 51 queries .

    回顶部