小问题!急啊!

yinweixian 2005-11-08 03:57:10
我在FormCreate中写了application.ShowMainForm:=false 语句,想实现运行程序主界面是不显示的。
但是我运行程序就出错,错误是can not operation closed dataset,就是不能操作关闭的数据库,
我数据库表的打开是放在FormShow中写的,后来改放在FormCreate中结果也是一样。
我觉得这好象和数据库没有关系的,怎么会出现这个错误呢?

还有一个问题,怎么样才能在程序做循环的时候强制打断?比如说当程序在循环的时候我点一下按钮,那个按钮就会及时的响应,不用等到循环结束再响应。急啊!!!
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanhaili 2005-11-09
  • 打赏
  • 举报
回复
听课~`
mxlinux 2005-11-09
  • 打赏
  • 举报
回复
最后的那个问题,要考虑多线程才可以,循环放在其他线程里,主线程只用于显示
sdpyyu 2005-11-09
  • 打赏
  • 举报
回复
g961681已经给您解决了第二个问题,看来你还没有明白啊!
关键是使用ProcessMessages过程,它可以打断当前的执行来处理Windows消息队列中的消息,如果不加它,在循环完成前程序没有机会来处理你的按钮发出的消息。看下面的例子:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to 10000 do
begin
sleep(100);
button1.Caption:=inttostr(i);
application.ProcessMessages;//关键啊
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
button1.Caption:='i do';
sleep(2000);
end;
试一试去掉加注释的那个句子执行有什么不同就明白了!
g961681 2005-11-09
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
FExit: Boolean;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
FExit := False;
Button1.Enabled := False;
while True do
begin
Application.ProcessMessages;
if FExit then Break;
Edit1.Text := FormatDateTime('HH:MM:SS:ZZZ', Now);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
FExit := True;
Button1.Enabled := True;
end;

end.
g961681 2005-11-09
  • 打赏
  • 举报
回复
是自己定义的变量~~~~~~~~~
yinweixian 2005-11-09
  • 打赏
  • 举报
回复
第一个问题解决了。
第二个问题还是不怎么明白,急啊!!!
mxlinux 2005-11-08
  • 打赏
  • 举报
回复
主窗体visbile设为false即可

数据库错误,是否楼主用了数据窗体,在主窗口初始化,由于主窗口优先数据窗口创建,自然会遇到异常,在工程文件里,将数据窗体建立放在主窗口之前,不会影响主窗体显示。
ghost_012 2005-11-08
  • 打赏
  • 举报
回复
关注UP
yinweixian 2005-11-08
  • 打赏
  • 举报
回复
BExit是什么啊?自己定义的变量吗?
g961681 2005-11-08
  • 打赏
  • 举报
回复
单步跟踪下,就应该知道了啊!

那循环里只能加判断标记了。比如在循环开始判断
Application.ProcessMessage;
if BExit then Break;

在按钮的处理时间里
设置 BExit := True;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧