起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 182|回复: 5

求助,关于绘图闪烁的问题

[复制链接]
发表于 2009-9-15 09:52:01 | 显示全部楼层 |阅读模式
我想在Image控件中拖动实现橡皮筋效果,但是在自己绘图的时候图片闪烁很厉害,这种情况应该是用双缓冲技术解决的,不过小弟对平台中应该怎么写不太清楚,有没有大大贴点代码出来供小弟参考?
回复

使用道具 举报

发表于 2009-9-15 10:15:47 | 显示全部楼层
具体可以参考delphi中的实现。
你把具体做法说一下,效果是什么样的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-15 11:59:41 | 显示全部楼层
窗体中声明私有变量:
IsAdding: boolean;
X1, Y1, X2, Y2: integer;
有一个Image控件,实现了它的鼠标事件如下:
procedure TMainForm.imgMapMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Button = TMouseButton.mbLeft) then
  begin
    IsAdding := true;
    X1 := X;
    Y1 := Y;
    X2 := X;
    Y2 := Y;
    imgMap.Canvas.Rectangle(X1, Y1, X2, Y2);
  end;
end;

procedure TMainForm.imgMapMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if IsAdding = true then
  begin
    IsAdding := false;
  end;
end;

procedure TMainForm.imgMapMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if IsAdding = true then
  begin
    imgMap.Canvas.Pen.Mode := TPenMode.pmNotXor;
    imgMap.Canvas.Brush.Style := TBrushStyle.bsClear;
    imgMap.Canvas.Rectangle(X1, Y1, X2, Y2);
    X2 := X;
    Y2 := Y;
    imgMap.Canvas.Rectangle(X1, Y1, X2, Y2);
  end;
end;
就是实现拖动时的橡皮筋效果,但是拖动时图片闪烁很厉害,不知道Delphi里双缓冲代码是怎么写的
回复 支持 反对

使用道具 举报

发表于 2009-9-15 13:22:50 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-15 17:30:20 | 显示全部楼层
算了,结贴
回复 支持 反对

使用道具 举报

发表于 2009-9-15 17:45:11 | 显示全部楼层
怎么就结贴了呢?解决了还是有其他问题呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 01:36 , Processed in 0.039875 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表