Forțați formularul să fie redesenat

forțat să redreseze forma

Dragi experți.
Cum de a forța forma principală într-o aplicație MDI # 032; complet redraw. (Schimba fundalul ei).
Încercat - Actualizare, Repaint, Reîmprospătare, Invalidat. nu că - doar regiunea formată "ocupată" este redesenată. Și trebuie să fac totul reproșat.

O întrebare contra, cum îți lipi pe tapet?
Nu prin TImage (Align = alClient), pe MDIForm.

Dacă nu, sper, atunci: SendMessage (ClientHandle, WM_ERASEBKGND, 0, 0);

nu, fac asta:

Numit SendMessage (fmMain.ClientHandle, WM_ERASEBKGND, 0, 0);
Rezultatul este același. Poate că totul este că apelul la această funcție este făcut dintr-o casetă de dialog (nu fmMain). și în acest moment este modal.

Înțeleg că, în conformitate cu codul dvs., ar fi mai ușor să modificați acest lucru la:

procedura TfmMain.ClientWndProc (var Mesaj: TMessage);
var
hdcClient: HDC;
Nume: HBRUSH;
începe
caz Message.Msg of
WM_ERASEBKGND: începeți
hdcClient: = GetDC (ClientHandle);
hbrOld: = SelectObject (hdcClient, CreatePatternBrush (imBackground.Picture.Bitmap.Handle));
FillRect (hdcClient, ClientRect, 0);
DeleteObject (SelectObject (hdcClient, hbrOld));
Rezultat: = 1;
se încheie;
altfel
Rezultat: = CallWindowProc (FPrevClientProc, ClientHandle, Msg, wParam, lParam);
se încheie;
se încheie;

La urma urmei, judecând după tot, tu "zamot" vrei ClientHandle, lasă Win în sine contează.
Apoi, în apelul către SendMessage (fmMain.ClientHandle, WM_ERASEBKGND, 0, 0); - ar fi necesar ca wParam să transfere HDC (GetDC (ClientHandle)), pe măsură ce scrieți:

> Dc: = TWMEraseBkGnd (Mesaj) .Dc;

încercat și așa și așa, funcționează și dintr-o casetă de dialog.

Articole similare