to starmedia:     如何改变Label1.Left呢?改变这个数值对于我的问题有什么作用?  谢谢~~~~

解决方案 »

  1.   

    中文是两个字节,所以不如一个英文字母也用两个字节,然后一次copy两个字节。
      

  2.   

    用WildString试试
        i := length(WildString(label1.Caption));
        label1.Caption  := copy(WildString(label1.Caption),2,i-1);//每次都去掉第一个字符
      
      

  3.   

          label1.Caption := '中华人民共和国dfghkl是不是很好'
          time1.Interval := 500TIMER 的事件中:
      if label1.Left>0-label1.Width then
        label1.Left := label1.Left-5
      else
        label1.Left := Left;
      

  4.   

    //上面错了! ^v^
    TIMER 的事件中:
      if label1.Left>0-label1.Width then
        label1.Left := label1.Left-5
      else
        label1.Left := width;//滚动窗口的宽度
      
      

  5.   

    同意liang_z(千山一刀之忍者神龟)
      

  6.   


      to bluetooth_2001:     第三方的也可以试试啊~~  在哪里有得D呢?~~
      

  7.   

    有这么 一套控件叫Raize的,其中有这么一个控件,不知是否带了源码,我记得是带的。可以看看它是如何做的。
      

  8.   


      to chenjiong:    这个Raize在哪里有得D呢?~~
      

  9.   

    我记得  Raize 没有源码,功能虽然多,但是,有很多不敢使用的地方,如果想看看,我发给你。留下你的EAMIL。
      

  10.   


      大家好,狂人的问题在公司高手的指引下,终于有了眉目~~~  就是:     利用canvas.textout,计算label和所要显示的字体的长度,利用计时器在相应的位置画出来,大家觉得这样的方法如何呢??
      

  11.   


    1、扩展TCustomLabel类,使用计时器,在Paint重载事件中设置OffsetFrame偏移;另外输出文字用DrawText更好一点。此法效果最好——我以前扩展了一个Label类,同时带热下划线、颜色渐变、任意距离角度阴影、水平运动、垂直运动等功能还能够有较好的perform,当然,可能因为我用的是1.4G的看不出来。2、若求简单,可以在你原来的方法上做如下改动——汉字的组成字符的ASCII码均为160以上,就是说 Ord(Str[i])>160 的时候可以当汉字处理,一次减两个字符,否则减一个。这样效果凑合。3、如果利用控件的嵌套范围,修改控件相对坐标来剪切达到目的,则效果可能很差——闪的厉害!
      

  12.   


    哦!好象是Ord(Str[i])>=160!查查吧!
      

  13.   

    hellion(恶人)说对了,这样才能分开中文和英文字符,不会乱码
      

  14.   

      
    先放一个panel在panel上边放image然后image 的图片显示所要滚动的图片
    然后i:=panel.Width;
      if image.Left>i then  image.Left:=-400
      else image.Left:= image.Left+2 ;
    只是我的一种变通的方法,仅供参考
      

  15.   

    用一个IMAGE控件,用它的画布canvas属性来移动文字,效果相当好
      

  16.   

    先放一个panel在panel上边放image然后image 的图片显示所要滚动的图片
    然后time控件的过程如下,刚才太着急,忘了解释了,见笑,image的canvas我还没用过,不知道效果,以后再试,小弟初学,请多关照。
    procedure TForm1.Timer1Timer(Sender: TObject);
      var 
    i:integer;
    begin
      i:=panel.Width;
      if image.Left>i then  image.Left:=-400
      else image.Left:= image.Left+2 ;end;
      

  17.   


      经过调试,觉得还是用画布的好,  用widestring这样的移动,效果不好,闪得厉害,而且给人的感觉很生硬~~~~~~
      

  18.   

    用textout作多行移动的时候效果并不理想,
    当然移动一行无所谓,
      

  19.   


      哎呀,好久没来Delphi了,今天来看看。
      

  20.   


      哎呀,好久没来Delphi了,今天来看看