WinXP和Win7下delphi代码执行的差异。为什么?

时间:2011-06-20 08:14:58

标签: delphi windows-7 delphi-xe

在Windows 7下使用DelphiXE编译的以下delphi代码在Windows XP系统上的运行方式不同。 在表单中,我们有一个处理用户对VK_Fxx键的响应的过程。

procedure TfrmGA010.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
inherited;
KillKey := False;

if bvMF1Panel.Enabled then
begin
case Key of
     VK_F3  : begin
                ...........
                key := 0;
                KillKey := True;
                exit;
              end;
     VK_F4  : begin
                ............
                key := 0;
                KillKey := True;
                exit;
              end;
     VK_F5  : begin
                ...........
                key := 0;
                KillKey := True;
                exit;
              end;
     VK_F7  : begin
                .......
                key := 0;
                KillKey := True;
                exit;
              end;
     VK_F8  : begin
                ........
                key := 0;
                KillKey := True;
                exit;
              end;
    VK_F11  : begin
                if YesNoMsg('Delete?') then
                begin
                  ..........
                  **F5.Click;**               
                end;
                exit;
              end;
  end;
end;

行代码 F5。点击在Windows XP下执行,但在Windows 7下没有跳过,程序将继续下一步。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

基本诊断包括将可疑代码放在try异常处理程序中带有基本ShowMessage的try除外块中。

try
  if YesNoMsg('Delete?') then
    begin
      ..........
      **F5.Click;**               
    end;
except
  on E: Exception do
    ShowMessage(E.ClassName + #13#10 + E.Message);
end;

如果您不喜欢ShowMessage,您可以在表单上始终使用TMemo来附加文本

Memo1.Lines.Add('2 records deleted successfully, about to click F5 :-) ');

此外,防御性编程建议您在继续执行下一条指令之前检查上一行代码的结果(特别是如果它是删除几条记录的子例程)。你应该把它变成一个子程序,它返回至少2个不同的可能结果,加上它自己的异常处理程序(至少你可以在你想要的时候把断点放在其中),而不是简单地将它包含在一个返回True的函数中最后。

另外,我会将F5.Click行移动到名为DeleteSomething的过程中并调用它。

如果所有其他方法都失败了,请将生活日光记录下来。当调试器无法提供帮助时,记录是下一个最好的事情。

答案 1 :(得分:1)

您可以调试代码并查看VK_FXX是否与KEY相同。