解决方案 »
- delphi能异步执行存储过程吗?
- 大家帮忙看一下
- 用两个难理解的语句,各位高手请帮帮看看.
- C/s结构 客户端发到远程服务器的Sql语句的长度有什么限制吗 或者说最好应该控制在多长?
- 各位大俠,幫個忙DB數據庫怎樣導入到SQL2000中?
- 用String定义的“变量”和用TStrings类定义的“对象”在使用上有何差别
- 关于listview的小问题
- 开始用DELPHI做MIS了,问兄弟们几个问题。
- 使用DBGrid控件后,当输入焦点离开DBGrid后,怎样防止中文输入法自动关闭。
- 在DELPHI5里用什么方法俘获程序中出现的错误,让自己对出现的错误进行处理,而不是退出程序。以前用VB6的时候是用ON ERROR的
- 怎么做出如FoxMail在Win2000下的半透明窗口?
- 初学者的问题,有人回答我吗?我一定把我的全部分数给!
⒉在MainForm中插入一个Button部件,将其Caption属性设为“关闭”,为该部件的OnClick事件创建一个过程,并在过程的begin和end之间插入Close语句。
⒊在应用程序添加一个表格,将这个表格起名为MoveForm,MoveForm 的单元起名为Move。
⒋为便于演示,在MoveForm中插入一个Label部件,设置其Caption 属性为“欢迎进入本系统”。
⒌建立两个表格之间的关联。在Unit Main的 implementation 中加入语句 usesmove;再为MainForm创建OnActivate事件。
procedure TMainForm.FormActivate(sender:TObject);
begin
MoveForm.Showmodal;
end;
⒍从Component模板的System类别中选择一个计时器(Timer),添加入 MoveForm表格中,设置其Interval属性为3000(可根据需要自定义),再为其OnTimer事件添加语句close;加入一个Timer部件目的是用以控制闪现窗口显示时间。在此, MoveForm显示了3秒钟后关闭,主窗口MainForm自动被激活。
⒎编译、运行程序,就能得到延迟为3秒的闪现窗口。
方法二:你可通过修改工程文件中的源代码来实现,这在Delphi 的编程中是很少见的。现举一例具体说明:
前四步同方法一。
⒌选择View/Project Manager,击Option按钮,选择结果Project Option 对话底部的Forms页栏目。注意,MainForm和MoveForm是在Auto-create forms 列表中。选择MoveForm并击右键头按钮,把这个表格移到 Available forms 。 所有的Delphi表格通过缺省方式自动在内存中建立,因此它们要消耗内存和系统资源。在类似这里(程序运行时创建一个表格)的情况下,你应该将表格从自动创建列表格中去掉。
⒍下一步修改工程的源代码。选择View/Project Source,修改begin和end之间的语句如下:
程序清单Test.Dpr
program Test
uses
forms,
Main in 'MAIN.PAS'{MainForm},
Move in 'Move.PAS'{MoveForm}{$R *.RES}begin
MoveForm:=TMoveForm.Create(Application);{Create创建闪现窗口对象}
MoveForm.Show;
MoveForm.Update;
Application.CreateForm(TMainForm,MainForm);
MoveForm.Hide;
MoveForm.Free;{Free从内存中释放对象}
Application.Run;
end.
第一条语句创建了对象,该对象存在内存中,但还不能看见,为了让它出现并更新它的内容,调用对象的Show和Update成员函数:Show和Update。当闪现窗口使用完后,用Hide函数将它隐藏起来,然后用Free函数释放它所占据的内存。
⒎如果此刻你编译和运行程序,MoveForm窗口一闪而过,你可能未来得及看清。为使MoveForm窗口显示几秒种,我们可为MainForm的OnCreate 事件创建一个处理程序,延迟MoveForm窗口的显现时间。
program TMainForm.FormCreate(sender:Tobject);
var
currentTime:LongInt;
begin
currentTime:=GetTickCount div 1000;
while ((GetTickCount div 1000)<(currentTime+3) do
{不做任何事);
end;
end.
GetTickCount函数返回窗口启动后过去的毫秒数,这个值除以1000 转化为秒数。此时你编译运行程序,就能得到一个延迟3秒多的闪现窗口。为闪现窗口添加上Image部件,再对字体及窗口进行修饰,我们就能为应用程序,创建一个精美的封面或在程序启动时显示重要提示。
建立一个新Application,包括两个Form,其中Form1为主窗口,Form2为要显示的图片Form,不妨将Form2的边框类型设为无,同时在Form2中加入一个TImage类的构件Image1,Align属性为Client,AutoSize设为True,然后为Image1指定任意一个图片。
选Project1/Options菜单,点取Application页,将Form2从左边列表框中移到右边列表框,这样Project1.dpr源程序就不会生成建立Form2的代码。下一步是手工修改Project1.DPR源代码,因为Form2应该在Form1之前建立并显示,但不能使用Application的CreateForm方法(第一个用此方法建立的Form被认为是主Form),具体的代码如下,当运行至Application.CreateForm(...)一行时Form2已经建立并显示出来,然后该行建立主Form并激发主Form的OnCreate事件,你可以在OnCreate事件处理过程中完成你的初始化工作。 Project1.dpr program Project1; uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2}; {$R *.RES} begin
Application.Initialize; {程序初始化}
Form2 := TForm2.Create(Application); {建立徽标Form}
Form2.Show; {显示徽标Form}
Form2.Update; {重画徽标Form,确保其中的图片被显示出来}
Application.CreateForm(TForm1, Form1); {建立主Form}
Form2.Hide; {隐藏徽标Form,使主Form显示出来}
Form2.Free; {释放徽标Form占用的资源}
Application.Run; {程序运行}
end.
在主Form的OnCreate事件处理过程中我们用一些延时代码来模拟耗时的初始化工作,这样可以更清楚地看到Form2显示并停留数秒,直到主Form的OnCreate事件处理过程执行完毕后自动消失。 Unit1.pas unit unit1; interface uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, ExtCtrls; type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
end; var
Form1: TForm1; implementation {$R *.DFM} { OnCreate事件处理过程,延时五秒 }
procedure TForm1.FormCreate(Sender: TObject);
var
CurrTime: TSystemTime;
Sec: Word;
begin
GetSystemTime(CurrTime);
Sec := CurrTime.wSecond + 5;
while Sec>CurrTime.wSecond do
GetSystemTime(CurrTime);
end; end.
执行这个程序,会看到令人满意的效果:启动画面成功地显示出来,而且当鼠标移至画面上时会自动变成沙漏形状,五秒钟后画面消失,主窗口出现。