如何在create事件中关闭窗口 : 超高难度>>>>>>>>>&g

  • 主题发起人 主题发起人 winni
  • 开始时间 开始时间
to 楼主:
“在application单元中写代码不方便啊,有时候需要用到form中的东西啊, 而且写得太复
杂了,delphi都不认识主窗口的了,“运行”按钮失效。”
不知道你这句话该怎么理解,但愿我理解对了。
我是这么操作的,既然你说application单元中写代码不方便,那就将它们移出来吧,
而且,将application单元(是program Project1中的内容吧)中的
Application.CreateForm(TForm1, Form1);注释掉,直接改用TForm1.Create(Form1);创
建窗体。
新建一个单元Unit2,如下
unit Unit2;

interface
uses Unit1 ,Forms; //包含单元

procedure CreateForm1; //定义一个过程

implementation

procedure CreateForm1();
begin
Form1 :=TForm1.Create(Form1); //创建窗体
....//后继处理代码(相当于在Unit1中的FormCreate过程中的代码)
end;
end.

program Project1;中的内容如下:
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in '../Unit2.pas';

{$R *.res}

begin
Application.Initialize;
//Application.CreateForm(TForm1, Form1); //注释掉
Unit2.CreateForm1; //调用过程创建窗体
Application.Run;
Application.Terminate; //添加终止代码
end.

在TForm1.FormCreate中添加代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
.....//处理代码(如添加showmessage('Hello')进行测试)
Form1.Free; //窗体终止代码(不能用Close了,或者此处不释放,交由
//Application.Terminate;统一释放)
end;

以上代码就避免Application.CreateForm(TForm1, Form1);创建后再Close时出现闪烁的
情况,并可在适当的地方添加处理代码,不知合不合你要求。
 
program Project1 中写代码不是这次讨论的重点,

重点是: 《如何在Create事件关闭窗口而不闪》
 
楼主如果不把program Project1 中的Application.CreateForm(TForm1, Form1);去掉或
替换掉,那没有办法不闪烁,因为Create事件发生前Application已经创建了一个可见窗
口,再关闭,也就是Create事件中的写Close代码只不过是延迟了一小段时间(这就出现
闪烁了),除非真的就把窗体移到看不见的地方。
 
结论:Create事件关闭窗口不可能不闪,只有把窗体移到看不见的地方。
 
楼主,你试了我的方法没?

1 设置form的borderstyle为bsnone;
2 设置form的color为clMaroon
3 设置form的transparentcolor为true
4 设置form的transparentcolorvalue为clmaroon
然后
self.hide;
PostQuitMessage(0);

难道行不通吗?
我调试后感觉可以的呀!
 
to 白骨精
win2000以下都不支持透明了
 
这样的呀
我用的是XP
也没在其他版本的操作系统上调试过
谢楼上的提醒
 
楼主的功能最好是这样做
begin
Application.Initialize;
Application.Title := 'Project';
if 满足条件 then
begin
Application.CreateForm(TForm_RuleViewer, Form_RuleViewer);
Application.Run;
end;
end.
 
接受答案了.
 
后退
顶部