关于 panel继承 Canvas 后重绘闪烁问题 我在 Panel 继承了 Canvas ,用一个线程不停地绘图,当鼠标在窗口或其它控件上面随便移动一下 这个 panel 就会闪烁,鼠标在窗口外就没问题,请问为什么?谢谢。主窗口 与 panelDoubleBuffered:=True;也没效果 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么叫继承了canvas?是某控件继承自panel然后重写canvas属性,还是你的panel继承自canvaa?你这样说让人迷惑。。 TWealshPnl = class(TPanel) private FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; FPaint:TNotifyEvent; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; protected procedure Paint;override; public TmpSpBmp:TBitmap; procedure CBShowSp(pData:Pointer;pSize:Integer); property Canvas; procedure ResizeBmp1(SrcBM, DstBM: TBitmap; Nwide, Nheight: integer); published property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave; property OnPaint:TNotifyEvent read FPaint write FPaint; end;procedure TWealshPnl.CBShowSp(pData:Pointer;pSize:Integer);var B:TBitmap;begin if not Assigned(TmpSpBmp) then begin TmpSpBmp:=TBitmap.Create; DoubleBuffered:=True; end; TmpSpBmp.Canvas.Lock; Canvas.Lock; TmpSpBmp.Handle := HBitmap(pData^); B:=TBitmap.Create; ResizeBmp1(TmpSpBmp,B,Width-6,Height-6); Canvas.Draw(3,3,B); B.Free;end; TWealshPnl = class(TPanel) private FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; FPaint:TNotifyEvent; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; protected procedure Paint;override; public TmpSpBmp:TBitmap; procedure CBShowSp(pData:Pointer;pSize:Integer); property Canvas; procedure ResizeBmp1(SrcBM, DstBM: TBitmap; Nwide, Nheight: integer); published property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave; property OnPaint:TNotifyEvent read FPaint write FPaint; end;procedure TWealshPnl.CBShowSp(pData:Pointer;pSize:Integer);var B:TBitmap;begin if not Assigned(TmpSpBmp) then begin TmpSpBmp:=TBitmap.Create; DoubleBuffered:=True; end; TmpSpBmp.Canvas.Lock; Canvas.Lock; TmpSpBmp.Handle := HBitmap(pData^); B:=TBitmap.Create; ResizeBmp1(TmpSpBmp,B,Width-6,Height-6); Canvas.Draw(3,3,B); B.Free;end; 使用双缓存,每次重绘时用缓存里的图形,而不是直接在Draw里绘制 用过raize的朋友进来看下,控件菜单不正常,帮助解决下 paradox数据库,query 为什么我的程序在英文操作系统是录入中文就会出现乱码呢,而且不能保存到数据库中? 散分100分 谁给我提高listview读取速度啊 我要编一个从ftp中拉出一个文件到我的应用程序,然后 数据库备份问题! 请问,怎样才能控制edit1中只能输入3个汉字的内容呢? 多层数据库问题。请高手帮忙,来者送分。 我写有一套完整的局域网udp监控系统for 9x,如何将其改至nt系统,望见教。 BeforeNavigate2 好久没来,一看自己的ID是2000.12.9注册的,哎,有点疲倦了,找不到好的方向啊
private
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
FPaint:TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
procedure Paint;override;
public
TmpSpBmp:TBitmap;
procedure CBShowSp(pData:Pointer;pSize:Integer);
property Canvas;
procedure ResizeBmp1(SrcBM, DstBM: TBitmap; Nwide, Nheight: integer);
published
property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnPaint:TNotifyEvent read FPaint write FPaint;
end;
procedure TWealshPnl.CBShowSp(pData:Pointer;pSize:Integer);
var
B:TBitmap;
begin
if not Assigned(TmpSpBmp) then
begin
TmpSpBmp:=TBitmap.Create;
DoubleBuffered:=True;
end;
TmpSpBmp.Canvas.Lock;
Canvas.Lock;
TmpSpBmp.Handle := HBitmap(pData^);
B:=TBitmap.Create;
ResizeBmp1(TmpSpBmp,B,Width-6,Height-6);
Canvas.Draw(3,3,B);
B.Free;
end;
private
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
FPaint:TNotifyEvent;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
procedure Paint;override;
public
TmpSpBmp:TBitmap;
procedure CBShowSp(pData:Pointer;pSize:Integer);
property Canvas;
procedure ResizeBmp1(SrcBM, DstBM: TBitmap; Nwide, Nheight: integer);
published
property OnMouseEnter:TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave:TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property OnPaint:TNotifyEvent read FPaint write FPaint;
end;
procedure TWealshPnl.CBShowSp(pData:Pointer;pSize:Integer);
var
B:TBitmap;
begin
if not Assigned(TmpSpBmp) then
begin
TmpSpBmp:=TBitmap.Create;
DoubleBuffered:=True;
end;
TmpSpBmp.Canvas.Lock;
Canvas.Lock;
TmpSpBmp.Handle := HBitmap(pData^);
B:=TBitmap.Create;
ResizeBmp1(TmpSpBmp,B,Width-6,Height-6);
Canvas.Draw(3,3,B);
B.Free;
end;