| Код | unit Forms;
...
function TCustomForm.ShowModal: Integer; var WindowList: Pointer; SaveFocusState: TFocusState; SaveCursor: TCursor; SaveCount: Integer; ActiveWindow: HWnd; begin CancelDrag; if Visible or not Enabled or (fsModal in FFormState) or (FormStyle = fsMDIChild) then raise EInvalidOperation.Create(SCannotShowModal); if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0); ReleaseCapture; Application.ModalStarted; try Include(FFormState, fsModal); if (PopupMode = pmNone) and (Application.ModalPopupMode <> pmNone) then begin RecreateWnd; HandleNeeded; end; ActiveWindow := GetActiveWindow; SaveFocusState := Forms.SaveFocusState; Screen.SaveFocusedList.Insert(0, Screen.FocusedForm); Screen.FocusedForm := Self; SaveCursor := Screen.Cursor; Screen.Cursor := crDefault; SaveCount := Screen.CursorCount; WindowList := DisableTaskWindows(0); try Show; try SendMessage(Handle, CM_ACTIVATE, 0, 0); ModalResult := 0; repeat Application.HandleMessage; if Application.Terminated then ModalResult := mrCancel else if ModalResult <> 0 then CloseModal; until ModalResult <> 0; Result := ModalResult; SendMessage(Handle, CM_DEACTIVATE, 0, 0); if GetActiveWindow <> Handle then ActiveWindow := 0; finally Hide; end; finally if Screen.CursorCount = SaveCount then Screen.Cursor := SaveCursor else Screen.Cursor := crDefault; EnableTaskWindows(WindowList); if Screen.SaveFocusedList.Count > 0 then begin Screen.FocusedForm := Screen.SaveFocusedList.First; Screen.SaveFocusedList.Remove(Screen.FocusedForm); end else Screen.FocusedForm := nil; if ActiveWindow <> 0 then SetActiveWindow(ActiveWindow); RestoreFocusState(SaveFocusState); Exclude(FFormState, fsModal); end; finally Application.ModalFinished; end; end;
...
|
|