QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3741|回复: 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控件显示多行文本: F9 ^9 X& p& R; W" Y  L
      可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:0 P, n3 b# p$ u  N
      Label1->Caption="第一行\n第二行\n第三行";9 i3 Q4 y% U; P7 B
      Label1->Caption="第一行\r第二行\r第三行";; X" a  R" {& g9 J
      Label1->Caption="第一行\r\n第二行\r\n第三行";  Z% H( C8 O0 b6 E  ^) H
      但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入& O2 @$ M! e& e* l) D' I9 A
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!4 R; t0 c2 e4 F+ V
    2.Label控件显示超长文本时自动换行5 l, w. f" N% d' R! c2 F) [
      只要对Label的两个属性进行修改。% T9 z. _1 v& g. K, \
      第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
      u+ n$ t. l# m5 U: |! F  第二个是WordWrap,将它设为True。; O+ R7 C, {" }9 _
      注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,; }* F1 i( o: [% X# F, d2 B) \: w
      这时的显示应以空格区分多个单词!
    ( [1 o% e+ p+ ]3.使Label控件上的文字纵向显示
    6 L! d' L, |; J; P  最直接的方法是改变字体的旋转度和方向!: ]7 D7 J/ I& }1 m0 k
      下面这些代码实现了旋转的功能:
    " q; F' W) R' l% ^9 t  void __fastcall TForm1::Button1Click(TObject *Sender)5 k8 b' h$ N" ^2 {* l
      {- W- P5 q  x* j2 ]4 ?
        TFont *font;1 }4 k4 ]  S* A1 T" i0 g
        LOGFONT logfont;
    # j' q3 N/ @) k5 F+ L    font=new TFont;
    7 O3 l+ d. L8 T    font->Assign(Label1->Font);  J* u7 r% R9 _+ o1 }4 S
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);0 ]) f. v5 T7 H0 J) b% U" B( {
        logfont.lfEscapement=-900;
    - @' |3 B7 e: u, o* X+ Q: s2 @    logfont.lfOrientation=-900;* y* m0 ]& U- t  Z: n; k
        font->Handle=CreateFontIndirect(&logfont);
    6 Q% i+ S3 Q: O    Label1->Font=font;5 D5 L. T- I- S8 @
        delete font;
    ) O/ b3 l& a& _( B8 N- S    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";& r$ x( U# b8 z
      }
    : q1 e- T7 F' C  L4 p8 g! }  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    / B/ f- H$ w3 U+ j& A+ J& X- G  将Alignment设为taCenter。, d4 [+ C- W1 r/ z( Z" P
      
    - ?- K! V! D' R9 |/ V  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    ! @7 p3 T, b: Q  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字0 F5 B7 [5 Z/ `  T: m! z. i( P* W& g
      识别出来,整体分拆,否则会出现乱码!
    1 y  H& b% t) `9 F  下面的代码实现了这个功能:
    , z/ Z/ r+ B3 M  Y* e  void __fastcall TForm1::Button1Click(TObject *Sender)
    , D& M3 Q* O6 j  {
    1 L! {; B! s) I% x' z    Label1-&gt;Caption=VString(Label1-&gt;Caption);
    + @; T+ o6 Y/ O+ B  }
    0 c2 h$ a+ R! l/ R. j  //---------------------------------------------------------------------------. A1 U/ F) Y& l. J' K1 I
      AnsiString __fastcall TForm1::VString(AnsiString ss)2 Y' M% U4 |1 B
      {
    . y6 E) L! r4 A% L; B: ~    AnsiString ass;
    ; c# l+ F  \- U8 ^9 K) O9 ^    int ii,ll;$ P. b7 V( g. b5 p% h# X% @8 }3 M. l
        unsigned char cc;
    ( x' l" z+ ?1 ^# d. o# H9 r2 r5 Y    ass="";
    3 {5 _# p" S2 u; w7 J    ll=ss.Length();" D4 G. ~( W4 }7 k$ |) R
        for(ii=0;ii&lt;ll;ii++)3 m0 W! |4 T1 w# h
        {# Y$ g5 C' t3 z* {/ @8 G6 h
           cc=ss.c_str()[ii];! c' F0 i! v" E+ C+ B* V
           if(cc&gt;0xa0)
    # H* W" ~. E$ \* K% q% A5 h       {4 F9 C. Z" }& j$ P. {! k- q
             ass=ass+ss.SubString(ii+1,2)+"\n";, P; t! v5 ?6 H6 h1 k
             ii++;
      a( U2 m8 g- D: ^       }
    9 Q4 t7 v& ?! u1 \0 M' G( B5 B3 O8 `* }       else
    $ I6 C% ]7 h) J$ D1 u" d       {
    3 N+ Q1 r% K7 G7 e8 s" g% f         ass=ass+ss.SubString(ii+1,1)+"\n";
    4 [% I* @  o: `6 j0 i3 Z7 ]       }! Q% K  f( k" X1 ~& r1 q
        }% ^5 z( q: K: }( Y. d
        return ass;* b0 w0 |6 p  h" n- Z: r
      }% ~& G3 P) D( Z, H3 [
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!# `. f* i$ S# J  C
    4.鼠标指向Label控件时改变说明文字的颜色
    , Z5 E$ e3 z4 Z7 e3 a: G1 S  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    + O6 \9 S1 x7 b* Y6 ~3 U5 k  红色,其他的字体颜色变成黑色!
    7 X2 v3 `% j- R  U6 U  下面的代码实现了这个功能:
    5 v: i+ k6 f2 v7 t9 X2 E  void __fastcall TForm1::Test(TObject *Sender)1 ~; s# S2 `% f
      {: e! f0 {! m7 E* N8 A
        int i;
    8 F8 z( U! ]* A# M$ N! q6 s    TLabel *lb;" |, X1 p5 Q  y7 C2 R
        AnsiString ss1,ss2;
    / }3 V- O% d) i! v$ ]+ f    ss1=Sender-&gt;ClassName();//获取参数的类型4 _1 ~3 S+ o5 b
        if(ss1!="TLabel")return;//如果不是标签不处理: P1 r' _' W% o$ O/ H
        lb=(TLabel*)Sender;/ F- L3 w$ A& F" t- I; G
        ss1=lb-&gt;Name;/ V( w$ j" W0 E- U' n( V2 Y
        for(i=0;i&lt;ControlCount;i++)
    7 ?5 h: E/ ?; s4 M    {& |9 Z. D! C! P% r" t& C$ c% S% T
          lb=(TLabel *)Controls;& Z2 F4 ]/ ~8 L' [2 c* N
          ss2=lb-&gt;Name;" ^, o# A3 u( _& @. m
          if(ss1==ss2)
    : l+ u3 k* _5 ?% g         lb-&gt;Font-&gt;Color=clRed;; m' L, M' X! q
          else
    5 m  A" x1 S, X* w; n  \         lb-&gt;Font-&gt;Color=clBlack;
    1 t9 I4 u2 e) K7 A( |    }
    9 K" P/ z* A/ A+ s* d" W( v  }
    * X$ }6 G; b: k: n  //---------------------------------------------------------------------------
    5 R) b& X' x) A* r" a9 T, _  void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,4 Z( @3 z. _! h( D
          int X, int Y)6 C% x9 E0 x$ G$ ], }
      {
    & y3 _6 U. e" }4 N0 b     Test(Sender);  h" M4 j7 i& s7 l9 y- L' i
      }
    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 21:57 , Processed in 0.394396 second(s), 50 queries .

    回顶部