Как избежать проблем при внедрении Tform в другую Tform?
-
10-10-2019 - |
Вопрос
Я часто встраиваю 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:
Решение
Я также делаю это и использую следующую рутину, чтобы это произошло:
procedure TMyForm.PlaceInsideContainer(Container: TWinControl);
begin
Parent := Container;
Align := alClient;
BorderIcons := [];
BorderStyle := bsNone;
ParentBackground := True;
Show;
end;
У меня нет проблем с этим. Единственная разница, которую я мог себе представить, может быть актуальным, это назначение Bordericons, но я сомневаюсь, что это вызывает проблему.
Другие советы
Я прочитал аналогичный вопрос (вам придется его Google), и ответ от TeamB не должен был сделать это, поскольку поведение было непредсказуемым, и вместо этого вы должны использовать TFRAME (что я всегда делал).