最近碰到一个神奇的问题:Form1弄一个滚动字幕在滚动(TTimer控制Label滚动)当滚动一定时间(比如20分钟)以后,打开Form2,DBGrid的滚动条就看不见,然后打开其他窗口,所有DBGrid的滚动条全部看不见!很简单的几句代码,应该不是代码问题。 
procedure TForm1.Timer_rollTimer(Sender: TObject); 
begin 
  if not boo then 
    Label_roll.Left:= Label_roll.Left+1 
  else 
    Label_roll.Left:= Label_roll.Left-1; 
  if Label_roll.Left+Label_roll.Width> Panel_top.Width-10 then 
    boo:=true 
  else if Label_roll.Left <10 then 
    boo:=false; 
end; procedure TForm2.FormShow(Sender: TObject); 
var 
  Variant:OleVariant; 
begin 
  form1.SCon.AppServer.SearchData('select * from 物品信息表',Variant); 
  goodsCds.Data:=Variant; 
  goodsCds.Active:=true; 
end;

解决方案 »

  1.   

    奇怪,不过你FORM2的代码声明最好别Variant:OleVariant;
      

  2.   

    你用画布canvas这种问题就可以解决。
      

  3.   

    你这样写,是会出现这样的问题啦!
    因为所有的Form的基类都是一样的,你这样控制滚动条是会影响到所有的Form
      

  4.   


    procedure TForm1.WmMouseSheel(var   msg:   TWMMOUSEWHEEL);
    begin
      if   msg.WheelDelta>0   then
      sendmessage(goodsCds.Handle,WM_VSCROLL,SB_LINEUP,0)
      else   sendmessage(goodsCds.Handle,WM_VSCROLL,SB_LINEDOWN,0);
    end;
    procedure TForm1.goodsCdsMouseWheelDown(Sender: TObject;
      Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    begin
    sendmessage(goodsCds.Handle,WM_VSCROLL,SB_LINEDOWN,0);
    end;procedure TForm1.goodsCdsMouseWheelUp(Sender: TObject;
      Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    begin
    sendmessage(goodsCds.Handle,WM_VSCROLL,SB_LINEUP,0);
    end;
    写入这个代码试试
      

  5.   

     數據集打開後再強制界面重繪下,應該是GRID這個時候重繪的問題。
      

  6.   

    用 ehlib吧 dbgrid问题多多
      

  7.   

    呵呵,我就是用ehlib,而且不止ehlib有问题,所有有滚动条的控件滚动条显示都不正常,比如ListBox
      

  8.   

    将procedure TForm2.FormShow(Sender: TObject); 换成procedure TForm2.FormCreate(Sender: TObject); 试试