奇怪的错误信息,请大家过来看看(200分)

  • 主题发起人 主题发起人 yubing8
  • 开始时间 开始时间
Y

yubing8

Unregistered / Unconfirmed
GUEST, unregistred user!
project project1.exe raised exception class elnvalidoperation with message
'canvas does not allow drawing'.process stopped.use step or run to continue.
上面这个错误是什么意思,为什么单步执行就没有错误了。
 
系统资源不足或是Canvas无效了,暂时不能操作
VCL中引起此异常的代码
procedure TCanvas.RequiredState(ReqState: TCanvasState);
var
NeededState: TCanvasState;
begin
NeededState := ReqState - State;
if NeededState <> [] then
begin
if csHandleValid in NeededState then
begin
CreateHandle;
if FHandle = 0 then
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;
 
怎样才能避免这样的错误呢??为什么我单步调试却没有出错
 
该错误消息只是告诉错误消息发生时激活的工程名(project1.exe),相关的异常类(
EInvalidOperation),和该异常类提供的错误消息.消息中提示可以单步运行(process stopped.Use step or run to continue),所以单步调试时不会出错.
EInvalidOperation是关于对组件进行无效操作的异常类.
 
还是再检查检查你的代码吧,发生此异常时肯定Canvas.Handle=0,看你的哪些代码与之相关的
 
那怎么解决呢
 
可是我根本没有用过Canvas啊
 
单步执行并不是象mvb所说的,有异常还是会弹出异常错误的,你这里可能刚好是一个时间差的问题,有一定的延时就没有错误了
//可是我根本没有用过Canvas啊
那你是不是用了第三方组件啊?有可能是它们引起的,有源代码的话找找它们的源代码,仔细调试,多用try...except,其他的我也帮不了你了,祝你好运:)
 
NeededState没有初始化!
NeededState := TCanvasState.create();
那个异常是你抛出的,单步跟踪以上代码时还没有try到。
当你直接运行时,可能在调用这段代码的地方try了。
 
to MVB 你所以单步不会出错 的结论是导不出来的 出错时Delphi提示是要你进行单步跟踪进行调试 不是单步就不会出错
Canvas是对HDC的封装 你的普通程序是不可避免会用到的 比如From Button 都用到了Canvas的,但是正常是不会如此的,需要你调整你的代码了,一定是代码的问题 检查在比如多线程 Canvas.画图操作
单步和完整执行毕竟不一样 比如多线程 很多问题单步是发现不了的 而且你的单步可能只是现在没问题不代表不会出问题而且在调试方面 跟踪代码近一点 缩小范围 才好排错。基本没有调试经验的话 还是找身边的人帮助一下 或者最起码要自己缩小范围 贴出相关代码 别人才好帮你 否则就象只问了一句 我的系统问什么会死机一样 
 
感谢大家的热心帮助,问题已经同事的帮助下解决,主要是线程异步问题,希望大家以前不要犯和我类似的错误
 
多人接受答案了。
 
后退
顶部