Недавно, учитывая общую структуру интерфейса системы MIS, я решил использовать MDI Child в модуле MDI Form+, но у рабочего пространства формы MDI всегда раздражает толстые края.
Вчера я нашел решение версии C ++ из Интернета, и я потратил некоторое время, чтобы перевести его в Delphi.
Напишите следующий код в форме MDI:
интерфейс
Tfmmain = class (tform)
...
Процедура FormCreate (отправитель: Tobject);
...
Частный
...
Процедура CeneleFwndproc ();
Процедура ClientWndProc (var Сообщение: tmessage);
конец;
Выполнение
...
Процедура tfmmain.createdefwndproc;
вар
hwnd1: hwnd;
CCS: tclientCreatestruct;
Начинать
ccs.hwindowmenu: = 0;
ccs.idfirstchild: = $ ff00;
hwnd1: = createwindowex (ws_ex_clientedge,
'Mdiclient', '', ws_child или ws_visible или ws_group или
Ws_tabstop или ws_clipchildren или ws_hscroll или ws_vscroll или
Ws_clipsiblings или mdis_allchildstyles, 0, 0, clientwidth,
ClientHeight, Handle, 0, Hinstance, @CCS);
FclientInstance: = pointer (getWindowlong (hwnd1, gwl_wndproc));
DissultWindow (hwnd1);
конец;
Процедура tfmmain.clientwndproc (var message: tmessage);
// var
// mydc: hdc;
Начинать
if (message.msg = wm_erasebkgnd) тогда
Начинать
// Исходная программа, которая имитирует VCL здесь, заполняет область клиента с помощью цвета фона главного окна.
// Вы также можете нарисовать графику в области клиента.
FillRect (hdc (message.wparam), clientRect, brush.handle);
// mydc: = twmerasebkgnd (сообщение) .dc;
// bitblt (mydc, (clientwidth - imback.picture.width) div 2,
// (clientHeight - imback.picture.height) div 2,
// imback.picture.width, imback.picture.height,
// imback.picture.bitmap.canvas.handle, 0, 0, srccopy);
Сообщение. -Result: = 1;
конец
еще
Message.Result: = callwindowproc (fclientInstance, clientHandle,
Message.msg, message.wparam, message.lparam);
конец;
Процедура tfmmain.formcreate (отправитель: tobject);
Начинать
// *********
CeneleFwndproc ();
SetWindowlong (clientHandle, gwl_wndproc,
Longint (makeObjectInstance (clientWndproc)));
SetWindowlong (clientHandle, gwl_exstyle, getwindowlong (
ClientHandle, gwl_exstyle) и (не ws_ex_clientedge));
SetWindowpos (ClientHandle, 0,0,0,0,0, SWP_FRAMECHANGED
или swp_noactivate или swp_nomove или swp_nosize или swp_nozorder);
// ************************************************** ************
конец;