怎样让窗体一出现即自动执行某一例程,然后自己关闭,最好放在哪个事件中?

wyj2 2000-02-16 01:21:00
有时要求窗体一出现就自己执行某一功能(譬如初始化),而且还要根据执行的结果判断是否要立即关闭窗体,但是关闭窗体的代码又不能放在Active或Show事件中,我通常的做法是放在Paint事件中,行倒是行,就是实现起来挺难过,还要专门声明一个信号判断是不是第一次Paint,我想可能有更舒服的办法,不知各位有何建议。谢谢赐教
...全文
368 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
渤海海峡 2000-02-16
  • 打赏
  • 举报
回复
判断是否关闭窗体的代码应当放到 onclosequery事件中,根据条件判断来设定canclose.
data 2000-02-16
  • 打赏
  • 举报
回复
我也想知道
Lin 2000-02-16
  • 打赏
  • 举报
回复
可试试挂接WM_SHOWWINDOW消息:
procedure WMShowWindow(var msg: TWMSHOWWINDOW); Message WM_SHOWWINDOW;
当msg.Show为True,窗口被显示。详细情况可参阅TWMShowWindow结构和WM_SHOWWINDOW消息。
meijg 2000-02-16
  • 打赏
  • 举报
回复
为什么不能在SHOW里面处理,可以在SHOW事件里创建例程,再判断返回值,若需要关闭窗体,可以直接调用CLOSE事件,我是这样用的
meijg 2000-02-16
  • 打赏
  • 举报
回复
为什么不能在SHOW里面处理,可以在SHOW事件里创建例程,再判断返回值,若需要关闭窗体,可以直接调用CLOSE事件,我是这样用的
Venne 2000-02-16
  • 打赏
  • 举报
回复
这个功能我建议可以放在工程启动文件里面,甚至这个时候,一个窗口都未创建。
我可能表达的不是太明白,但是我觉得你需要的就象一个扉屏功能。比如启动DELPHI时,一个图形一直显示到DELPHI所有的环境导入完为止,然后自动消失。
一般的做法,是在创建主FORM之后创建扉屏,然后在工程文件,即DPR文件中显示它,然后做一些例程,并决定是否关闭。
我曾经的做法是在主FORM的CREATE事件时,因为需要导入一个数据库大量的数据,因此我建立了一个扉屏(即另一个窗口),在CREATE事件里创建这个窗口并且显示它,而且,在这个窗口上有一个进度条,表示数据导入的程度,当数据全部导入后,即关闭扉屏。
我不知道你想具体实现的功能,我感觉需要实现你所说的大概是有多种方法的,你是否可以提出一个具体的问题,然后用代码实现就比较有方向性。因为初始化就和我上面说的办法差不多。
yijun2000 2000-02-16
  • 打赏
  • 举报
回复
你需要的代码执行完毕之后,执行form_closequery事件,可以吗?
gypb 2000-02-16
  • 打赏
  • 举报
回复
其实很简单:
在FORM中申明一个函数,在主FORM中调用他就行了。
function TForm2.execute:boolean;
begin
form2.show;
{..do somthing
...}
result:=xxxx
end;
Hill 2000-02-16
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

//自定义消息
const
WM_AfterShowForm = WM_User +2;

type
TForm1 = class(TForm)
Button1: TButton;

//在此事件中使用 postMessage;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

//消息处理
Procedure AfterShowForm(var Msg: TMessage); Message WM_AfterShowForm;

//你自己的代码
Procedure AfterShow;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

Procedure TForm1.AfterShowForm(var Msg:TMessage);
begin
AfterShow;
end;
Procedure TForm1.AfterShow;
begin
Close;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
//发送消息
PostMessage(Handle,WM_AfterShowForm,0,0);
end;

end.
jll 2000-02-16
  • 打赏
  • 举报
回复
我曾经在Close语句后直接写其他语句,结果Close之后的语句仍然可以正常执行。你可以在OnCloseQuery事件中加上判断语句,如果要关闭主窗口,则设置CanClose:=true;否则,CanClose:=false。在Close语句后你可以加上要启动的其他程序或干其他事情。要启动其他程序可以试试Windows API函数:WinExec
WHQ 2000-02-16
  • 打赏
  • 举报
回复
如果是主窗口,当ShowWindow后,给窗口发一个你自己定义的消息——该消息处理函数完成你期望的任务——或直接调用你的处理函数;如果是子窗口,则可在Create后

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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