设置父级时出错

时间:2013-07-17 04:43:43

标签: windows delphi delphi-7 parent childwindow

我有一个旧的Delphi 7应用程序,经过一些更改后,会显示消息“访问违规...在'ntdll.dll'...”消息重复4次,可能意味着Windows是无法画出一些东西:然后一切正常。

触发消息的实际行是:

Tester.FormTester.Parent := main.FormMain.TesterSheet;

在错误消息之后,父项设置正确,

  Tester.FormTester.Align := alClient;

正常工作,将FormTester与TesterSheet的客户区对齐。

先前已创建FormTester,但不可见。首先使其可见并不能解决问题。 TesterSheet先前已创建,但不可见。使用任何其他父级(Nil除外)无法解决问题。等待并不能解决问题。在Win7和WinXP之间移动不会改变问题。

在Delphi IDE中运行,我只得到同样的错误,IDE会捕获并显示为异常。当我继续执行异常(跟踪到)时,我得到与以前相同的错误消息框。 (重复例外/消息)

这个问题的原因是什么?建议的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

我需要查看比您发布的代码更多的代码,但以下代码已在多个应用程序中使用了多年: -

Procedure TfrmMain.ShowInPanel(pForm : TForm);
Begin
  If Assigned(FCurrForm) Then
    FCurrForm.Close;
  With pForm Do
  Begin
    FCurrForm := pForm;
    Parent := pnlMain; // pnlMain is the panel where the form is shown
    BorderStyle := bsNone;
    Align := alClient;
    Show;
    Update;
  End;
End;

然后这样称呼: -

lfrmCategories := TfrmCategories.Create(pnlMain);
ShowInPanel(lfrmCategories);

希望这可以帮助您解决问题。

答案 1 :(得分:0)

正如评论中所建议的,我'检查了每个表单和组件'。我已经知道它不是导致问题的事件属性,因为我已经熟悉了所有事件。

但我确实找到了两个我不希望看到的组合框。

Empty string in Delphi / Windows combo box causes access exception所述,Delphi 7.0组合框存在一个已知问题,当您访问空行时会导致访问冲突错误:http://qc.embarcadero.com/wc/qcmain.aspx?d=2246

由于没有明显的原因,在设置表单的父级时会触发此已知问题。

可能的解决方案包括删除组合框,修补库,应用7.1 Service Pack或升级。

在这种情况下,通过从组合框的默认字符串列表中删除空行来解决问题。