为什么没有错误或警告却没有显示任何窗口

时间:2019-06-26 06:12:57

标签: user-interface delphi lazarus freepascal

我正在尝试遵循GUI的代码以显示2个相同的窗口。我正在使用show而不是showmodal:

program RnTFormclass;
{$mode delphi}
uses
    //cthreads, // for linux only.
    Interfaces, Forms, StdCtrls;

type
    RnTForm = class(TForm)
    private
        wnd: TForm;
        btn: TButton;
    public
        constructor create;
        procedure showit; 
    end; 

constructor RnTForm.create;
    begin
        //Application.Initialize;  //removed.
        wnd := TForm.Create(Application);
        with wnd do begin
            Height  := 300;
            Width   := 400;
            Position:= poDesktopCenter;
            Caption := 'LAZARUS WND';
            end;
        btn := TButton.Create(wnd);
            with btn do begin
            SetBounds(0, 0, 100, 50);
            Caption := 'Click Me';
            Parent  := wnd;
            end;
    end;

procedure RnTForm.showit;
    begin
        wnd.Show;
    end;

var 
    myform1, myform2: RnTForm;

begin
    // create windows: 
    myform1 := RnTForm.Create;
    myform2 := RnTForm.Create;
    // show windows: 
    myform1.showit;
    myform2.showit;
end.

我想显示/打开两个相同的窗口。尽管程序运行时没有任何错误或警告,但什至没有显示一个窗口。 该程序只是终止。

问题出在哪里,如何解决?感谢您的帮助。

编辑:如注释中所指出,Application.initialize被调用两次且未运行。我已经注释掉Application.initialize,并且代码仍然没有打开任何窗口。 (如果将show替换为showModal,则会一一打开窗口。)

主要问题是如何在show之后保持窗口打开?

1 个答案:

答案 0 :(得分:-4)

从评论中获取建议,我通过以下主要方法使它起作用:

begin
    Application.Initialize; 
    // create windows: 
    myform1 := RnTForm.Create;
    myform2 := RnTForm.Create;
    // show windows: 
    myform1.showit;
    myform2.showit;
    Application.run; 
end.

现在两个窗口都出现了,我可以单击并对其进行操作。

但是,在关闭两个窗口时,程序仍保持在后台运行。需要添加具有点击功能的退出按钮。