控件闪烁问题(200分)

  • 主题发起人 主题发起人 踢你PP
  • 开始时间 开始时间

踢你PP

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个panel上面放了两个image控件,一个处于上层一个处于下层(用bring to front和send to back),上层的image设置了transparent:=true,Aligh:=alClient,下层的未作设置,当上层image加载图片后部分区域透明,露出下层image。然后在上层image的OnMouseDown,OnMouseMove,OnMouseUp中写入了下层image的拖动代码,当下层image被拖动时,与上层image不透明区域交接部分会出现闪烁,请问该如何解决,下附代码:
代码:
procedure TfrmMain.imgBackMouseDown(Sender: TObject;
Button: TMouseButton;
  Shift: TShiftState;
X, Y: Integer);
begin
  intLeft:=mouse.CursorPos.X - frmMain.Left -imgPic.Left -1;
  intTop:=mouse.CursorPos.Y -frmMain.Top -imgPic.Top -51;
  bStartmove:=true;
end;

procedure TfrmMain.imgBackMouseMove(Sender: TObject;
Shift: TShiftState;
X,
  Y: Integer);
begin
  if(bStartmove)then
  begin
    imgPic.Left:=mouse.CursorPos.X -intLeft - frmMain.Left;
    imgPic.Top:=mouse.CursorPos.Y - frmMain.Top -50-intTop;
  end;
end;

procedure TfrmMain.imgBackMouseUp(Sender: TObject;
Button: TMouseButton;
  Shift: TShiftState;
X, Y: Integer);
begin
  bStartmove:=false;
end;
 
给点分 谢谢
 
设置image的parent那个控件的DoubleBuffered := True;
以下是我写的,你看一下。
private
MD: Boolean;

MX, MY: Integer;
implementation
procedure TfrmImageLoad.FormCreate(Sender: TObject);
begin
inherited;
ScrollBox1.DoubleBuffered := True;
end;

procedure TfrmImageLoad.imgProdMouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
if Button = mbLeft then
begin
MD := True;
MX := X;
MY := Y;
end;
end;

procedure TfrmImageLoad.imgProdMouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
var
NewLeft, NewTop: Integer;
begin
if MD then
with (Sender as TImage)do
begin
NewLeft := Left + (X - MX);
NewTop := Top + (Y - MY);
SetBounds(NewLeft, NewTop, Width, Height);
end;
end;

procedure TfrmImageLoad.imgProdMouseUp(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
begin
inherited;
if Button = mbLeft then
MD := False;
end;
 
多谢,问题解决
 
后退
顶部