في الآونة الأخيرة ، بالنظر إلى الإطار العام لواجهة نظام MIS ، قررت استخدام MDI Child في وحدة MDI Form+ ، لكن مساحة عمل نموذج MDI لها دائمًا حواف سميكة مزعجة.
لقد وجدت الحل لإصدار C ++ من الإنترنت بعد ظهر أمس ، وقضيت بعض الوقت لترجمته إلى Delphi.
اكتب الرمز التالي في نموذج MDI:
واجهة
tfmmain = فئة (tform)
...
Formcreate الإجراء (المرسل: TOBJECT) ؛
...
خاص
...
الإجراء createfwNdProc () ؛
الإجراء ClientWndProc (var message: tmessage) ؛
نهاية؛
تطبيق
...
الإجراء tfmmain.createdefwndproc ؛
var
hwnd1: hwnd ؛
CCS: tclientcreatestructruct ؛
يبدأ
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_ALLCHILDSTYLELS ، 0 ، 0 ، ClientWidth ،
ClientHeight ، مقبض ، 0 ، Hinstance ، ccs) ؛
fclientinstance: = pointer (getWindowlong (hwnd1 ، gwl_wndproc)) ؛
Destroywindow (HWND1) ؛
نهاية؛
الإجراء tfmmain.clientwndproc (var message: tmessage) ؛
// var
// MyDC: HDC ؛
يبدأ
if (message.msg = wm_erasebkgnd) ثم
يبدأ
// البرنامج المصدر الذي يحاكي VCL هنا يملأ منطقة العميل بلون الخلفية للنافذة الرئيسية.
// يمكنك أيضًا رسم رسم في منطقة العميل.
FillRect (HDC (message.wparam) ، ClientRect ، Brush.handle) ؛
// mydc: = twmerasebkgnd (message) .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) ؛
message.Result: = 1 ؛
نهاية
آخر
message.result: = callwindowproc (fclientinstance ، clientHandle ،
message.msg ، message.wparam ، message.lparam) ؛
نهاية؛
الإجراء tfmmain.formcreate (المرسل: tobject) ؛
يبدأ
// ********* إزالة الحدود السميكة Mdichild ***************
createfwNdproc () ؛
SetWindowlong (ClientHandle ، GWL_WNDPROC ،
longint (makeobjectinstance (clientwndproc))) ؛
SetWindowlong (ClientHandle ، GWL_EXSTYLE ، getWindowlong (
ClientHandle ، gwl_exstyle) و (وليس ws_ex_clientedge)) ؛
SetWindowpos (ClientHandle ، 0،0،0،0 ، SWP_FrameChanged
أو swp_noactive أو swp_nomove أو swp_nosize أو swp_nozorder) ؛
// ************************************************ ************
نهاية؛