Как избежать проблем при внедрении Tform в другую Tform?

StackOverflow https://stackoverflow.com/questions/4385948

Вопрос

Я часто встраиваю TForm Потомок в другой TForm Потомок как это:

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

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

Кто -нибудь знает, что вызывает это «смещение»?

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

Редактировать: Я определил компонент TcxListView Как виновник здесь, я представил отчет об ошибке поставщику компонентов (DeVexPress):

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

РЕДАКТИРОВАТЬ 2: Разработчики в DeVexPress проанализировали проблему и сказали, что на самом деле это дефект в TGridPanel компонент Embarcadero:

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top