Baru -baru ini, mengingat keseluruhan kerangka kerja antarmuka sistem MIS, saya memutuskan untuk menggunakan MDI Child dalam modul Formulir MDI, tetapi ruang kerja formulir MDI selalu memiliki tepi tebal yang menjengkelkan.
Saya menemukan solusi untuk versi C ++ dari internet kemarin sore, dan saya menghabiskan waktu untuk menerjemahkannya ke Delphi.
Tulis kode berikut dalam formulir MDI:
antarmuka
Tfmmain = class (tform)
...
Prosedur FormCreate (pengirim: Tobject);
...
Pribadi
...
Prosedur CreateFwndProc ();
Prosedur ClientWndProc (pesan VAR: TMessage);
akhir;
Pelaksanaan
...
Prosedur tfmmain.createdefwndproc;
var
hwnd1: hwnd;
CCS: TClientCreateStruct;
Mulai
ccs.hwindowmenu: = 0;
ccs.idfirstchild: = $ ff00;
hwnd1: = createWindowex (ws_ex_clientedge,
'Mdiclient', '', ws_child atau ws_visible atau ws_group atau
Ws_tabstop atau ws_clipchildren atau ws_hscroll atau ws_vscroll atau
WS_CLIPSIBLINGS atau MDIS_ALLCHILDSTYLES, 0, 0, ClientWidth,
ClientHeight, Handle, 0, Hinstance, @CCS);
FClientInstance: = pointer (getWindowlong (hwnd1, gwl_wndproc));
DestroyWindow (HWND1);
akhir;
prosedur tfmmain.clientwndProc (pesan var: tmessage);
// var
// mydc: hdc;
Mulai
if (message.msg = wm_erasebkgnd)
Mulai
// Program sumber yang mensimulasikan VCL di sini mengisi area klien dengan warna latar belakang jendela utama.
// Anda juga dapat menggambar grafik di area klien.
Fillrect (hdc (message.wparam), clientrect, brush.handle);
// mydc: = twmeraseBkGnd (pesan) .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);
Pesan.RESULT: = 1;
akhir
kalau tidak
Pesan.Result: = CallWindowProc (FClientInstance, ClientHandle,
Message.msg, message.wparam, message.lparam);
akhir;
Prosedur tfmmain.FormCreate (pengirim: TOBJEK);
Mulai
// ********* Melepas perbatasan tebal mdichild ***************
CreateDefwndProc ();
SetWindowlong (ClientHandle, GWL_WNDPROC,
Longint (MakeObjectInstance (ClientWndProc)));
SetWindowlong (ClientHandle, GWL_EXSTYLE, GetWindowlong (
ClientHandle, gwl_exstyle) dan (bukan ws_ex_clientedge));
SetWindowPos (ClientHandle, 0,0,0,0,0, SWP_Framechanged
atau swp_noactivate atau swp_nomove atau swp_nosize atau swp_nozorder);
// ******************************************** ************
akhir;