У меня проблема с приложением формы, созданным в Delphi 5. В этом приложении у меня есть несколько кнопок, которые открывают (устанавливают видимое свойство) разные формы.Это создается как родительская панель.Переопределена только одна функция:
procedure TForm.CreateParams(var Params : TCreateParams);
begin
inherited CreateParams(Params);
with Params do begin
Style := ws_Child;
X :=FormMain.panelMain.Left;
Y :=FormMain.panelMain.Top;
Height :=FormMain.panelMain.Height;
Width := FormMain.panelMain.Height;
WndParent := FormMain.Handle;
end
end;
У меня также есть функция для изменения фактической формы на панели:
procedure TFormMain.ChangeToForm(newForm: TMainForm);
begin
if (newForm=nil) or (newForm=lastForm) then EXIT;
actForm:=newForm;
actForm.Visible :=true;
if assigned(lastForm) then lastForm.Visible:=false;
lastForm:=actForm;
LabelScreen.Caption:=actForm.Caption;
newForm.Left := 0;
newForm.Top := 0;
newForm.Width := panelMDI.Width;
newForm.Height := panelMDI.Height;
newForm.Left := panelMDI.Left;
newForm.Top := panelMDI.Top;
end;
Когда я открываю приложение, все работает нормально.Кнопки меняют формы.Все отлично.Но когда пользователь не использует это приложение (не изменяет формы и т. Д.) В течение некоторого периода времени.Нажатие на кнопки генерирует исключения:
Access violation at address 0044D761 in module 'rozpoznawanie.exe'. Read of address 00000004; EAccessViolation
[...]
00534f2e jz loc_534fe9
00534f34 196 mov eax, [ebp-8]
00534f37 mov [$54b3a4], eax
00534f3c 197 mov dl, 1
00534f3e mov eax, [$54b3a4]
00534f43 > call -$9c194 ($498db4) ; Forms.TCustomForm.SetVisible
00534f48 198 cmp dword ptr [$54b3a8], 0
00534f4f jz loc_534f5d
00534f51 xor edx, edx
00534f53 mov eax, [$54b3a8]
00534f58 call -$9c1a9 ($498db4) ; Forms.TCustomForm.SetVisible
[...]
Я искал везде и не знаю, почему это появляется.есть предложения?
РЕДАКТИРОВАТЬ
Я обнаружил, что проблема может быть раньше:
00756bc8 vcl70.bpl Controls.TWinControl.HandleNeeded
00756bd5 vcl70.bpl Controls.TWinControl.GetHandle
0076e675 vcl70.bpl Forms.TCustomForm.GetMonitor
0076ecd0 vcl70.bpl Forms.TCustomForm.SetWindowToMonitor
0076daf1 vcl70.bpl Forms.TCustomForm.SetVisible
в SetWindowToMonitor Я прочитал это, если наНа компьютере мы установили более одного монитора, иногда возникает эта проблема.Но я попытался изменить свойство DefaultMonitor, и это не работает.