QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3742|回复: 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控件显示多行文本- G1 U7 W" C* ~' F7 w
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:4 G6 i- V- Z+ y, w. e
      Label1->Caption="第一行\n第二行\n第三行";
    1 Y" y$ t7 ]- a$ u* H7 V  Label1->Caption="第一行\r第二行\r第三行";3 a% @) h9 q7 }9 U
      Label1->Caption="第一行\r\n第二行\r\n第三行";
    ! e" W7 K0 j3 z- T+ S2 x  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
    5 Q. ^6 e1 k. Q8 [2 D) P3 `1 E  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    $ N. q4 A, o  ~' K2.Label控件显示超长文本时自动换行+ Y% @, b* B3 E$ u
      只要对Label的两个属性进行修改。/ I4 \. o4 a9 Y0 V/ Z
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!2 j" X% k) ~. x; U# K
      第二个是WordWrap,将它设为True。9 r$ G- j" }3 i, m/ ]
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
    ! l1 u1 w3 {4 Z/ e+ }' o2 ^. J  这时的显示应以空格区分多个单词!) S0 V* n) o* U8 }* l: z6 D
    3.使Label控件上的文字纵向显示0 n4 g: v) L0 {/ j3 e
      最直接的方法是改变字体的旋转度和方向!; a* ]1 _' ?3 J+ \- n8 N  W: [7 Q
      下面这些代码实现了旋转的功能:
    $ g' E! F" [+ ~/ Z( ^: y" A  Z* G  void __fastcall TForm1::Button1Click(TObject *Sender)
    / b' l; A5 K5 K. e# k6 f$ F  {
    5 M3 U) D& w5 [# g. W. l0 m, [    TFont *font;$ [$ l1 b  v) f% @
        LOGFONT logfont;
    - R' s) ?) L7 Y    font=new TFont;  {! r2 m2 @6 p6 j! e$ \
        font->Assign(Label1->Font);
    7 \& O$ g$ j& }3 G) P9 V% V7 U; i    GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    7 p; P$ \* Y0 x    logfont.lfEscapement=-900;
      u' _7 g& c! n0 b) ~    logfont.lfOrientation=-900;
    , s* R- X; e) G, I+ q2 g3 T    font->Handle=CreateFontIndirect(&logfont);5 ]0 _8 o4 A' p7 n
        Label1->Font=font;0 t$ G& i$ W( R1 s0 \0 r
        delete font;
    ( j" q6 ]& h$ v2 Y8 |: z) F    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";/ F. z& `, l; ^3 u' ~  v( o
      }) G5 Y& i! M( W9 I$ s! _' g! S
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    # m3 O4 Z1 Y& h6 P  将Alignment设为taCenter。- d; P9 O( W. |& V
      
    ( e/ S; Q3 d+ J, `3 i% H  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    8 Z/ j4 j4 @4 p6 r% D* e+ s  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字5 {1 i( D& T8 G, u  g
      识别出来,整体分拆,否则会出现乱码!
    6 ]: x# Y# E$ C! C& e3 Y0 J/ o  下面的代码实现了这个功能:% A( W& k7 {4 ^: I3 D( j. S
      void __fastcall TForm1::Button1Click(TObject *Sender); [+ ]* b0 D$ B( R  N# v
      {
      _& z% D% m& K    Label1-&gt;Caption=VString(Label1-&gt;Caption);
    ' C) z/ g1 B+ ^5 U4 q0 F) a  i  p  }
    9 M# q' K) d! y- s1 s9 `  //---------------------------------------------------------------------------& X: S5 S& H$ s
      AnsiString __fastcall TForm1::VString(AnsiString ss)
    % ]- f1 v* I5 T  C) c  {
    ' k/ }% p$ x( @' X. }) m    AnsiString ass;
    9 f: \$ V+ r0 a8 G    int ii,ll;
    ) [0 ]' P* V: w; T* B2 T    unsigned char cc;; I2 k4 ~( R* y+ O% h. j+ f) r
        ass="";
    " t+ y! Y% s( p' {/ y' r    ll=ss.Length();
    - B/ J9 E- N2 S' R* v1 n" u5 s. g    for(ii=0;ii&lt;ll;ii++)
    0 t3 w! `5 o5 Q$ v8 P    {
    7 y/ r& u2 n4 U* y2 |2 T       cc=ss.c_str()[ii];5 V, [* S# W+ K) V) Q
           if(cc&gt;0xa0)
    % y% m, U- s, Z& Q: x       {0 U! V3 J! M4 K* m: i) A: L
             ass=ass+ss.SubString(ii+1,2)+"\n";4 \# |) b' w8 [$ a1 i0 ]/ j. [7 {, Q* K
             ii++;
    3 _! q* S. g7 i2 L$ |/ r       }
    , t8 y2 n/ W1 \5 w' y       else
    5 w0 g' J! i% u3 y       {
    3 C: F/ @& s/ @2 n1 h7 Z         ass=ass+ss.SubString(ii+1,1)+"\n";
    5 q( r  A5 P: A5 n4 ^       }! I. L& z, k  d1 d* i# i: ]7 N( M* }
        }6 _& \' P& {5 [& M) ~7 m
        return ass;, r* [! c& V. X$ {
      }
    . [: M, ?0 x- ~: z" m* }  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
      h5 N: W. W5 v9 v! R4.鼠标指向Label控件时改变说明文字的颜色
    $ N2 t! }( X, G  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成5 V' u/ D1 L) w' D5 z, \+ w
      红色,其他的字体颜色变成黑色!, C7 X" A0 V  i8 d7 Z8 g
      下面的代码实现了这个功能:, Q5 u: |, K$ e$ k, k; i8 z
      void __fastcall TForm1::Test(TObject *Sender)0 s  B; o* k5 w, \
      {  d6 v8 H) V; F2 Y. V
        int i;
    3 @; M* r+ w0 W. V' ?3 V7 D; G% B    TLabel *lb;5 Z6 N( |% t; l. y! q8 N+ }
        AnsiString ss1,ss2;1 G5 o& S# c; U+ G2 J- `: Y* E
        ss1=Sender-&gt;ClassName();//获取参数的类型( e( u0 l% E) A! K
        if(ss1!="TLabel")return;//如果不是标签不处理4 Y: L8 L7 Z4 Q* v' S3 a
        lb=(TLabel*)Sender;
      j4 N$ A, u" g2 O5 b    ss1=lb-&gt;Name;
    ; Y. f! S/ l( G: K& P0 r    for(i=0;i&lt;ControlCount;i++)
      ]) I5 X1 N- O: S# P4 O    {
    * ]3 s" I0 x1 L$ ?3 F& m1 ^      lb=(TLabel *)Controls;
    # f3 ?5 H  A- R+ V      ss2=lb-&gt;Name;8 k1 Y8 N+ d, g9 B9 P' b. W# m
          if(ss1==ss2)* ^: ]5 O% j, C8 v" h# e
             lb-&gt;Font-&gt;Color=clRed;7 n& ?% b7 z0 {+ \% h
          else
    " c1 l6 u' F/ ]         lb-&gt;Font-&gt;Color=clBlack;
    4 |1 U6 B! S) X5 J, m0 Y3 ~' Q    }
    " k0 Z# p" }0 p* Q# e: k/ K0 f$ B% H  }6 N9 ~" J/ ^6 n* t) N. T! \
      //---------------------------------------------------------------------------% i$ g9 L" z& l) M3 i* B( k2 J
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,, u0 Z# j" E" }* ]' M3 N  e3 g
          int X, int Y)% @( D. @5 Y( `% b" w1 l6 F
      {+ n8 Z; ?1 y; a
         Test(Sender);
    : x3 F( u# c, n  }
    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-21 01:27 , Processed in 0.433177 second(s), 53 queries .

    回顶部