unit UnMsPaintBox;interface
uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ExtCtrls;
type
TMsPaintBox = class(TPaintBox)
private
fMouseEnter: TNotifyEvent;
fMouseLeave: TNotifyEvent;
protected
procedure cmMouseLeave(var msg: TMessage); message cm_MouseLeave;
procedure cmMouseEnter(var msg: TMessage); message cm_MouseEnter;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
public
{ Public declarations }
published
property OnMouseEnter: TNotifyEvent read fMouseEnter write fMouseEnter;
property OnMouseLeave: TNotifyEvent read fMouseLeave write fMouseLeave;
end;procedure Register;
implementationprocedure Register;
begin
RegisterComponents('Standard', [TMsPaintBox]);
end;procedure TMsPaintBox.cmMouseEnter(var msg: TMessage);
begin
if Assigned(fMouseEnter) then
fMouseEnter(self);
end;procedure TMsPaintBox.cmMouseLeave(var msg: TMessage);
begin
if Assigned(fMouseLeave) then
fMouseLeave(self);
end;procedure TMsPaintBox.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result := 1;
end;end.
========================================================
我本来想做移到和移开paintbox就切换图片,但现在仅仅调用一个空的paintBox,移到上面就闪烁不停,请问为什么?请问这样的功能可以怎样做到?
uses Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ExtCtrls;
type
TMsPaintBox = class(TPaintBox)
private
fMouseEnter: TNotifyEvent;
fMouseLeave: TNotifyEvent;
protected
procedure cmMouseLeave(var msg: TMessage); message cm_MouseLeave;
procedure cmMouseEnter(var msg: TMessage); message cm_MouseEnter;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
public
{ Public declarations }
published
property OnMouseEnter: TNotifyEvent read fMouseEnter write fMouseEnter;
property OnMouseLeave: TNotifyEvent read fMouseLeave write fMouseLeave;
end;procedure Register;
implementationprocedure Register;
begin
RegisterComponents('Standard', [TMsPaintBox]);
end;procedure TMsPaintBox.cmMouseEnter(var msg: TMessage);
begin
if Assigned(fMouseEnter) then
fMouseEnter(self);
end;procedure TMsPaintBox.cmMouseLeave(var msg: TMessage);
begin
if Assigned(fMouseLeave) then
fMouseLeave(self);
end;procedure TMsPaintBox.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result := 1;
end;end.
========================================================
我本来想做移到和移开paintbox就切换图片,但现在仅仅调用一个空的paintBox,移到上面就闪烁不停,请问为什么?请问这样的功能可以怎样做到?
参考了网上的几种去闪烁的方法
1:DoubleBuffer := True;
2: 拦截的事件也就是WMEraseBkgnd函数
3:用BitBlt函数
以上方法我均试过还是没有用,真是郁闷