我在一个窗口中放了一个Panel1(alTop),一个TScrollBox(alClient),后者里面又放了一个Panel2,Panel2需要根据程序参数调整大小,有时会远远大于窗口,于是TScrollBox出现滚动条,可当我将滚动条滚动底(右)部的,我在Panel2中拖动我放的Label时,Lable经过的地方全变为Label的的色彩了,不滚动滚动条就没有这样的情况,我是在Label的OnMouseMove事件移动Label的,在移动时我也调用了Panel2和窗体的Repait方法了的,可这是为什么呢,请问如何解决?请各位高手帮帮我。

解决方案 »

  1.   

    试试在拖动时调用ScrollBox.Invalidate;
    但是记得设置:ScrollBox.DoubleBuffered := True;
      

  2.   

    我试了,没有这种情况发生
    var
      Form1: TForm1;
      cap: boolean;
      mx,my: integer;
    implementation{$R *.dfm}{ TForm1 }procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if ssLeft in shift then cap:=true;
      mx:=x;
      my:=y;
    end;procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if (ssLeft in Shift)and cap then
      begin
        Label1.Left:=Label1.Left+(x-mx);
        Label1.Top:=Label1.Top+(y-my);
      end;
    end;procedure TForm1.Panel1Click(Sender: TObject);
    begin
      Panel2.Width:=400;
      Panel2.Height:=400;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Panel2.Color:=clGray;
      Label1.Color:=clWhite;
    end;
      

  3.   

    LockWindowUpdate(...)
    try
     
    finally
      LockWindowUpdate(0);
    end;
      

  4.   

    谢谢各位了,这个现象在WIN2000存在,在XP下没有。我改把LABEL改为STATICTEXT就行了。好象是因为前者是图形控件后者是窗口控件。你们说的方法我还没试,有时间我试试。