Vor kurzem habe ich unter Berücksichtigung des Gesamtrahmens der MIS -Systemschnittstelle beschlossen, MDI -Kind im MDI -Formular+ -Modul zu verwenden, aber der Arbeitsbereich des MDI -Formulars hat immer nervige dicke Kanten.
Ich habe gestern Nachmittag die Lösung für die C ++ - Version aus dem Internet gefunden, und ich habe einige Zeit damit verbracht, sie in Delphi zu übersetzen.
Schreiben Sie den folgenden Code in das MDI -Formular:
Schnittstelle
Tfmmain = class (tform)
...
Prozedur Formcreate (Absender: Tobject);
...
Privat
...
Prozedurer erstellte
Procedure clientWndProc (var message: tMessage);
Ende;
Durchführung
...
Verfahren tfmmain.createdEfwndproc;
var
hwnd1: hwnd;
CCS: TclientCreateStruct;
Beginnen
ccs.hwindowmenu: = 0;
ccs.idfirstchild: = $ ff00;
hwnd1: = createwindowex (WS_EX_CLIENTEDE,
'Mdiclient', '', WS_Child oder WS_VISIBLE oder WS_GROUP oder
WS_TABSTOP oder WS_CLIPCHILDREN oder WS_HSCROLL oder WS_VSCROLL oder
WS_CLIPSiblings oder MDIS_ALLCHILDSTYLES, 0, 0, clientbreite,
ClientHeight, Handle, 0, Hinstance, @CCS);
FclientInstance: = pointer (getWindowlong (hwnd1, gwl_wndproc));
DestroyWindow (hwnd1);
Ende;
procedure tfmmain.clientwndproc (var message: tmessage);
// var
// mydc: hdc;
Beginnen
if (message.msg = wm_erasebkgnd) dann
Beginnen
// Das Quellprogramm, das VCL hier simuliert, füllt den Clientbereich mit der Hintergrundfarbe des Hauptfensters.
// Sie können auch eine Grafik im Kundenbereich zeichnen.
FILLRECT (HDC (Message.Wparam), ClientRect, Pinsel.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;
Ende
anders
Message.Result: = CALLWINDOWPROC (fclientInstance, ClientHandle,
Message.msg, message.wparam, message.lparam);
Ende;
Prozedur tfmmain.formcreate (Absender: tobject);
Beginnen
// ********* MDichild Dicke Rand entfernen ****************************
ErstellteFWNDPROC ();
SetWindowlong (ClientHandle, GWL_Wndproc,
Longint (makeObjectInstance (ClientWndProc)));
Setwindowlong (ClientHandle, GWL_EXStyle, Getwindowlong (
ClientHandle, gwl_exStyle) und (nicht ws_ex_clientedge));
SetWindowpos (ClientHandle, 0,0,0,0,0, swp_framechanged
oder swp_noactivate oder swp_nomove oder swp_nosize oder swp_nozorder);
//************************************************************ ************
Ende;