QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3810|回复: 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控件显示多行文本
    7 Q7 J. }; {5 q  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:' g# Y* k. o& L1 \5 G, |1 `- K2 X
      Label1->Caption="第一行\n第二行\n第三行";( c) H, N8 q' i. I  s
      Label1->Caption="第一行\r第二行\r第三行";& V' \7 d0 N# A& ~. Z
      Label1->Caption="第一行\r\n第二行\r\n第三行";
      C8 n' H: ~) z7 W4 V  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入  G6 M. n" ^! C$ w/ q6 d1 C
      "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
    6 u( C: _. f3 W# j2.Label控件显示超长文本时自动换行# t- x! u. y# Y+ Z/ h
      只要对Label的两个属性进行修改。
    4 x+ }" i( h, f' h  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
    ! P3 G& I- v: K1 R# b& f1 i  i  第二个是WordWrap,将它设为True。
    4 }" [& r( t' [# c/ A1 j! n% \  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,  F1 b7 ^# V9 g4 m' X
      这时的显示应以空格区分多个单词!( W- m5 z% j! _2 ?! y$ ^( i
    3.使Label控件上的文字纵向显示
    $ K7 h, N- {; G; T  最直接的方法是改变字体的旋转度和方向!% ~+ G$ a- |3 \, ~0 R9 K. F
      下面这些代码实现了旋转的功能:: U2 }& l5 Q+ _  f
      void __fastcall TForm1::Button1Click(TObject *Sender)
    $ t7 C+ d2 K+ q; l, {) e  {
    9 B; l. K. q4 C& I4 x3 n( `    TFont *font;
    & i; D8 m. }) K, m/ L2 I7 ~9 s    LOGFONT logfont;
    3 s3 E+ T+ n4 l& }( j4 A7 z    font=new TFont;6 Z$ E0 H' V( ~, p3 ]& ^
        font->Assign(Label1->Font);* Z0 ?/ \; e, W& x! I* |
        GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    4 x2 l% c, a/ I* a  L: R5 s    logfont.lfEscapement=-900;/ m; @3 r( C8 P' O
        logfont.lfOrientation=-900;
    5 D. f5 u; _1 C5 d8 w    font->Handle=CreateFontIndirect(&logfont);
    ' Q* X0 b9 x9 ^& g0 U1 J! H    Label1->Font=font;- O# f# f1 u& E+ U# P, j' F
        delete font;( t- J) a- S! T$ J* u; {- n$ X
        Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";5 I% ]- w  q$ C: h( |
      }3 m6 F/ y+ l0 l( P+ @4 [
      这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!: U0 a. [  C2 w3 q2 c, ^6 x
      将Alignment设为taCenter。% C& ^" H" x, \/ h
      
    ) f, j+ C" F( e# Y: t  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
    4 X8 O. m' w! T/ |! l! E  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
    " N6 D1 r& l/ w( f8 M3 h  识别出来,整体分拆,否则会出现乱码!
    % T( c6 L: n( H7 T6 C. i  下面的代码实现了这个功能:
    8 [7 `( b( r. N$ m1 y  void __fastcall TForm1::Button1Click(TObject *Sender)/ {$ W, R/ Q* M
      {8 B" p" k% p1 ^) l- y
        Label1-&gt;Caption=VString(Label1-&gt;Caption);6 I5 k3 ?& ?. Q2 W7 w0 E/ e7 o
      }
    8 g* \: |! s8 K: X7 |9 M# g  //---------------------------------------------------------------------------
    ' O( c' ]. U1 ~! }! ~2 @* N  AnsiString __fastcall TForm1::VString(AnsiString ss)( B- |+ q) Q$ u7 Q
      {
    7 T! I* e/ L; x* a! U    AnsiString ass;
    8 H+ m! A( e& G( a. M: D    int ii,ll;* w9 s- z# t) x& L
        unsigned char cc;; `# \7 ~8 @- |  R. L: ~- A9 S
        ass="";5 j: r7 n3 a- z7 \
        ll=ss.Length();1 ^$ l: l2 }# \: b  @& ^
        for(ii=0;ii&lt;ll;ii++)
    2 Z; [% K1 H$ z. J5 X& _' L- f    {$ l, E: s4 c0 Z; e5 F
           cc=ss.c_str()[ii];2 V' a7 H, s% h2 e
           if(cc&gt;0xa0)$ R& k2 |: r9 m  o- z
           {$ W+ A9 r1 ?" L7 `& Q  b1 T
             ass=ass+ss.SubString(ii+1,2)+"\n";
    ' ]+ {$ G$ E" X' ^" _2 l/ v* A         ii++;
    4 p3 y- L& I# d. E# N9 R+ @       }
    ! u1 m# A6 @# M       else9 l- F4 G7 W/ S. Q$ |' R
           {
    . J7 H7 T. o* n3 [         ass=ass+ss.SubString(ii+1,1)+"\n";
    $ C3 R- z& h! u9 [/ X- m, ?3 u) A$ l       }9 T4 l5 R; T& f% y7 |3 l, j
        }% H4 g  m9 O1 E* j+ L; U3 T
        return ass;* d% x4 L# [4 \0 t( k5 k: w7 w
      }
    4 V: B# p1 X1 v. _8 e; |" v9 e; [  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!0 S7 q7 H8 {6 `/ @- R
    4.鼠标指向Label控件时改变说明文字的颜色( B+ ?: N9 |" ^, P2 p
      通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
    2 g$ ^' Q8 t* v$ ?, e" R  红色,其他的字体颜色变成黑色!/ O9 I7 V/ q0 R* p- t' u7 r+ {
      下面的代码实现了这个功能:, E8 R9 x/ w/ S. ]2 v: m( l) w
      void __fastcall TForm1::Test(TObject *Sender)
    7 v6 w0 e$ u) j! ^  {
    + L0 F8 r6 U2 l& M    int i;
    : Q' g1 h; f# y( i    TLabel *lb;/ ^. j* v. r; e7 m% b3 w
        AnsiString ss1,ss2;
    3 V, r* l0 r+ `+ E* l    ss1=Sender-&gt;ClassName();//获取参数的类型5 U+ Z, n5 E# [) p# U
        if(ss1!="TLabel")return;//如果不是标签不处理; H$ P+ k% x/ B% U/ T. H& t- @. Z4 |
        lb=(TLabel*)Sender;0 s2 d! C/ M8 F! D$ x, J5 V5 x/ U
        ss1=lb-&gt;Name;
    # p& f3 N" w" T0 A" {    for(i=0;i&lt;ControlCount;i++)
    9 E9 v' G" X( y# M    {" p8 U+ G% v2 q2 Y0 h5 C: y  M) o2 M
          lb=(TLabel *)Controls;
    6 G$ H# B; K+ P* Q. b8 _) a- Q      ss2=lb-&gt;Name;
    # Z  i1 d- B$ i      if(ss1==ss2): r! ^$ Y/ e1 |# r
             lb-&gt;Font-&gt;Color=clRed;# t  t; W* p5 C4 R" I
          else6 v4 p$ Y& |5 T! R1 S6 N
             lb-&gt;Font-&gt;Color=clBlack;3 X# b0 b( F. F! R& }6 {- r
        }' N! A* Q, [$ i( h. f, W8 g
      }
    ; [: p. o. V( C2 |9 N6 [3 V  //---------------------------------------------------------------------------! H) ^+ `. w% @$ M
      void __fastcall TForm1:abel1MouseMove(TObject *Sender, TShiftState Shift,
    6 m3 y* Z! {$ q3 t6 g- b9 J      int X, int Y)
    * j! y+ E4 s( X+ _3 k$ N$ _$ y; K  {
    9 [* s0 i1 g$ b7 h, L     Test(Sender);
    8 }% j$ P) R5 @9 e. 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-10-23 09:43 , Processed in 1.324406 second(s), 50 queries .

    回顶部