0

我有一个旧的 Delphi 7 应用程序,经过一些更改后,它会显示消息“访问冲突 ... in 'ntdll.dll' ...”该消息重复 4 次,可能意味着 Windows 无法绘制某事:然后一切正常。

触发消息的实际行是:

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

在错误消息之后,父级设置正确,并且

  Tester.FormTester.Align := alClient;

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

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

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

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

4

2 回答 2

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);

希望这将帮助您解决问题。

于 2013-07-17T15:33:49.033 回答
0

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

但我确实找到了两个我没想到会看到的组合框。

正如在 Delphi / Windows 组合框中的空字符串导致访问异常中讨论的那样,Delphi 7.0 组合框存在一个已知问题,当您访问空行时会导致访问冲突错误:http: //qc.embarcadero.com/ wc/qcmain.aspx?d=2246

没有明显的原因,这个已知问题是在设置表单的父级时触发的。

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

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

于 2013-07-23T04:00:16.373 回答