QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3737|回复: 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控件显示多行文本5 |- V0 w+ J8 W  w2 h1 q
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:1 B  |' H2 S: x: b& U
      Label1->Caption="第一行\n第二行\n第三行";
    1 C' P) {+ s2 t/ T4 g+ q  Label1->Caption="第一行\r第二行\r第三行";& b+ Z/ E4 v" u* u4 y- p, V
      Label1->Caption="第一行\r\n第二行\r\n第三行";/ m. J! a. U2 }) ]
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    , y9 ~7 _1 X6 q: ^- |! t& U. B  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!; z: i& C- N5 G8 L* t: f' g3 h% i
    2.Label控件显示超长文本时自动换行- ^4 Z8 G# R" k/ o! i( j0 k
      只要对Label的两个属性进行修改。
    $ f. A8 W* H% F1 P- v# G, o  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!6 g) u7 ~) H/ f* Q3 H3 L( @
      第二个是WordWrap,将它设为True。
    * A; y' k& a$ ?, H$ ]* v  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,- g: X) X1 S! I3 Q- t' l! Y& _
      这时的显示应以空格区分多个单词!' f& t$ I% O* f! l
    3.使Label控件上的文字纵向显示# I+ I2 l0 `0 h. Y) h
      最直接的方法是改变字体的旋转度和方向!' m9 q, \4 t! d, T  _6 i/ |( N
      下面这些代码实现了旋转的功能:- L; U  l- ^+ K; X$ Z4 P' v
      void __fastcall TForm1::Button1Click(TObject *Sender)4 v- z3 Y, C; b" T% x9 X' X; w
      {
    0 a+ [# b0 S9 M, G7 }8 Z& c4 I+ U    TFont *font;
    + j8 P  U# Y1 e+ X6 q( P    LOGFONT logfont;
    / O. @2 c, N# g# }) R4 U    font=new TFont;2 p; Y3 n& M9 N
        font->Assign(Label1->Font);* l; Z, R6 {) [* h0 X& n
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);5 k) G3 ]  Q' N/ v4 A! A
        logfont.lfEscapement=-900;
    2 v$ D3 {8 l$ z4 h- }    logfont.lfOrientation=-900;
    ; @* ]% c9 b6 K0 W9 H    font->Handle=CreateFontIndirect(&logfont);1 n5 k6 D! {- b! X3 o
        Label1->Font=font;$ I! u" |' e2 c- v- Q
        delete font;
    9 |% D: l# H/ o+ D, [& y$ X    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    0 Z  y3 ?; F4 ?+ i/ x+ h  c! R  }
    6 m0 w( c4 {3 M; }/ q' T( J# q  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!# ]  ?; Y4 b/ ~6 w5 Q5 h3 H
      将Alignment设为taCenter。: S# }. \9 |' D" b0 D
      
    6 I9 q2 c8 ~0 b5 c8 x7 D( `. a  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的, ]# o( R8 B5 Z0 f' {
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    3 L# p) ~6 U3 K0 B1 ^6 O  识别出来,整体分拆,否则会出现乱码!
    3 |$ E! L. C) [+ s  下面的代码实现了这个功能:
    6 ?( H3 {4 R' c  void __fastcall TForm1::Button1Click(TObject *Sender)
    + P/ U, X/ ]! O7 l7 R  {
    1 ?% K. j& s$ x- v    Label1-&gt;Caption=VString(Label1-&gt;Caption);% X" D/ d0 h# T3 k3 L% _/ p- q
      }
    / k# e( ?0 _7 i. i% m  //---------------------------------------------------------------------------  a' G0 c+ U3 O
      AnsiString __fastcall TForm1::VString(AnsiString ss)3 B# Z8 j6 P9 ~* C6 U
      {
    1 V8 B& q$ O) i3 h- H    AnsiString ass;
    ) R2 R* e% Q; B6 p    int ii,ll;
    ; x" K! a5 W8 G2 n- D+ A2 ^    unsigned char cc;
    % B; t- f  t, y. K8 g& u. o9 J    ass="";
    , z- `7 O; _- C/ }3 h! w# J    ll=ss.Length();
    + ^" S) S* s# B1 O    for(ii=0;ii&lt;ll;ii++)7 p& `' e! z0 ]8 g7 t+ n8 U! k
        {
    . c( `  U: c' c- w9 S! f; V; o9 F       cc=ss.c_str()[ii];
      Y) H2 ?$ O5 `5 M  R9 }& I       if(cc&gt;0xa0)
      m& G+ {+ m! M+ S' ^       {
    6 X3 h) J/ V5 [/ k& g* n         ass=ass+ss.SubString(ii+1,2)+"\n";0 z! f) N. G- O, [* O
             ii++;& O+ S" I% k* r1 p
           }( l9 ?6 i: y  g: J
           else
    2 e$ j$ |0 ~- P9 G  B       {, P- K  X; ?+ v1 `: y" k, t
             ass=ass+ss.SubString(ii+1,1)+"\n";
    ) C9 i4 q6 j/ G2 @2 v/ `3 ~       }
    # P! e1 s7 C! d* T% N    }
    & Q4 @) ]8 ^6 l# C    return ass;" I' |2 M8 @$ j+ W, ^3 k0 W
      }
    8 T% b! [, x# j  Q8 a2 k+ [  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!) U7 a* S! W1 ]3 p" V/ o+ h
    4.鼠标指向Label控件时改变说明文字的颜色
    0 z* n9 U- C: w. e. [) N& H4 X  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    - u: Y4 \5 B0 b  红色,其他的字体颜色变成黑色!
    5 r3 s: @9 A- B9 s9 a6 k2 W  下面的代码实现了这个功能:
    5 Z! |( @! Q) m' `4 Y& _+ F  void __fastcall TForm1::Test(TObject *Sender)5 ]; `+ t  _& r/ P3 Q- D- D
      {0 G8 q- Z: V. y
        int i;
    $ {5 d! m1 b. b. G9 j; ?    TLabel *lb;
    # X1 d; ]2 _- ?& ^9 w    AnsiString ss1,ss2;7 V5 J5 N  G5 X7 V6 f0 P
        ss1=Sender-&gt;ClassName();//获取参数的类型' `7 z5 y9 H# J# l- q
        if(ss1!="TLabel")return;//如果不是标签不处理
    - i4 j- q6 I$ L3 ?5 ^0 U( Z    lb=(TLabel*)Sender;8 q' Z8 f4 \- W8 l" I. R( R
        ss1=lb-&gt;Name;; ]1 ?4 n1 }  N  \
        for(i=0;i&lt;ControlCount;i++)
    6 {$ x6 O7 g# k1 q" A( k& [    {9 P4 C, E. Y- q- I! K9 u
          lb=(TLabel *)Controls;
    : |1 ^, p  m$ x. R& j      ss2=lb-&gt;Name;/ q9 \: ?) o1 f# x1 c
          if(ss1==ss2)) a6 b+ A) x: i" @5 \2 V. E
             lb-&gt;Font-&gt;Color=clRed;
    2 v- g4 h  ^- z  g$ x/ u5 v; B      else
    5 p8 z7 [1 B9 ]7 ]& I         lb-&gt;Font-&gt;Color=clBlack;
    ' k- H; O6 [% N0 U. |4 d; V! O% \    }
    , l0 `% s$ Z$ h7 v+ g+ e, `3 c  }
    + _8 S0 l# _0 _/ t1 Q+ }# X0 r  //---------------------------------------------------------------------------
    " u: ?5 d. X; q. A  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    & I! |% j) q) i' `% {! }' e      int X, int Y)
    ( ?4 F+ i$ I4 M2 i2 G  {: V5 I. I5 Y4 m' l3 q
         Test(Sender);
    % o- k0 b4 N  J2 Q5 u; X  }
    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:21 , Processed in 0.585447 second(s), 51 queries .

    回顶部