QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3812|回复: 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控件显示多行文本$ s/ {" T2 K' q2 ^# z: G2 G& }! l
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    6 R  l& K( L1 U5 T6 A+ f/ I- H  Label1->Caption="第一行\n第二行\n第三行";
    6 J, Z# v  H- X- n5 ^! o9 m2 f. p  Label1->Caption="第一行\r第二行\r第三行";! n0 }3 Z7 J8 O5 U. r" Z, |
      Label1->Caption="第一行\r\n第二行\r\n第三行";5 n, X. o( R( P3 h# H6 O" z
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入. b; }" n  {/ c& q3 O6 L' ]5 r
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    . Q6 E, P: ?/ e4 j* U9 I7 u2.Label控件显示超长文本时自动换行$ S$ m* \" {( ?  E, T
      只要对Label的两个属性进行修改。
    0 M, f7 x& n) ?  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!" ]# {8 P; v4 }7 s
      第二个是WordWrap,将它设为True。
    ) z9 e  [: K- _2 h; c4 F) B  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    5 X9 [: b* x3 Y* }& |  这时的显示应以空格区分多个单词!
    4 I. i  p. g( E8 Z3.使Label控件上的文字纵向显示. a: B- Y9 |8 [! m" p) o5 k
      最直接的方法是改变字体的旋转度和方向!: p3 C7 V/ O% @( m
      下面这些代码实现了旋转的功能:. ~" ~( b; l0 T5 \6 N
      void __fastcall TForm1::Button1Click(TObject *Sender)- n0 X% q) f0 A* |4 @; @& `
      {5 v- x4 U& F- C1 N1 J: R' h3 q  ?
        TFont *font;2 K) X4 k+ c5 B1 r1 T3 Y
        LOGFONT logfont;
    - I! e# T9 r2 W8 K    font=new TFont;
    - [( A$ z" c7 q    font->Assign(Label1->Font);
    + ]% w9 T  C% _' r    GetObject(font->Handle,sizeof(LOGFONT),&logfont);  s; _/ c! d6 w7 P; Z/ p& ^+ h
        logfont.lfEscapement=-900;
    - t3 ?9 C: ^. L, e' [5 A0 ]! A    logfont.lfOrientation=-900;
    $ \; D6 V5 n) }; s8 D( _    font->Handle=CreateFontIndirect(&logfont);
    ' D. v& ], s( t0 o+ G& k    Label1->Font=font;
    ! W/ K- K+ }" t    delete font;
    ) B' `3 i7 w3 ?* p    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    , B1 G' q3 @/ z/ N* m1 g1 i  }+ [; Z3 Y9 l+ T" X, k9 N6 l) P  q+ r
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    3 T, b6 A: C  ^, C# F% O1 c: h  将Alignment设为taCenter。
    ) _" I& [2 Y. @+ Y0 a  
    2 [# p+ n9 @2 y; v! m! X" m; n  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    2 Y  w+ K. m& Y) {  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    9 X6 Q- ~5 }. i  识别出来,整体分拆,否则会出现乱码!& N0 d" _6 w- |: f: A  K9 X- `/ s
      下面的代码实现了这个功能:. G% y. E- R7 H$ l) n
      void __fastcall TForm1::Button1Click(TObject *Sender)
    ; }% L  D7 |% R  {% f9 {$ h- s( @; L6 q3 x* q
        Label1-&gt;Caption=VString(Label1-&gt;Caption);, y# E2 L" G- {& f, \. u
      }
    % K% o  P/ A, q  //---------------------------------------------------------------------------: C1 `! p! v3 j4 |0 C& w! r
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    5 U9 A3 @- V3 l% c: q  {
    0 k2 ]& s5 \) c& D5 L" d    AnsiString ass;3 w& `1 L$ b- e
        int ii,ll;4 F% I$ u% y1 @5 A- F
        unsigned char cc;
    0 Z% r: x+ {' b2 e2 _3 w5 \- B2 v    ass="";
    2 X) x4 f! X  s    ll=ss.Length();
    5 X  n* F( U1 w5 I* i$ p0 `0 x% i    for(ii=0;ii&lt;ll;ii++)
    ' C& v0 x. G7 f0 j; K4 [! s    {
    : m& j" ~2 S5 z1 f- N3 C/ ]       cc=ss.c_str()[ii];
    + f, p( t% t1 e; C4 X" N% g       if(cc&gt;0xa0)
    & ^% @3 r: U" g5 ?2 E       {' t( J% c3 C  `4 u4 s* Q& r
             ass=ass+ss.SubString(ii+1,2)+"\n";
    & J4 ~5 m% |: a6 p         ii++;5 i. M3 l& r4 ~& F& Q
           }
    1 p/ {+ V9 i' g; r- H2 Y% A1 K       else
    0 {  h3 z& R$ W2 g7 b+ L       {
    5 O7 F6 v1 D$ p         ass=ass+ss.SubString(ii+1,1)+"\n";
    8 y) ~& `2 N. Q& k$ n" Y6 W; X       }
    1 E4 {0 o  g. Z4 y    }
    3 i2 U! t+ _  O: s    return ass;2 i0 L: C: s8 m% Y* D% q
      }: a0 {/ L  |1 @. z1 S
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    * B: e: T) O7 M; u4.鼠标指向Label控件时改变说明文字的颜色1 D( S" q8 ~) B. I: _% q; p2 D! q
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    ) ^$ F* q7 O- H' M% i% g7 F. _  红色,其他的字体颜色变成黑色!/ F0 ?3 L3 N3 i+ I/ V# y
      下面的代码实现了这个功能:
    ! \3 Y7 n5 C  Y) {& q/ i  void __fastcall TForm1::Test(TObject *Sender)- F; |+ c. [+ ]
      {
    + i2 h& b& \2 x  h    int i;  T% |1 G2 l( |8 u9 p
        TLabel *lb;6 U1 J! }3 Z' S/ [* v  }7 i! i
        AnsiString ss1,ss2;
    ' X( r, O5 T, v" y2 d. C    ss1=Sender-&gt;ClassName();//获取参数的类型- y8 U! ~, [4 G. ]
        if(ss1!="TLabel")return;//如果不是标签不处理% z! @2 U4 o& U) w3 u) k
        lb=(TLabel*)Sender;
    9 F( m7 a* B9 |2 N! y# Z    ss1=lb-&gt;Name;* c, Q' |  N4 w- \5 h2 i4 c" C( l
        for(i=0;i&lt;ControlCount;i++)
    1 k" ~8 [; B# n; n' L& z    {
    / ?& c2 \3 T; Y( e! b$ P- o- h      lb=(TLabel *)Controls;
    5 N) e: z& l8 E' o      ss2=lb-&gt;Name;
    ' r& d( ^' [8 {: p. R1 e      if(ss1==ss2)
    & a, n2 R7 r1 Z+ {, S; ]4 ~7 c         lb-&gt;Font-&gt;Color=clRed;
    ) L5 N9 u- b- b/ K" X# C      else
    7 ?: i- y1 X: E         lb-&gt;Font-&gt;Color=clBlack;
    7 K( P8 v$ P$ C, f: ~5 L  n    }
    5 ~: \7 M2 D& S: K. C  }
    ; a2 Y/ G$ [$ ~2 I; [4 i/ R' S  //---------------------------------------------------------------------------. x% f/ h" S3 x' ]- T  J5 ~. L" S1 F
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    9 ]5 f/ y5 e6 K% m% |      int X, int Y)
    : n6 I9 a" [1 t  |( x/ c( [& F+ Y  {
    5 ?) ?) u' j4 E2 a     Test(Sender);
    ; n, y8 x4 ^9 s$ E  }
    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-25 10:34 , Processed in 2.006944 second(s), 51 queries .

    回顶部