2017-02-06 7 views
3

У меня есть дочерняя форма '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; 

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. 

Code as ZIP

Но элементы управления (окно редактирования, спиновый редактировать и т.д.) в frmInsertImg не будет принимать фокус с помощью мыши, но может быть сфокусирована на Tab.

Что я делаю неправильно?

+0

Мы не хотим, чтобы ZIP, всего лишь [mcve] в Q –

+0

Полный пример, размещенный в Q – Ampere

+1

Добавить 'frmTest.BorderStyle: = bsNone', и все это хорошо. Я сомневаюсь, что вы действительно хотите, чтобы хром без клика формы выглядел так, как будто это было окно верхнего уровня. Обычно вы устанавливаете 'Align' в' alClient' одновременно. –

ответ

3

Предлагаю вам установить BorderStyle на bsNone для детской формы. Я не уверен в конкретных причинах, почему это работает, но оно имеет желаемый эффект.

Если вам нужно добавить визуальный фрейм для вашей дочерней формы, это лучше всего сделать с явным пользовательским интерфейсом для содержимого вашей дочерней формы.

Формы на самом деле не предназначены для использования таким образом, на мой взгляд. Вы можете заставить вещи в основном работать, но это не очень здорово. Ввод интерфейса в кадр, а затем хостинг, что должно привести к улучшению поведения.

+0

«Я не уверен в конкретных причинах, почему это работает» - Я ТОЛЬКО ХОЧУ ЗАПИСАТЬ, ЧТО, черт возьми, это woks :) Это кажется несвязанным :) Как можно повлиять на границу? – Ampere

+0

Фокус - это лишь одна из тех вещей, которые немного причудливы, когда вы родите форму. Формы на самом деле не предназначены для этого. Более чистым вариантом будет использование рамки. –