我经常将TForm后代嵌入另一个TForm后代,如下所示:
var Form1: TForm1; Form2: TForm2; begin Form2.Parent := Form1; Form2.BorderStyle := bsNone; Form2.Align := alClient; Form2.Show; end;
通常这很好用,但有时Form2中的控件没有正确对齐.这类问题有一般的解决方法吗?
有人知道造成这种“错位”的原因吗?
我知道我可以使用TFrame来完成这种工作,但是我有很多库代码需要重写,我没有看到为什么TForm方法中的TForm不起作用的原因?
编辑:我已将组件TcxListView识别为罪魁祸首,我已向组件供应商(DevExpress)提交了错误报告:
http://www.devexpress.com/issue=B194161
编辑2:DevExpress的开发人员分析了这个问题并说它实际上是Embarcadero在TGridPanel组件中的缺陷:
解决方法
我也是这样做的,我使用以下例程来实现它:
procedure TMyForm.PlaceInsideContainer(Container: TWinControl); begin Parent := Container; Align := alClient; BorderIcons := []; BorderStyle := bsNone; ParentBackground := True; Show; end;
我对此没有任何问题.我可能想象的唯一区别是BorderIcons的分配,但我怀疑这会导致问题.