QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3739|回复: 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控件显示多行文本9 [; N  `0 u( Q7 B' {# P7 k
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    3 ]/ x5 }! F& g7 `$ q! @- b$ R6 M& V  Label1->Caption="第一行\n第二行\n第三行";
    9 K1 N) j" p- e2 E: R( X  Label1->Caption="第一行\r第二行\r第三行";
    ! M; O1 M6 |& J, I# ]0 ?, v7 Q; O  Label1->Caption="第一行\r\n第二行\r\n第三行";% M7 @; y6 P, Q' K9 T: g+ R" |8 R5 p! U
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    0 p! |* a1 j5 e1 v+ C4 ]/ s1 I, @  _  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!% N- _! ~5 M6 ]' g0 L: T
    2.Label控件显示超长文本时自动换行' s% j2 d7 H; Q2 u9 \. ?( V4 W/ H$ }
      只要对Label的两个属性进行修改。
    # L3 s  _) v/ }8 S  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    8 _& N* M4 u" t* T- R  第二个是WordWrap,将它设为True。
    . F. w( L3 y3 z" m$ O  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,0 G' ^! E6 \% g1 d
      这时的显示应以空格区分多个单词!
    . g4 w; [8 C9 d0 ~, B- _3.使Label控件上的文字纵向显示
    3 G, v$ k3 m. v  最直接的方法是改变字体的旋转度和方向!
    - Y1 L$ k. J6 F5 j: H6 \3 `  下面这些代码实现了旋转的功能:1 Q/ m1 p8 S6 z5 _4 q" ?
      void __fastcall TForm1::Button1Click(TObject *Sender)
    - z1 U2 O5 x: @: ]: ~  {
    ' Z" \1 L. k; ^5 F9 I    TFont *font;
    # [/ i6 ^7 A; a- Q4 r' P# r    LOGFONT logfont;
    ! C9 J/ k+ w0 g5 v# B1 `# P% {* t    font=new TFont;
    ( e6 x) a% J8 I/ N( h    font->Assign(Label1->Font);
    " B& N9 J4 _2 K3 h: S1 C! q4 q    GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    4 c/ L0 J, F4 |2 q6 y    logfont.lfEscapement=-900;
    # m6 {/ H5 S) {0 H8 I9 J4 w    logfont.lfOrientation=-900;
    " Z4 i* E2 i) q  Z    font->Handle=CreateFontIndirect(&logfont);
    4 }' G( {" [$ i; \0 V    Label1->Font=font;: o- t4 w& s7 F3 V/ J. h1 H: _
        delete font;
    & G2 I6 ~. g0 [    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";1 R# f7 f% J0 G9 t
      }
    . i2 u. d3 S& K& M  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!$ }0 {& y  y1 S  w. D; R" P
      将Alignment设为taCenter。
    ! _0 c' S8 O" k7 W  & a: `$ a7 I7 U1 n
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    6 x4 }  k& h, T% h; w  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
      R% ~! c- X' ?1 ]  识别出来,整体分拆,否则会出现乱码!
    ) g+ q; K/ f3 N( t+ ]- A7 z  下面的代码实现了这个功能:; a& }& C' b) H. G- W5 W! l
      void __fastcall TForm1::Button1Click(TObject *Sender)7 a! u, g3 ~; ?- `& d  D" g9 D" c! Z
      {
    $ ~1 b, N# t; C: F    Label1-&gt;Caption=VString(Label1-&gt;Caption);
    0 B* K; h! q% V  a/ y  }# w3 L0 H9 V+ l- h" p2 g
      //---------------------------------------------------------------------------; w6 i0 j! c3 J# G0 P
      AnsiString __fastcall TForm1::VString(AnsiString ss)/ u: c) g1 Q& B, y7 K4 {
      {; h4 ^( A* s. k" n$ W& D* N+ Q4 C
        AnsiString ass;8 N9 `# M6 [4 f/ h3 n% l& H
        int ii,ll;
    6 t1 k7 U7 z5 ?, B: z* ?    unsigned char cc;
    2 a) m. y% ]; i: Q- k2 f/ [, G    ass="";
    - O. b- m% p( ^0 [    ll=ss.Length();
    & c# H& c! c+ V# x5 T+ q    for(ii=0;ii&lt;ll;ii++), Z* r7 A2 b4 X, _3 m$ p
        {
    ! ~! x7 S5 P5 l) }8 s! s5 x8 ]* I       cc=ss.c_str()[ii];1 H. @3 j1 y# [
           if(cc&gt;0xa0)3 d. V3 J. X5 y7 @+ O
           {
    * y  H9 ~7 ~3 o+ K" l         ass=ass+ss.SubString(ii+1,2)+"\n";
    % Q+ D: o' z7 {$ p5 X9 Q' F         ii++;
    7 N" T0 Y1 U/ b( Q% r, A       }
    7 H. ^' t" b4 d$ V; ?0 E) I8 M4 a5 {/ T, ?       else7 N. B# W" Y* ?; W
           {6 d( L" M$ ]% R: C
             ass=ass+ss.SubString(ii+1,1)+"\n";
    1 s& S2 Q/ N" w8 B% H. P$ G& E       }
    6 o6 P5 A2 A& g# O    }" Q9 i8 w2 j$ W, ?. l
        return ass;
    $ O2 O/ u" W0 J4 G8 M9 Y( h- w  }/ F7 |& d2 L0 n7 I3 D+ D
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    4 f& p& A) D6 Y4.鼠标指向Label控件时改变说明文字的颜色% `0 g" D8 D" Y+ \9 w
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    , J6 K' i. M/ ~: D  红色,其他的字体颜色变成黑色!
    2 n. }+ a0 p% O! t+ {  下面的代码实现了这个功能:1 t; w- ^  E) K
      void __fastcall TForm1::Test(TObject *Sender)" Q. V6 P. j; Z1 C1 u& M/ Z9 |
      {
    6 R) f( s( w% \* U3 L    int i;
    / s( N, ?9 d9 `0 q! n6 g    TLabel *lb;# M7 B- Q2 }) Z" E' V+ w4 W" y$ B
        AnsiString ss1,ss2;
    9 L* i: I( G* ?1 v' O# y) S6 D    ss1=Sender-&gt;ClassName();//获取参数的类型  J/ |5 f, ~, d
        if(ss1!="TLabel")return;//如果不是标签不处理, T3 v7 c* o' P  @( ~
        lb=(TLabel*)Sender;
    " x, `5 e- `8 i4 H2 D0 C    ss1=lb-&gt;Name;
    ) n) K% X+ C: f# |    for(i=0;i&lt;ControlCount;i++)
    ( `( \+ Q3 k. Z* E9 W1 K  l0 o5 D    {3 v% b  A5 h) {" r9 Z
          lb=(TLabel *)Controls;: x* ]/ {8 q/ t- f1 P5 i+ [. S
          ss2=lb-&gt;Name;0 O5 S3 T) q, F
          if(ss1==ss2)
    * ^7 e( B8 o' j! E( T- a* T& m         lb-&gt;Font-&gt;Color=clRed;
    ( }1 P5 ]4 c; ]7 H: o& l      else/ y* W6 X4 L9 L8 ?! M
             lb-&gt;Font-&gt;Color=clBlack;) q4 e% w: w/ Y  ^' s  k
        }! ^% H) z$ @$ n, w
      }
    ! k2 P2 ]8 k/ y' o  //---------------------------------------------------------------------------$ y1 \. S" {/ b8 w- [7 ~% o
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    / z4 n/ `0 u3 {* J( X3 C      int X, int Y)
    0 j9 V$ o) s8 ?3 G# D: I; `  {
    ' e' R" \2 K) J5 l; J6 j; |5 K" T     Test(Sender);# T$ {9 K6 d4 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-4-20 20:16 , Processed in 0.520839 second(s), 51 queries .

    回顶部