Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何';家长';表格?(控件不接受焦点)_Delphi_Delphi Xe7 - Fatal编程技术网

Delphi 如何';家长';表格?(控件不接受焦点)

Delphi 如何';家长';表格?(控件不接受焦点),delphi,delphi-xe7,Delphi,Delphi Xe7,我有一个子表单“frmTest”和一个主表单“TfrmMain”。我将主窗体设置为frmTest的父窗体,如下所示: unit Main; INTERFACE USES System.SysUtils, System.Classes, Vcl.Forms, Test, Vcl.StdCtrls, Vcl.Controls; type TfrmMain = class(TForm) Button1: TButton; procedure Button1Click(Sen

我有一个子表单“frmTest”和一个主表单“TfrmMain”。我将主窗体设置为frmTest的父窗体,如下所示:

unit Main;

INTERFACE
USES
  System.SysUtils, System.Classes, Vcl.Forms, Test, Vcl.StdCtrls, Vcl.Controls;

type
  TfrmMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

IMPLEMENTATION  {$R *.dfm}

procedure TfrmMain.Button1Click(Sender: TObject);
VAR frmTest: TChildForm;
begin
  Application.CreateForm(TChildForm, frmTest);
  //frmTest:= TForm1.Create(Self);
  frmTest.Parent:= Self;
  frmTest.Show;
  frmTest.SetFocus;
end;

但frmInsertImg中的控件(编辑框、旋转编辑等)将不接受来自鼠标的焦点,但可以使用Tab键进行聚焦


我做错了什么?

我建议您将子窗体的
BorderStyle
设置为
bsNone
。我不确定这种方法起作用的确切原因,但它达到了预期的效果

如果需要为子窗体添加可视框架,那么最好使用子窗体所包含的显式UI


在我看来,表单并不是真正打算以这种方式使用的。你可以让事情大部分正常进行,但它并不十分健壮。将UI放入一个框架中,然后进行托管,这将导致更好的行为。

我们不需要ZIP,只需要QAdd
frmTest.BorderStyle:=bsNone
中发布的QFull示例中的一个,这一切都很好。我怀疑你是否真的希望表单的非客户端chrome显示为顶级窗口。通常您会同时将
Align
设置为
alClient
。包括
WS\u CAPTION
似乎是导致鼠标交互出错的原因。我强烈建议您放弃当前的计划,使用
bsNone
。如果你需要为视觉原因提供一个框架,那么就这样做。相关的:“我不知道为什么这样做的确切原因”-我只是想问你为什么这样做:)这似乎是不相关的:)边框如何影响焦点?焦点只是当你创建一个窗体时有点不正常的事情之一。表单并不是为此而设计的。更干净的设计是使用框架。
unit test;  { THIS IS THE CHILD }

INTERFACE

USES
  System.SysUtils,  System.Classes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Samples.Spin;

TYPE
  TChildForm = class(TForm)
    Edit1: TEdit;
    SpinEdit1: TSpinEdit;
  private
  public
  end;


IMPLEMENTATION {$R *.dfm}

end.