Различия в выполнении кода Delphi под WinXP и Win7.Зачем? - PullRequest
1 голос
/ 20 июня 2011

Следующий фрагмент кода Delphi, скомпилированного с DelphiXE под Windows 7, работает по-другому в системе 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.Click выполняется в Windows XP, но не в Windows 7, где пропускается и программапродолжается следующим шагом.Любая помощь, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Базовая диагностика включает в себя помещение подозрительного кода в попытку, кроме блока с основным ShowMessage в обработчике исключений.

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 голос
/ 20 июня 2011

Вы можете отладить код и посмотреть, совпадает ли VK_FXX с KEY.

...