QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3754|回复: 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控件显示多行文本' j0 c3 j, w  p/ A" |. s
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:- w& n, L. J! c
      Label1->Caption="第一行\n第二行\n第三行";/ Q- r( s7 @1 J: C) `+ S
      Label1->Caption="第一行\r第二行\r第三行";- k6 C8 o: l- Y0 E; `  B! h# O" _
      Label1->Caption="第一行\r\n第二行\r\n第三行";
    2 ^& l% S& O: b0 i  Z# Z! u  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入, j1 R& q% w* t. Q7 f# o# w
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    5 r$ d' b; P: C6 i& ^' v" F6 U2.Label控件显示超长文本时自动换行% D( h$ T1 h- V
      只要对Label的两个属性进行修改。0 N. t- G% c: `2 v5 ~
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    ; f* b2 E( C; j' P" u2 I5 b( M  第二个是WordWrap,将它设为True。
    : h! g3 L) m* l" ^' ^  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    + B6 M) y/ }  Y+ c3 W6 [  这时的显示应以空格区分多个单词!5 d3 \8 G9 W' H% P2 y. }5 W; W
    3.使Label控件上的文字纵向显示( S8 ]2 {; J, m) r& s  G& ?6 b! k5 w! j
      最直接的方法是改变字体的旋转度和方向!
    4 S+ y% o3 _6 o: y  下面这些代码实现了旋转的功能:
    3 d( X6 l+ e/ f" L1 G* u  void __fastcall TForm1::Button1Click(TObject *Sender)
    ( j; j% G+ }# V9 s  {; d/ d$ w6 u' `! c
        TFont *font;
    4 I: @& ~4 e8 @; i    LOGFONT logfont;
    ! o8 A  c" O8 S$ e6 z; W. R! I    font=new TFont;
    2 l3 R8 ^; i  ^6 S3 R    font->Assign(Label1->Font);0 C. g' F5 ^5 ]; t
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    & q! \/ n* t% [% _0 y    logfont.lfEscapement=-900;1 E- p! c4 P! Y
        logfont.lfOrientation=-900;
    * c  o% l$ L1 \/ v4 b3 I    font->Handle=CreateFontIndirect(&logfont);
    & ^: l9 t+ B! F1 X8 r# w    Label1->Font=font;7 H' ?* a9 a% D
        delete font;
    8 o- ]% U3 C6 L, v    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";3 }' k; r# D% E& d- V4 m4 r
      }) x; Q. z$ N: S* a: }- P1 o% ~, @
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    6 r5 s9 [" g& s  将Alignment设为taCenter。4 R! c5 r0 T/ ~/ c1 N
      
    : @2 ^' K* m5 G: L& t; m  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的7 E1 B$ L$ I: Y$ x/ Y( M
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    ( q# q( Y& W; V( b$ ~( |  R' `  识别出来,整体分拆,否则会出现乱码!- _# v- [; c) b+ _5 L3 b- N5 I" E1 w
      下面的代码实现了这个功能:, B5 c; W" z. [2 d$ `  r2 {
      void __fastcall TForm1::Button1Click(TObject *Sender)# a8 R7 B* O& b5 Y8 u( y
      {$ Y( G0 `" ^1 A5 _, X. e, `
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
    0 _# z. X2 S# T# v$ s7 l- X2 w  }
    9 }- u3 j3 u$ d9 [  //---------------------------------------------------------------------------  }1 ?7 K9 P  `" ^' D# D8 M0 l
      AnsiString __fastcall TForm1::VString(AnsiString ss)+ W/ M9 Q7 U& E4 ~
      {2 |5 R8 j/ h( N" n$ A
        AnsiString ass;; j3 `; V4 z3 M7 S0 j
        int ii,ll;: K& l# |# C* p9 [
        unsigned char cc;+ V3 q  F5 O; y$ S/ c
        ass="";
    # z/ g5 w  N# P9 N; F, I, b  U    ll=ss.Length();9 p6 X; N3 q- c0 F% f* C
        for(ii=0;ii&lt;ll;ii++). N9 U  Z0 M3 i% u* Z; _5 G7 q
        {% A: ^3 s9 ~. N3 N1 |5 ?. ~9 N4 s) i
           cc=ss.c_str()[ii];
    8 @; {6 E, C6 C' V6 X' m) u       if(cc&gt;0xa0)  h2 v0 F7 X0 j% e) `
           {. o. J7 }: U: p( S" ^9 P: o
             ass=ass+ss.SubString(ii+1,2)+"\n";& Y' ^3 P# N; F
             ii++;
    # G+ w2 A) {- K3 f" ^% A1 i       }
    1 g7 d/ c$ m  J% s4 C       else7 v5 x) P- l/ T8 \" E
           {3 z, @% U9 o4 c- P- k' b
             ass=ass+ss.SubString(ii+1,1)+"\n";
    # J' D2 r( i% |& ]- k" J2 Z: G       }
    0 A5 g: m( \  [; \, B, Y% u    }
    " y6 h( f; M, V2 R( e    return ass;
    3 F" N4 o8 T- M9 s7 S. z/ o  }
    : ^) o6 B: E/ n$ |& y0 H  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!( Y% T" a) ]& m: F
    4.鼠标指向Label控件时改变说明文字的颜色
    3 ]) y% d& ~* H# l* s+ r* R" Q$ K  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    + S! I& D8 g! U9 {  红色,其他的字体颜色变成黑色!9 @5 u- `# M( Y5 j
      下面的代码实现了这个功能:! h" ^0 K7 t! d, C3 r$ @) g  B
      void __fastcall TForm1::Test(TObject *Sender)" m  R7 p+ Q4 M* m2 U1 e
      {
    7 {! z, z) t- R3 q8 k* d+ {    int i;
    % w( G% g- Q6 ^    TLabel *lb;
    $ `8 w6 o" f  j; C  n9 t    AnsiString ss1,ss2;8 c. H' G" o* Y/ s: }3 |3 @
        ss1=Sender-&gt;ClassName();//获取参数的类型' i7 z1 Q  ~% W  f
        if(ss1!="TLabel")return;//如果不是标签不处理
    / D# N2 A. c! A  ^5 g7 n1 o: b    lb=(TLabel*)Sender;- f1 C: ]4 G$ A' o' q, D
        ss1=lb-&gt;Name;' M3 d5 ~2 ~" h: r* e% E
        for(i=0;i&lt;ControlCount;i++)+ d% ]+ J7 k: c5 m* m. c+ r- ?0 T, ?2 U
        {, j7 P2 b: o/ Y7 {& n
          lb=(TLabel *)Controls;
    ( O6 h0 F9 v4 q5 p( y      ss2=lb-&gt;Name;3 X5 J+ @5 A1 f7 Z) v4 M1 _
          if(ss1==ss2)
    ! i+ {2 Z- ~9 E; K+ I% c* N         lb-&gt;Font-&gt;Color=clRed;
    . o8 C8 v- R9 p/ O      else
    + o) `* g1 P5 N) Z; r! y2 M         lb-&gt;Font-&gt;Color=clBlack;, x1 x7 \& w: Z) _. Q" r* d
        }
    ! O5 _6 @% J) F, V2 O  }: T, T4 h; X/ `, j1 j/ `. r
      //---------------------------------------------------------------------------' M: C2 p) C) S& y: h
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    + y* }! \, U5 H- ~4 C$ Q+ h( h* R- c& C      int X, int Y)- T& _; s2 B4 F# s2 A9 U
      {. |- d- j5 G) W# M- w: r7 V
         Test(Sender);
    9 ]0 s9 ?+ T( z( w# v  }
    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 21:18 , Processed in 0.415423 second(s), 51 queries .

    回顶部