QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3765|回复: 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控件显示多行文本
    * {' p+ a5 |) h1 y3 i0 S3 U, K  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:% O" v$ g9 ~% D) f6 ~
      Label1->Caption="第一行\n第二行\n第三行";" y$ V$ o; f! _9 P/ t
      Label1->Caption="第一行\r第二行\r第三行";( U: f8 w2 Q$ Y8 C; H
      Label1->Caption="第一行\r\n第二行\r\n第三行";
      q1 @  o: _# f4 F  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    0 M, s: G! q. U% k! s  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    9 C$ A: C$ U5 u2.Label控件显示超长文本时自动换行
    ( u# W3 E) v; p1 S  只要对Label的两个属性进行修改。
    & x1 o( F% p. x. D& e0 Z" Q  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!& x7 F/ z, l; j5 r" [: l+ t& H
      第二个是WordWrap,将它设为True。8 W8 u' f: o$ |8 G
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,% @6 \6 p% ^7 [7 P( `0 ]
      这时的显示应以空格区分多个单词!
    . P- l8 b; W' g3 U3.使Label控件上的文字纵向显示
    2 O5 h1 J4 _) ^" k. y  最直接的方法是改变字体的旋转度和方向!
    0 B7 Q! C- S5 Y; M  下面这些代码实现了旋转的功能:' }* K: u% L: t- L
      void __fastcall TForm1::Button1Click(TObject *Sender)& _1 \& Z* Y% ~4 W1 d
      {, j3 [( u2 f5 T; G4 {+ z
        TFont *font;. y, b# I0 R* y
        LOGFONT logfont;
    ; e$ j- v( T, O: C' c" F( H) w$ w" v    font=new TFont;
    1 j- @3 l6 v; D. B. j    font->Assign(Label1->Font);3 c! }: K& l) W& }5 X
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);. \0 Y. Z. x4 O% m0 `" O
        logfont.lfEscapement=-900;
    3 u, l) p7 h  T3 y" }2 }    logfont.lfOrientation=-900;2 T# S. s& I+ {- f9 Y( ]
        font->Handle=CreateFontIndirect(&logfont);2 _" }# n3 J  G! ^4 \' ^
        Label1->Font=font;
    " C5 t3 e. c) _/ V+ Q4 S% c5 ]    delete font;0 O6 T. C6 E( G5 W. j6 q0 j! w( @/ I
        Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
    ! _" |9 N: E3 v+ r4 L  }: O5 N. q0 |! Y$ k6 C+ s
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    * o& m5 u+ C) A) N! M  将Alignment设为taCenter。0 N  {& w% U  G- d% n) u
      . Z0 u3 [5 [# Y* r9 Y6 A. ?& l/ L
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    ) Q1 {4 R7 r1 e# ~& D0 O, A1 c  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字- k5 T4 q+ E' a- q: ]) [, I; e
      识别出来,整体分拆,否则会出现乱码!8 H; y( ]' [. A4 u1 Y
      下面的代码实现了这个功能:/ O  x( v9 r, j. `/ R. M/ j* r7 z
      void __fastcall TForm1::Button1Click(TObject *Sender); P1 L' ?* f0 z/ c
      {* R5 J* s( V9 T0 E  f
        Label1-&gt;Caption=VString(Label1-&gt;Caption);) b6 L# T) ~* C
      }7 y% X- Z  I* X  @- G: I; V
      //---------------------------------------------------------------------------3 N  D  f0 }! e7 Q7 E
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    % K; t: t! e* Q8 x! s+ t4 S  {
    1 Q" B+ T7 [. p& S, K& e4 l    AnsiString ass;4 l% A4 U2 M, f2 ~: H
        int ii,ll;
    % q# u+ o& i. B1 E    unsigned char cc;4 h/ e/ X9 P7 a) W! d8 c: E1 V
        ass="";
    " ]' H7 W5 D" m; s' `# f    ll=ss.Length();) O8 Y. w8 `7 D9 L7 v! g7 y+ M, z
        for(ii=0;ii&lt;ll;ii++)
    * U5 Y( j' }; u+ x) U* F    {
    & N1 Z* q0 A$ m       cc=ss.c_str()[ii];" P. c7 }1 U) G) s( w9 I
           if(cc&gt;0xa0)7 {  E6 [# Z% z: D7 F$ k
           {
    , K" k9 W1 p9 [3 D9 P         ass=ass+ss.SubString(ii+1,2)+"\n";
    . {# E0 I. P1 a         ii++;. y5 B! u& T9 q% _3 W& _, l2 @
           }: }% V5 l! \' ?% O5 A; B
           else" ^9 H$ F7 Z; [5 u1 e
           {
    . B& i4 s+ K* G) g9 e5 {8 r6 @         ass=ass+ss.SubString(ii+1,1)+"\n";
    ! m9 p. x4 X0 j, |9 b3 c  U       }
    0 J5 j7 z/ V, ?( m2 ^) `2 M    }5 `8 h* P( m* Q6 K) r5 ^
        return ass;
    ; x' r# j* o9 M. w7 _, N- v  }# [* @- H% r. r, q
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!, o+ C6 t" E# x9 X" X. r# X
    4.鼠标指向Label控件时改变说明文字的颜色
    , |- c7 q8 P- }0 V1 C, j  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成9 k" S, @+ R* e8 p- e; F) p
      红色,其他的字体颜色变成黑色!- Z( f" O  D" c2 c3 @8 H3 {6 Q
      下面的代码实现了这个功能:; Y# {5 Z1 T! w9 X/ y
      void __fastcall TForm1::Test(TObject *Sender)+ \1 x% M4 [; H4 f
      {
    # Y$ ~, B, s2 G* Z  l, J" w( u* Q    int i;
    / s0 e# H; a2 ?/ u: ?    TLabel *lb;
      y/ H" [1 U+ r  N- ]" Z9 F4 k8 A    AnsiString ss1,ss2;
    5 [. v3 i/ {; Y# O  Y1 }3 e    ss1=Sender-&gt;ClassName();//获取参数的类型. n+ j6 q1 J+ V% O# m7 _, e
        if(ss1!="TLabel")return;//如果不是标签不处理/ x( L: \* h4 _; p& n+ X1 v
        lb=(TLabel*)Sender;* p0 ]# `: O5 E. J; j
        ss1=lb-&gt;Name;- t$ L  @/ U) N! B
        for(i=0;i&lt;ControlCount;i++)
    6 {) @) c4 p: F6 r" A$ b' w  W1 p    {$ l: u2 L0 `; W! e+ q, |  X
          lb=(TLabel *)Controls;
    2 O8 m9 S9 p' n% ?. H& t$ v      ss2=lb-&gt;Name;% _' [: }* V+ u* p  V
          if(ss1==ss2)
    3 A4 |! F" K& |7 u5 n7 J) q         lb-&gt;Font-&gt;Color=clRed;
    * |* F: S- Q" k8 i. P- h      else/ [* K: z- @' I" X9 f: v' n
             lb-&gt;Font-&gt;Color=clBlack;
    5 U! l4 c1 l  w2 D. F6 ~6 U    }
    9 e4 G. V  W0 M  }  a& t" a  E& M4 c$ t6 D
      //---------------------------------------------------------------------------
    8 A/ T, p; Z) T3 T  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,0 K* [) g# s: G5 Y4 A1 D0 H
          int X, int Y)0 l0 o9 ^# h6 I0 O
      {* U$ C. n+ |* O9 e& z
         Test(Sender);4 B# ?7 P. d# b  }
      }
    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-7-21 01:39 , Processed in 2.111113 second(s), 51 queries .

    回顶部