大家多多原谅,CB写的代码,DP的我也能看懂,现在CB版块不行了,我在这儿讨教高手....
一个MDI程序,平常挺好的,现在我做了一个测试,发现问题了。
假如我在子窗口Form_FreqMon中放一个按钮,添加代码:
//---------------------------------------------------------------------------
void __fastcall TForm_FreqMon::Btn_JKClick(TObject *Sender)
{
for(int i=0;i<=100;i++)
{
Sleep(200);
CGauge1->Value++;
Application->ProcessMessages() ;
}
}
//---------------------------------------------------------------------------
如果点击按钮,此时趁它没有循环结束,直接关闭这个子窗体,就会报内存错误,并指到CGauge1->Value++;这一行,删除这行后,子窗口可以关掉了,但主窗体却不能关掉了。
在子窗体的OnClose事件中,我也写了Action=caFree;这条语句,怎么回事啊?如何解决?
一个MDI程序,平常挺好的,现在我做了一个测试,发现问题了。
假如我在子窗口Form_FreqMon中放一个按钮,添加代码:
//---------------------------------------------------------------------------
void __fastcall TForm_FreqMon::Btn_JKClick(TObject *Sender)
{
for(int i=0;i<=100;i++)
{
Sleep(200);
CGauge1->Value++;
Application->ProcessMessages() ;
}
}
//---------------------------------------------------------------------------
如果点击按钮,此时趁它没有循环结束,直接关闭这个子窗体,就会报内存错误,并指到CGauge1->Value++;这一行,删除这行后,子窗口可以关掉了,但主窗体却不能关掉了。
在子窗体的OnClose事件中,我也写了Action=caFree;这条语句,怎么回事啊?如何解决?
解决方案 »
- 磁盘容量不足,SQL插入操作CPU100%
- 急!帮看一个错误!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 请问delphi5编译的dll能不能在delphi6下调用?
- 什么是mis,mdi?
- 请教delphi中如何把程序最小化时变为任务栏图标
- 请教大家一个问题,点击delphi时总是报‘应用程序正常初始化(0xc0000142)失败。请单击确定,终止应用程序’(已经重装两次了,还是不行)
- 解除疲惫的心境,收集真正免费的影视娱乐站点!
- 高手都到那里去了???????
- 一个简单的问题, 来者有分!
- 怎样用Delphi写Dll
- DBEXPRESS控件赋值报错
- 我也散一把!楼数 Mod 10 =0 的20分,活动日期截止到2008-4-29 17:00:00 绝不食言!
{
for(int i=0;i <=100;i++)
{
//定义一个记录状态的变量Boolean Closing,当窗体关闭时设置变量的状态Closing为真,这里检测到状态就退出循环
Sleep(200);
CGauge1->Value++;
Application->ProcessMessages() ;//窗体关了,但循环还在进行,不信你在这里打个断点
if (Application.Terminated) or (Closing)
break;
}
}
void __fastcall TForm_FreqMon::Btn_JKClick(TObject *Sender)
{
for(int i=0;i <=100;i++)
{
//定义一个记录状态的变量Boolean Closing,当窗体关闭时设置变量的状态Closing为真,这里检测到状态就退出循环
if (Application.Terminated || Closing)
break;
Sleep(200);
CGauge1->Value++;
Application->ProcessMessages() ;//窗体关了,但循环还在进行,不信你在这里打个断点
}
}
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Gauges;type
TForm_FreqMon = class(TForm)
Gauge1: TGauge;
Btn_JK: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Btn_JKClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Closing: Boolean;
public
{ Public declarations }
end;var
Form_FreqMon: TForm_FreqMon;implementation{$R *.dfm}procedure TForm_FreqMon.FormCreate(Sender: TObject);
begin
Closing := False;//在窗体创建时,InLoop := False;
end;procedure TForm_FreqMon.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Closing := True;
Action := caFree;
end;procedure TForm_FreqMon.Btn_JKClick(Sender: TObject);
var
i: Integer;
begin
for i := 1 to 100 do
begin
if Closing or Application.Terminated then
Break;
Sleep(200);
Gauge1.Progress := Gauge1.Progress + 1;
Application.ProcessMessages() ;
end;
end;end.delphi代码,已经测过,你再看看吧
procedure TForm_FreqMon.FormCreate(Sender: TObject);
begin
Closing := False;//在窗体创建时,InLoop := False;
end;
{
for(int i=0;i <=100;i++)
{
//定义一个记录状态的变量Boolean Closing,当窗体关闭时设置变量的状态Closing为真,这里检测到状态就退出循环
Sleep(200);
CGauge1->Value++;
Application->ProcessMessages() ;//窗体关了,但循环还在进行,不信你在这里打个断点
if (Application.Terminated) or (Closing)
break;
}
}