有谁见过 Canvas do es not allow drawing 的错误提示吗?(50分)

  • 主题发起人 主题发起人 DEN
  • 开始时间 开始时间
D

DEN

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位大虾:
有谁见过 Canvas does not allow drawing 的错误提示吗?
是在什么情况下产生的?
 
系统资源没了,
HD过期无效了。
 
我查过了, 在 Consts.pas 中有:
SNoCanvasHandle = 'Canvas does not allow drawing';
的常量定义.
然后在 Graphics.pas 中有:
procedure TCanvas.RequiredState(ReqState: TCanvasState);
var
NeededState: TCanvasState;
begin
NeededState := ReqState - State;
if NeededState <> [] then
begin
if csHandleValid in NeededState then
begin
CreateHandle;
[red][:)]if FHandle = 0 then[:D][/red]
raise EInvalidOperation.CreateRes(@SNoCanvasHandle);
end;
if csFontValid in NeededState then CreateFont;
if csPenValid in NeededState then CreatePen;
if csBrushValid in NeededState then CreateBrush;
State := State + NeededState;
end;
end;
好象是 free Canvas 时 某些方法还要 画一样.不知是不是这样?
请教高手!
 
在win98下跑foxmail就有这个问题
 
系统资源没了。我也碰过几次了。
 
請問是否可以拿到 EInvalidOperation來 Handle程式, 然後說資源不足?
但資源不足會出現這個錯誤嗎, 我也試了很多次了, 沒能出現這個 Errorbox.
 
创建canvas后,需要给canvas.handle赋值,下面代码演示了如何操作:
var
R: TRect;
DC: HDC;
Canvas: TCanvas;
begin
R:= ClientRect;
DC:= GetDC(Handle);
Canvas:= TCanvas.create;
Canvas.Handle:= DC;
Try
DrawEdge(Canvas.Handle, R, BDR_SUNKENOUTER, BF_LEFT or BF_TOP or BF_RIGHT or BF_BOTTOM or BF_ADJUST);
DrawEdge(Canvas.Handle, R, BDR_SUNKENINNER, BF_LEFT or BF_TOP or BF_RIGHT or BF_BOTTOM or BF_FLAT);
finally
ReleaseDC(Handle, DC);
Canvas.Free;
end;
end;
 
见多了,如果系统资源不足的时候,很多正常的程序都会出错的.....
 
请问doxpix 大侠,难道我每次用到Canvas 是都要用到这段代码吗?
还有, 你的代码我不大看的懂,是起什么作用的,能解释一下吗? ([:)]不好意思)[:)]
 
我的意思是如果你自己创建Canvas的话,应该给Canvas.handle赋值。
上面的代码是给一个控件画边框用的。
 
在ReportBuilder里见过,原因是没安装打印机驱动程序,
装驱程后正常,当Delphi未取得有效的GDI上下文句柄时
出现该错误。
 
自己在往canvas上画之前判断一下是不是0 .是0 就不要画了.
 
问题结束!谢谢各位!
 
后退
顶部