QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3740|回复: 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控件显示多行文本
    9 K. i1 g. i' y: B3 Q& I4 L. ^  n8 S9 n  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
    ) x7 _) O9 i& F) x$ z  Label1->Caption="第一行\n第二行\n第三行";# V; I0 T; w+ s8 f
      Label1->Caption="第一行\r第二行\r第三行";
    5 H% o2 j/ G; [- H  Q. V5 R$ Z4 |  Label1->Caption="第一行\r\n第二行\r\n第三行";" Y: y$ q, o7 x6 u; {' [
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入" |% z3 R, ?( b* @3 |
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    " S1 m# H- \' j# W# l2.Label控件显示超长文本时自动换行3 n5 L: l) r4 D
      只要对Label的两个属性进行修改。+ [1 X! l$ r9 Q+ a5 e6 {. M
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    6 V7 v! q0 R1 G6 z2 I% d- q( i  第二个是WordWrap,将它设为True。; W3 y1 `; x. ?0 w  g2 t& p1 r# ^
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    ) _* {7 |, p9 F1 P" i$ c# h9 N% w  这时的显示应以空格区分多个单词!
    6 I) Q5 B- u- z+ e0 ?4 c" T3.使Label控件上的文字纵向显示: l. x' ~% |# c& m3 f4 ^
      最直接的方法是改变字体的旋转度和方向!8 u: u' L* ^5 y
      下面这些代码实现了旋转的功能:' ~! h5 u% [3 A7 N7 ~
      void __fastcall TForm1::Button1Click(TObject *Sender)) I1 \+ G7 T; L$ \6 l
      {
    ( U6 s3 A! O. v- \    TFont *font;
    5 ~& V  _* \+ J4 L4 N. ^9 q' }    LOGFONT logfont;
    3 P! o. Q* n5 P7 G- A0 f% @    font=new TFont;
      t( R+ V7 n' R* z* {: W, ^3 W    font->Assign(Label1->Font);
    . y0 i( U) b* H* X    GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    1 _# H7 V: S! V5 O$ T    logfont.lfEscapement=-900;
    : W0 s! |3 T. Z+ S1 B9 S    logfont.lfOrientation=-900;
    $ x" U; A. F+ Y6 a# F- Q+ e    font->Handle=CreateFontIndirect(&logfont);
    9 O1 B" L( d/ ?' q& {/ g; X7 P/ m, z    Label1->Font=font;
    ( @* T2 z2 ]5 ~' r, |& `" N    delete font;
    * |2 C5 `2 Q$ f7 r2 G0 f  h& z+ |- O2 l    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";$ b2 R$ d8 Q/ ~
      }* _" ~3 Q# ~+ m. P
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!% X* P1 u: a7 }0 J/ v
      将Alignment设为taCenter。! g" B1 U% D4 W* l! |9 d' S
      # N6 K: U7 B/ j7 d0 C
      还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的5 ?5 h+ a) [; a$ B
      Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    / T  p9 n3 G' b! V4 s; W  识别出来,整体分拆,否则会出现乱码!
    # E3 V' r' |3 P  下面的代码实现了这个功能:1 i9 D" b9 m9 N5 Z
      void __fastcall TForm1::Button1Click(TObject *Sender)% m- F: B+ x5 U/ H3 q4 Q
      {
    * f$ [9 g% c2 z    Label1-&gt;Caption=VString(Label1-&gt;Caption);
    4 }8 Z$ u: R7 O+ O/ M  }
    2 p/ K1 l; v. x, K# K4 V  //---------------------------------------------------------------------------* r( J3 `9 M; J1 C
      AnsiString __fastcall TForm1::VString(AnsiString ss)- ^( H2 h! @7 |
      {
    / ?7 i- y! \- R+ V+ C8 }    AnsiString ass;
    ) p. m8 c" f- l  X8 x* u6 t    int ii,ll;
    * x: b. k. m+ F  I, _' K3 i# \    unsigned char cc;1 o0 F& n6 G" n* C3 ^; X' U. e' o/ i
        ass="";
    9 i+ H8 P4 p6 e' J    ll=ss.Length();. e. C8 {5 X# G& {; G
        for(ii=0;ii&lt;ll;ii++)1 }; h0 l, m, o- C5 @! ]% O& g% g
        {& Z( i/ }/ u1 K+ P0 G; @
           cc=ss.c_str()[ii];0 w% X2 K: e- ?+ n1 k
           if(cc&gt;0xa0)5 F1 `) D0 O9 M! }
           {
    * u) C7 p  h, G4 m! s2 c0 X5 ?         ass=ass+ss.SubString(ii+1,2)+"\n";
    ( J8 b% g6 b! ?6 u         ii++;8 C# }0 m1 J6 k6 f
           }
    & m- p( l3 W0 Y2 X       else* v1 [* n9 A& E) Q- w
           {: A$ j6 S$ m8 x# r" o' H& j
             ass=ass+ss.SubString(ii+1,1)+"\n";
    # b  A$ A) e% K( x       }
    7 `. Z4 O; d, u# a; g0 A0 m; R    }
    , R4 H/ E& Q$ y, t  Y" K6 s0 u    return ass;/ X3 O9 Y1 h9 z# {) u( Q+ b
      }
    . S0 x  n3 y# ]: I# D5 K# X; P  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!9 x; K! V6 l" {9 T' @; d
    4.鼠标指向Label控件时改变说明文字的颜色
    ; |; i. h) Q# T  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    3 Q! H6 I& {4 @! B  红色,其他的字体颜色变成黑色!/ h9 ]; _2 G0 Q. t6 K: O5 H
      下面的代码实现了这个功能:
    5 X( S# S, \, X+ Y- M* Q- a+ r  void __fastcall TForm1::Test(TObject *Sender)
      W: K" `: H% l$ i" F, ^3 ?' x7 E  {& Z/ ^1 \7 K9 p: J% w2 N7 e
        int i;& |3 y, l7 M- |/ U- y
        TLabel *lb;$ d) F4 t' W# E2 }! F& Y
        AnsiString ss1,ss2;
    3 `4 Y6 ^9 Z; B    ss1=Sender-&gt;ClassName();//获取参数的类型1 d4 S* l2 ~; A* M% J
        if(ss1!="TLabel")return;//如果不是标签不处理: F; ]- x7 n8 w6 a0 i
        lb=(TLabel*)Sender;4 G' r# ?! U0 ]& ]6 _. x
        ss1=lb-&gt;Name;
    % L1 L/ V. \9 D    for(i=0;i&lt;ControlCount;i++)
    * ?# p3 ]0 k! V; d- n    {$ |% z/ K3 _2 T: s
          lb=(TLabel *)Controls;6 `0 L1 a6 Y" V0 `
          ss2=lb-&gt;Name;, p8 r) O9 j: j) Q4 B# z+ t
          if(ss1==ss2)
    6 h5 C. G& Q9 H% s3 l         lb-&gt;Font-&gt;Color=clRed;9 t' ~, W' p8 `
          else
    ; O3 n% r8 D) i3 X" [* \9 ?( `         lb-&gt;Font-&gt;Color=clBlack;
    - s3 t: b9 J# Z$ ^* {    }
    9 _; q8 \4 ]1 c2 j+ b  b5 C2 D  }6 v* ~+ W! g* k- z; ?
      //---------------------------------------------------------------------------( l/ H- m9 f7 x/ Z& K: s
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,& Z( I  X1 s, m0 n
          int X, int Y)
    7 G' r# [/ I" \! F% B! T  {
    1 `% ]$ g4 @9 ?3 H2 R     Test(Sender);
    ' M  }7 J3 s  O' Y: T6 u. ?0 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-4-20 20:30 , Processed in 0.443054 second(s), 51 queries .

    回顶部