QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3756|回复: 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控件显示多行文本* o/ m4 ]# f% T
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:0 v) n; K  }& H- W
      Label1->Caption="第一行\n第二行\n第三行";$ l! B) b1 C  V# \3 q! W
      Label1->Caption="第一行\r第二行\r第三行";8 H" Y% |' }) Q0 W
      Label1->Caption="第一行\r\n第二行\r\n第三行";
    4 l9 o" @3 C0 A, m& ]  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    2 l/ a, `  [3 X" H  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!$ M; K6 h4 i: g  M' [; C5 j
    2.Label控件显示超长文本时自动换行
    - J  A6 M' u/ f& k9 K) a2 J  只要对Label的两个属性进行修改。
    - ?" Z% k# I  i9 M( ]  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!0 u/ a5 H/ `! C+ K: W& w" ?
      第二个是WordWrap,将它设为True。
    ; N6 a2 @: H: v" O) c' R9 S& ?  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,! G- v( n! d$ O$ `5 O
      这时的显示应以空格区分多个单词!, L7 T! I, M" ]! ~
    3.使Label控件上的文字纵向显示( N: ], u5 G3 T, m+ p6 t
      最直接的方法是改变字体的旋转度和方向!4 i/ v- u9 O# M
      下面这些代码实现了旋转的功能:
    : O5 M# E7 Z. U  void __fastcall TForm1::Button1Click(TObject *Sender)
    $ \* N9 T( j* z, M  {! s$ Z' y4 g( f6 O. g2 n
        TFont *font;
    8 S4 G2 a% A2 j0 y# G0 ?! e    LOGFONT logfont;
    - v- n; |- o* u# {6 _, V: {    font=new TFont;
    ' L  G! r( S6 E, M    font->Assign(Label1->Font);( P/ E6 A* |9 X4 m9 c8 X3 i
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    3 z# B7 G+ T' E# `5 f$ T5 A' X    logfont.lfEscapement=-900;* J4 t) f' s6 {. w
        logfont.lfOrientation=-900;6 m! w$ s2 s( Q# Q3 i) l
        font->Handle=CreateFontIndirect(&logfont);; y& S/ ?2 H4 ~- b+ q
        Label1->Font=font;
    & i" ?1 m$ ~1 E( Z  c! `& g; x. R    delete font;% }! }# c/ P$ D/ v( G- K% O
        Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";8 H! q5 B5 k# i4 v) r4 T% Z
      }- N: E6 ?( K: }0 N) {! I
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!, b7 H% x4 ~0 L+ [  k4 u
      将Alignment设为taCenter。' N5 u* h* n; D0 o4 s" F7 w& Z8 L8 O
      
    $ T0 [  h  q# A# P* N8 V6 f* c  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    & Q' [$ l' ?% o* d% e  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字" I/ L- o; H4 a( ~' s9 k
      识别出来,整体分拆,否则会出现乱码!! W0 a4 X" a+ n# L( w! \( w
      下面的代码实现了这个功能:
    8 W0 k) O2 \- M2 v* I; i' o  void __fastcall TForm1::Button1Click(TObject *Sender)
    5 `' a* M+ p$ J- S" _0 _( P) {, Y  {6 z) X& U- v/ w( p
        Label1-&gt;Caption=VString(Label1-&gt;Caption);
    " j0 i: b) k! o5 W% Y  }3 u+ l! Z" E1 O- G, A) S
      //---------------------------------------------------------------------------
    / G1 I2 k" Y+ Z- G" H+ k, @: y& ^  AnsiString __fastcall TForm1::VString(AnsiString ss)( H: u' C1 |# ^) p4 n
      {
    5 Y3 Y3 _# Z. p; r' R0 z    AnsiString ass;, {2 g3 r  J: u: g9 D
        int ii,ll;) w  p: L, d7 O7 M9 o
        unsigned char cc;9 C: e/ o2 \) ]! e6 d* b
        ass="";5 E4 d, ^' y) h
        ll=ss.Length();8 O3 |7 @# C  a- X, K
        for(ii=0;ii&lt;ll;ii++)( P! R  b# O5 \% O- v0 L% N
        {% y% F7 ]5 o# ?, }9 w4 ~4 Q9 @8 \( J
           cc=ss.c_str()[ii];
    $ Q+ X* n! |/ A4 c4 J* p       if(cc&gt;0xa0)
    0 Z  E0 J. q4 f$ W5 G       {8 k  h/ ]$ V* A0 q8 c5 d
             ass=ass+ss.SubString(ii+1,2)+"\n";
    + g# R1 e9 z3 A" R% T4 H- p& c, Y/ z         ii++;3 X4 y% K3 \1 u
           }- c* e2 P0 p- F! P1 H8 T
           else
    9 i: p8 N, f. v7 O) u& x5 F+ F" {( L; h       {
    ; f1 Y: [; X" j5 r         ass=ass+ss.SubString(ii+1,1)+"\n";
    ) F$ o$ S3 D# y' T# i       }
    1 {. I  P2 T3 z, ]( C) _    }5 {' J% F8 r* M8 F6 L6 L! ^$ _
        return ass;' z/ f9 a$ P1 T3 p. [/ i' K
      }
    & O* ~5 r* n) \" [! w/ Y% Q  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    ! l: p# Y$ T+ T6 m: y8 Q7 m4.鼠标指向Label控件时改变说明文字的颜色
    1 {$ Q; B! h& u( B, \$ c0 u, |  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    . E4 c! ^( Y0 C% ~9 `; ?1 q  红色,其他的字体颜色变成黑色!
    - ]% r/ f! g" e$ H  下面的代码实现了这个功能:, A. j. G( Q& a% m0 Q, d
      void __fastcall TForm1::Test(TObject *Sender)# {8 `$ o0 ?* i; B. i
      {  n& O& b& ?. o8 e; C
        int i;1 A, Y# W5 D5 d  B( X8 p5 a9 o3 H
        TLabel *lb;+ ]' o8 O3 _5 D3 O
        AnsiString ss1,ss2;
    + O8 w- L, ^+ y: g    ss1=Sender-&gt;ClassName();//获取参数的类型
    5 q$ L0 |3 W' k) j$ p    if(ss1!="TLabel")return;//如果不是标签不处理2 O3 m# R; V' X: S
        lb=(TLabel*)Sender;
    / C# ~+ l# P) v0 A) q4 f! p$ w; ]    ss1=lb-&gt;Name;
      H; X) r' @; R+ {    for(i=0;i&lt;ControlCount;i++)* E1 a! A9 K) r& y7 ?# c
        {
    * F  n! R) N# k3 D3 n+ _% |" R      lb=(TLabel *)Controls;
    ; Z9 g! J0 W5 A9 \* m      ss2=lb-&gt;Name;* i9 W5 l: \' W4 n0 Y
          if(ss1==ss2)
    ' s5 V- q) g/ Y8 _  J) D         lb-&gt;Font-&gt;Color=clRed;6 r4 ~: S8 i( W) F
          else4 f& k* n1 E' d' L8 c5 U% A) X" y
             lb-&gt;Font-&gt;Color=clBlack;
    : `; n: u5 X& h: M    }: f" f5 Y' `" H8 B& Y% n
      }( I! P& a* p: V2 K6 u* h  x
      //---------------------------------------------------------------------------. v& m7 L! X& [9 }' e
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,3 D) R2 Z/ Q) l! l
          int X, int Y)
    % q- |6 x) ^- S  {
    3 x$ Z' }  |* g     Test(Sender);
    9 d( i& J) ]0 w' s  }
    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-12 07:06 , Processed in 0.345176 second(s), 50 queries .

    回顶部