ilikenba 发表于 2004-6-23 17:31

Label的使用技巧(由ilikenba收集、整理、调试通过)

1.Label控件显示多行文本
  可以直接给Label的Caption属性赋给带有换行符或回车符的字符串!下面三个例子产生同样的效果:
  Label1->Caption="第一行\n第二行\n第三行";
  Label1->Caption="第一行\r第二行\r第三行";
  Label1->Caption="第一行\r\n第二行\r\n第三行";
  但注意这样赋多行的值只在运行的时候有效,在对Label的静态设计中,直接在Caption属性中输入
  "\r","\n"是没有用的,设计系统并没有对这些特殊字符作处理!
2.Label控件显示超长文本时自动换行
  只要对Label的两个属性进行修改。
  第一个是AutoSize,将它设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
  第二个是WordWrap,将它设为True。
  注意对于英文的显示是以单词为单位的,即不能把一个单词分两行显示,即使已经到了边界了,
  这时的显示应以空格区分多个单词!
3.使Label控件上的文字纵向显示
  最直接的方法是改变字体的旋转度和方向!
  下面这些代码实现了旋转的功能:
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
    TFont *font;
    LOGFONT logfont;
    font=new TFont;
    font->Assign(Label1->Font);
    GetObject(font->Handle,sizeof(LOGFONT),&logfont);
    logfont.lfEscapement=-900;
    logfont.lfOrientation=-900;
    font->Handle=CreateFontIndirect(&logfont);
    Label1->Font=font;
    delete font;
    Label1-&gt;Caption="矩阵论坛<a href="http://www.matrixstudio.org" target="_blank" >www.matrixstudio.org</A>";
  }
  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
  将Alignment设为taCenter。
  
  还有一种纵向显示的方式,字体不用旋转,利用Label可以显示多行文本的方法,将标签要显示的
  Caption字符串进行分拆,变成多行文本。在进行分拆时,注意汉字是双字节的,分拆时要将汉字
  识别出来,整体分拆,否则会出现乱码!
  下面的代码实现了这个功能:
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
    Label1-&gt;Caption=VString(Label1-&gt;Caption);
  }
  //---------------------------------------------------------------------------
  AnsiString __fastcall TForm1::VString(AnsiString ss)
  {
    AnsiString ass;
    int ii,ll;
    unsigned char cc;
    ass="";
    ll=ss.Length();
    for(ii=0;ii&lt;ll;ii++)
    {
       cc=ss.c_str();
       if(cc&gt;0xa0)
       {
         ass=ass+ss.SubString(ii+1,2)+"\n";
         ii++;
       }
       else
       {
         ass=ass+ss.SubString(ii+1,1)+"\n";
       }
    }
    return ass;
  }
  这里要将Label的AutoSize设为False,然后将Label的高度和宽度进行调整,适应要显示的区域!
4.鼠标指向Label控件时改变说明文字的颜色
  通过Label的MouseMove事件,媒举所有控件,将名称和鼠标经过的控件相同的Label的字体颜色变成
  红色,其他的字体颜色变成黑色!
  下面的代码实现了这个功能:
  void __fastcall TForm1::Test(TObject *Sender)
  {
    int i;
    TLabel *lb;
    AnsiString ss1,ss2;
    ss1=Sender-&gt;ClassName();//获取参数的类型
    if(ss1!="TLabel")return;//如果不是标签不处理
    lb=(TLabel*)Sender;
    ss1=lb-&gt;Name;
    for(i=0;i&lt;ControlCount;i++)
    {
      lb=(TLabel *)Controls;
      ss2=lb-&gt;Name;
      if(ss1==ss2)
         lb-&gt;Font-&gt;Color=clRed;
      else
         lb-&gt;Font-&gt;Color=clBlack;
    }
  }
  //---------------------------------------------------------------------------
  void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
  {
     Test(Sender);
  }
页: [1]
查看完整版本: Label的使用技巧(由ilikenba收集、整理、调试通过)