QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3824|回复: 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控件显示多行文本
    % U$ s/ h. X  g  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    ; z9 N: c: ]" _) o  f3 z! W) _  Label1->Caption="第一行\n第二行\n第三行";7 t2 D( O: Q! l9 P
      Label1->Caption="第一行\r第二行\r第三行";9 i' B1 n* Q7 B9 G
      Label1->Caption="第一行\r\n第二行\r\n第三行";
    ' y; |* e9 n# X, x+ F( s7 v  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入, Q  X; j! A8 z( K& W) _% J; }, F
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!) I! g$ O7 M, I# _/ a5 W- E
    2.Label控件显示超长文本时自动换行
    ) d5 W& k. N8 q. P/ [! m  只要对Label的两个属性进行修改。
    ! }! h' b# E$ T& y% {+ B7 Y: h  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    0 }& Z1 x% X8 U! b4 Z  第二个是WordWrap,将它设为True。
    6 z. V& ?$ X" ?6 `# Y  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,' @: ^: n4 S' }! r2 S/ X1 H4 K2 ^
      这时的显示应以空格区分多个单词!  l! b' @% N1 z3 t) H
    3.使Label控件上的文字纵向显示* Z% y4 `) l! _) ~$ X1 R
      最直接的方法是改变字体的旋转度和方向!: K# D- T! W, |  P
      下面这些代码实现了旋转的功能:
    . j2 @; F7 c# ^4 i& w& W' Z  void __fastcall TForm1::Button1Click(TObject *Sender)" X8 m/ S0 }+ E- t' C
      {
    * E* `9 Y# Y( Y+ b2 u    TFont *font;1 U! S: A, h% h/ F) k. m
        LOGFONT logfont;
    - X  A& @7 w9 f) J: c3 r" \    font=new TFont;
    5 W: V5 A) S, ]* j6 Y    font->Assign(Label1->Font);
    1 x" J" H0 ^& M8 F' M% m& D    GetObject(font->Handle,sizeof(LOGFONT),&logfont);/ z* s2 x! c# l) K. F6 X
        logfont.lfEscapement=-900;4 U2 a) u! d7 w
        logfont.lfOrientation=-900;
    $ P1 W# z, a7 v: j) w    font->Handle=CreateFontIndirect(&logfont);) e8 C4 Y" V: y2 q9 w0 _$ M. _% _
        Label1->Font=font;- h, N0 C$ Y5 ~+ V9 d) \
        delete font;
    , E' l9 f9 ?4 X3 v" G; n$ ]    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    . x. }& N* h7 x  }
    ( L) k+ p- J+ \2 A( y  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!% c  `" c% C4 A9 r/ ?4 Z: ?$ i5 n
      将Alignment设为taCenter。! B4 d: a8 n2 I7 m+ s- V& {! P* `
      # M1 f" B- i* B$ C3 U' L8 [
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    # M: B( c7 {3 p7 y- T) f( g+ X, \, [  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    4 n9 z( h7 W, M% Q$ c! V  识别出来,整体分拆,否则会出现乱码!! v0 v1 C% A: l
      下面的代码实现了这个功能:: r2 a; V8 b2 @( @/ _% X
      void __fastcall TForm1::Button1Click(TObject *Sender)& R# ^3 v% t" G- N( G: b
      {- v0 U* C1 A1 X6 _
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
    ! Y! H0 u* Z" Q% U  }
    + e2 m  \2 x, E  //---------------------------------------------------------------------------& T4 k8 m' J) e# J4 w
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    $ ]% s3 u; U9 T# a, X  {
    1 o, m' m- d. h3 R7 X4 X9 ~4 L) N) o. V    AnsiString ass;2 r9 x$ C% J& k5 c/ f$ r; E3 K
        int ii,ll;
    ' C- Y! c% @9 a2 }    unsigned char cc;6 w8 w* L  n4 I- x8 H4 ?8 z
        ass="";/ ~& W0 h: W  Z' b7 U4 F+ P0 j: T
        ll=ss.Length();
    ) t" O( K+ k9 L4 d8 L' K    for(ii=0;ii&lt;ll;ii++)  f4 n4 U# a* B5 E
        {
    " a9 I4 |# v0 v0 l- k       cc=ss.c_str()[ii];
    ; K: ?# K$ v7 q- l3 q       if(cc&gt;0xa0)0 c5 s- \' P" y) X4 e" w4 E: ^
           {
    , o) B+ C  `) T. Z# C6 p         ass=ass+ss.SubString(ii+1,2)+"\n";
    8 s6 w4 K1 Z+ a$ m6 _) d         ii++;4 l9 x: \6 E* I4 T! h
           }  B7 ~6 R) x5 d# e1 H- n( R5 N: B
           else" Q/ d; }6 P0 G6 v- g! Y
           {
    $ a& n. P6 |" ?6 t0 \. o  i         ass=ass+ss.SubString(ii+1,1)+"\n";
    ( a* m6 [# n7 T% q/ A+ J       }( q" X* f9 U4 l9 \
        }! f+ [% P7 U0 N4 u  g
        return ass;
    ; h2 R/ m0 N" d8 g, v  }
    $ `3 N  s4 ~  B0 o7 G7 A! v3 `  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    , o. o) s2 ^3 Y% \! R% q4.鼠标指向Label控件时改变说明文字的颜色
    : C) F5 U0 n: e' p5 X* j  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    ! J8 d5 q3 c; G3 g" w2 h  红色,其他的字体颜色变成黑色!
      J/ l( D' w% |  a  下面的代码实现了这个功能:
    # W. E& J3 V0 J8 c6 m  void __fastcall TForm1::Test(TObject *Sender)
    1 S/ _! J0 \( I- D2 Y  {: q, [- [* |1 |4 l
        int i;
    . \$ W% v. ?  U    TLabel *lb;
    6 A9 u- w7 y0 Z% ^+ t    AnsiString ss1,ss2;
    ; }, R8 y7 Z8 s( [$ c. `    ss1=Sender-&gt;ClassName();//获取参数的类型
    4 \8 T$ ^% w# T4 [& d    if(ss1!="TLabel")return;//如果不是标签不处理
    & F( k' G3 T3 p. r$ J( K: [    lb=(TLabel*)Sender;
    - e5 \3 R4 K( q" Q) d    ss1=lb-&gt;Name;7 W" }/ \2 v1 [' Z6 H, D3 s! J! V. j' Y& h
        for(i=0;i&lt;ControlCount;i++)
    $ s7 X2 @  W% w, V! D/ A! O- F    {. U8 J# F+ b, l3 |1 {4 H% S
          lb=(TLabel *)Controls;4 o4 e& H: U6 _% L" s- _
          ss2=lb-&gt;Name;: A: S4 R0 S2 f) \( N6 u
          if(ss1==ss2). ]8 F: t8 w, Q9 H) y; P
             lb-&gt;Font-&gt;Color=clRed;+ |9 Y9 D( E6 R
          else
    ; Y" w- N2 z0 J4 D0 F) g         lb-&gt;Font-&gt;Color=clBlack;
    / q! m: r8 O% C2 k) E    }
    ) q. k3 k7 \. H  }/ r) e6 \5 ]0 a8 M' x' f
      //---------------------------------------------------------------------------
    , p2 }8 j0 W( v: b, ~/ A  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    9 B0 Q# h7 i. H/ I      int X, int Y)" t  X( B' l* U: d- i' f5 a% C
      {
    ; h# I  G- O: u' x6 x! t     Test(Sender);% p4 e! y2 y; w2 x0 Q0 i
      }
    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-30 09:54 , Processed in 0.473289 second(s), 51 queries .

    回顶部