QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3753|回复: 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控件显示多行文本
    $ E% C, u2 V* R* H! i7 W+ {  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    . @( w6 J/ h- _8 ?  Y! D  Label1->Caption="第一行\n第二行\n第三行";/ {* G+ m# h( H  {: p# L
      Label1->Caption="第一行\r第二行\r第三行";
    3 ?3 U6 v- B/ W$ W: s" Z( ]3 ?8 j4 W  Label1->Caption="第一行\r\n第二行\r\n第三行";
    2 Z1 C' w/ k# C5 R) @% p7 `  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    ' n* A8 e% {4 G, i' k4 w/ c% k" b* s  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    * v& k$ @- a. ]2.Label控件显示超长文本时自动换行
    - G: O! g. b9 }* X  只要对Label的两个属性进行修改。1 N0 ?; M, D- {# H( f' E
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!' b' X6 O' X) s
      第二个是WordWrap,将它设为True。
    : K. Y1 q& g" t+ A  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    ! F, k+ N, [  X/ v" R' V4 K% k4 `/ s  这时的显示应以空格区分多个单词!
    ' \2 i' U6 V3 [  A3.使Label控件上的文字纵向显示
    & f1 J! h* y4 L2 a- h  最直接的方法是改变字体的旋转度和方向!8 i$ X, Q" g) m- |
      下面这些代码实现了旋转的功能:
    0 o: t( F! V5 u  void __fastcall TForm1::Button1Click(TObject *Sender)
    ; r/ y9 D7 L1 x( q# Y  {9 K- O8 Z3 o$ }: x) \
        TFont *font;
    , K) V$ f% c/ c+ z0 u) J) z    LOGFONT logfont;
    5 W9 K8 Y* s- V! ^) C7 \    font=new TFont;
    - |. I9 Z! q( N: S9 \( x+ I    font->Assign(Label1->Font);
    : |8 V( L$ e$ R  Z4 a    GetObject(font->Handle,sizeof(LOGFONT),&logfont);! ~! @5 L3 ~2 K: t0 ~& q0 [. n
        logfont.lfEscapement=-900;( ^# t5 I/ E0 I  G
        logfont.lfOrientation=-900;; M0 K. W' ]  k6 a6 a
        font->Handle=CreateFontIndirect(&logfont);6 }# E+ a! I- D
        Label1->Font=font;# z1 {. X! w+ T! i4 X2 y' h% T
        delete font;
    - `; u- m* t  o7 V9 t! K+ z    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    : t) V  o" w. Z  }
    : h) J( ^. a4 Q8 F$ J  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
      |) p0 |  V) H" P# L& ]  将Alignment设为taCenter。6 _" E/ f7 Y2 j6 X$ }* O9 S) q
      
    : D2 M! b7 d* X7 ~- x" H2 d$ l9 L  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    3 H% X4 q& h: T  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字5 D4 [( f' }  {: z
      识别出来,整体分拆,否则会出现乱码!0 e) r; h) \) p
      下面的代码实现了这个功能:
    : A+ h' m0 S+ D( V& z  void __fastcall TForm1::Button1Click(TObject *Sender)% ?" {+ ?1 V- w" ?+ `# }' M
      {4 @& l  \' e7 H, ^* c0 C3 C9 C* Y( o4 G
        Label1-&gt;Caption=VString(Label1-&gt;Caption);3 C% ]/ e8 ]& z1 N9 v1 h; {# x
      }3 y: G* F: H( i6 [/ Z+ G
      //---------------------------------------------------------------------------. Q* t  l/ K( C9 @- I# D
      AnsiString __fastcall TForm1::VString(AnsiString ss)& E. A' l! _1 e
      {
    7 V* u# c4 g- }0 v    AnsiString ass;7 [5 s- }1 Z6 A7 l; x% j' M; v+ B
        int ii,ll;
    ( U6 |, z  W( C* r, O: I* t! _    unsigned char cc;
    - N/ q  C( H0 R7 [    ass="";
    3 |+ Q/ x/ _" C& Z4 b/ _3 o    ll=ss.Length();
    # n5 o2 a/ `* T, \( o9 m! E9 G    for(ii=0;ii&lt;ll;ii++)
    - t4 Q/ r8 j) y  M( a: ]3 W  S" Y    {
    * P0 E8 r$ I4 |7 r3 e  k       cc=ss.c_str()[ii];
    ; x4 H3 H- r( z- R5 s8 N$ X       if(cc&gt;0xa0)0 @5 V: B0 K. k( c5 m" d8 A& a
           {
    3 ]: W4 c, B4 [2 T( J, v         ass=ass+ss.SubString(ii+1,2)+"\n";, y& @9 k* c  f% K: m9 @* J& ?
             ii++;2 T: \- G) |$ r6 O; V! M
           }
    + [. D% J9 M' T1 V7 B. f" ^       else) A- K4 O" ?( H$ x8 D) S
           {
    % |* }( B8 M. \6 `/ g/ a         ass=ass+ss.SubString(ii+1,1)+"\n";
    8 P% _- [: l9 B* k& S       }
    $ @% I, D2 E* [1 l( B    }4 Q; m; g$ \1 m6 c0 R6 Q2 F5 J
        return ass;0 O2 j% |/ h( v6 H( T& e
      }
    & f* M% j. \9 a0 Z  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    5 }% E- ]1 }, _9 H  t% m! c4.鼠标指向Label控件时改变说明文字的颜色& H0 }' B" g, X( e4 N+ F" `
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成+ c1 ~  ~: z' F6 I, j9 O+ t
      红色,其他的字体颜色变成黑色!+ e3 M+ W4 z! T/ c  Q
      下面的代码实现了这个功能:
    . D5 W, I* `1 w3 f# R1 s  void __fastcall TForm1::Test(TObject *Sender)" j# C# a1 d; _- x, S0 q
      {
    ) d7 _+ [& _' P* G8 z- a$ Z3 W    int i;' i/ H# c5 j# w2 ]
        TLabel *lb;& u# j* o+ T1 k
        AnsiString ss1,ss2;2 b8 S% r: ?8 R$ W- @! C
        ss1=Sender-&gt;ClassName();//获取参数的类型# z3 |% |* Z" G, r7 n0 A
        if(ss1!="TLabel")return;//如果不是标签不处理9 L  O+ `: ?( b% e7 A
        lb=(TLabel*)Sender;
    " v/ r. `1 t- i# I    ss1=lb-&gt;Name;
    2 [7 o" J  l6 X2 L( z    for(i=0;i&lt;ControlCount;i++)7 z" N2 C3 J( n/ i! H! G
        {2 [6 X  H" s, `% s5 U0 R; r2 y
          lb=(TLabel *)Controls;9 ^- s, K( a" P7 T% m/ P; O2 V
          ss2=lb-&gt;Name;* F, Y, {3 k% e
          if(ss1==ss2)
    4 c* @7 N/ w  \6 q, ?6 K0 {7 _, F         lb-&gt;Font-&gt;Color=clRed;9 D$ ^9 p; d" k  F0 T2 P
          else9 p3 a/ Y: Y( l# A% a% v/ Z
             lb-&gt;Font-&gt;Color=clBlack;% [3 R; z6 |# f
        }
    7 U" T* }. l* P! R2 H  }
    & G$ n( `+ s9 I' y+ E# P- t2 c) K. S  //---------------------------------------------------------------------------
    ! P6 ^- T+ @& X: h6 w1 P0 E  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,8 n" |# f: w: t% j1 s" B
          int X, int Y)$ ^' F8 l+ G4 O9 k$ K
      {
    % A1 q9 c9 `, i* n/ v1 ]     Test(Sender);
    # k) p5 D5 N- j9 A4 {  }
    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-6-11 12:05 , Processed in 0.395602 second(s), 51 queries .

    回顶部