Как избежать проблем при встраивании TForm в другой TForm? - PullRequest
7 голосов
/ 08 декабря 2010

Я часто вставляю потомка TForm в другого потомка TForm, например:

var
  Form1: TForm1;
  Form2: TForm2;
begin
  Form2.Parent      := Form1;
  Form2.BorderStyle := bsNone;
  Form2.Align       := alClient;
  Form2.Show;
end;

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

Кто-нибудь знает, что является причиной такого "смещения"?

Я знаю, что мог бы использовать TFrame для такой работы, ноУ меня много библиотечного кода, который мне пришлось бы переписать, и я не вижу причин, по которым подход TForm in TForm не должен работать?

Редактировать: У меня естьОпределив компонент TcxListView как виновного, я отправил отчет об ошибке поставщику компонента (DevExpress):

http://www.devexpress.com/issue=B194161

Редактировать 2: разработчики DevExpress проанализировали проблему и сказали, что это на самом деле дефект компонента TGridPanel от Embarcadero:

http://qc.embarcadero.com/wc/qcmain.aspx?d=90324

Ответы [ 2 ]

8 голосов
/ 08 декабря 2010

Я тоже так делаю и использую следующую процедуру, чтобы это произошло:

procedure TMyForm.PlaceInsideContainer(Container: TWinControl);
begin
  Parent := Container;
  Align := alClient;
  BorderIcons := [];
  BorderStyle := bsNone;
  ParentBackground := True;
  Show;
end;

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

1 голос
/ 08 декабря 2010

Я прочитал похожий вопрос (вам придется поискать его в Google), и ответ от TeamB заключался не в том, чтобы сделать это, поскольку поведение было непредсказуемым, и вместо этого вам следует использовать TFrame (что я всегда делал).

...