程序CRASH了,问题在哪儿?Region在Create之后是否需要释放。(100分)

  • 主题发起人 主题发起人 歪就歪
  • 开始时间 开始时间

歪就歪

Unregistered / Unconfirmed
GUEST, unregistred user!
程序里不断的在: CreatXXXRgn, CombineRgn和SetWindowRgn,
以实现不规则窗口的外形变化效果。

总觉得好象应该用完这些REGION后,要把REGION都释放了。但不知道如何
释放,在何时释放?

问这个问题是因为:我的程序有时会CRASH,CRASH的现象如下:
一、显示“Canvas not allow drawing”。

二、桌面显示出现异常,程序应产生的REGION效果都没了。

三,系统PAINT有遗漏的区域。

程序中,除了大量产生REGION外,还用了SHGETFILEINFO读取文件ICON
以及重画了菜单(OwnerDraw)等。

程序强行关闭后就好了,似乎是典型的资源耗尽的现象,但愚蠢的歪就歪
却不知道问题才哪儿。

ANY COMMENT ARE WELCOME
 
DeleteObject(Rgn);
 
cAkk:
谢谢,我也认识那个DELETEOBJECT,可是,救人救到底:

for i := 0 to AnyInteger do begin
RgnA1 := CreateXXXRgn;
RgnA2 := CreateXXXRgn;
RgnA1 := CombineRgn(RgnA1, RgnA2);
RgnA3 := CreateXXXRgn;
RgnA1 := CombineRgn(RgnA1, RgnA3);
....
RgnA1 := CombineRgn(RgnA1, RgnAn);
SetWindowRgn(A1);
DoOtherCode;
end;

应该FREE哪一个?在哪儿FREE?

是在SETWINDOWRGN后面FREE,还是在SETWINDOWRGN句前FREE上一次用
的RGN?光FREE一个RGNA1行么?

 
用完了(Setwindowrgn)就通通delete.

另外,好像你的CombineRgn用法不对啊!
 
恕我愚蠢:

通通DELETE……那要加个TLIST,把所有的RGNA1到RGNAN的HANDLE都保存起
来了?我总觉得,SETWINDOW引用了这些REGION,一旦DELETE,会出现
ACCESS VIOL....

另,代码不在家里,COMBINERGN大概写的不对吧。
 
我觉得是画菜单引起的,我有过类似经历,
“Canvas not allow drawing”。
稍等,我去方便一下。
 
呵呵, o*o已经"方便"了将近20分钟了.....真厉害!

我也觉得应该是你画图部分的问题,最好把你的代码贴出来.
 
我发现菜单上的BITMAP(直接画上的)用FREE并不能很好地释放。
也是出现“Canvas not allow drawing”。
后来菜单上的文件ICON用SystemImageList来设置就好了。
你也是在菜单上画文件ICON吗?

歪兄,你在作什么好东西,这么有趣?
 
o*o: ^_^, not interest at all, my boss told me: he want his software
look like a Poem, so, I make a Crash poem for him.

It is almost same as Another_eYes has said before, a graphic Region as
frist form of company's software product.

I will fight with problem today, hope got something.

cAkk: thanks, the crash coming much more frequently, make it much
easier for solve. Give me 48 hours please.
 
cAkk,我对你有意见!
不就是出去方便一下吗,
怎么跟我们领导似的,也拿着秒表掐钟点儿。

20分钟?!
方便完了就不兴遛达遛达抽根儿烟再下到一楼找个MM谈谈理想什么的?
 
什么叫做 "Poem-like Software"? 你们领导那么热爱文学,下次
想出个"Epic-like Software" 还不把你给做死?
 
Cheka: 呵呵,他付我工资,我就老老实实按他说的去做就是了,这世道
能有我歪就歪一碗饭吃,就不容易了。

cAkk:谢谢了,确实是要把Rgn都删了去。现在稳定了。

谢谢大家,收题
 
后退
顶部