Работа над настольным приложением, состоящим в основном из MDI parent form
, где модули показаны как MDI Child form
. Я хочу избавиться от полос прокрутки при перемещении дочерней формы за пределы клиента. Я уже установил для свойства AutoScroll
значение False
и попробовал следующее решение:
procedure TForm1.FormCreate(Sender: TObject);
begin
if ClientHandle <> 0 then
begin
if (not (GetWindowLong(ClientHandle, GWL_USERDATA) <> 0)) then
begin
SetWindowLong(ClientHandle, GWL_USERDATA,
SetWindowLong(ClientHandle, GWL_WNDPROC,
Integer(@ClientWindowProc)));
end;
end;
end;
function ClientWindowProc(wnd: HWND; Msg: Cardinal; wParam, lParam: Integer): Integer; stdcall;
var
f: Pointer;
begin
f := Pointer(GetWindowLong(wnd, GWL_USERDATA));
case Msg of
WM_NCCALCSIZE: begin
if (GetWindowLong(wnd, GWL_STYLE) and (WS_HSCROLL or WS_VSCROLL)) <> 0 then
SetWindowLong(wnd, GWL_STYLE, GetWindowLong(wnd, GWL_STYLE) and not (WS_HSCROLL or WS_VSCROLL));
end;
end;
Result := CallWindowProc(f, wnd, Msg, wparam, lparam);
end;
Это работает как шарм, если стили VCL не включены. В противном случае я не могу поймать сообщение WM_NCCALCSIZE
.
Я использую Delphi Rio 10.3.3
с включенным VCL Styles
.
ClientWndProc
в основной форме? - person Peter Wolf   schedule 30.07.2020