Примусово перемалювати форму

примусово перемалювати форму

Шановні знавці.
Як примусово змусить головну форму в MDI-додатку # 032; повністю перемалювати. (Я міняю її шпалери).
Пробував - Update, Repaint, Refresh, Invalidat. не те - перемальовується тільки "зайнята" область форми. А мені треба, щоб вона вся перемалювати.

А зустрічне запитання, як ти на неї шпалери клеїш?
Чи не через TImage (Align = alClient), на MDIForm.

Якщо немає, сподіваюся, тоді: SendMessage (ClientHandle, WM_ERASEBKGND, 0, 0);

немає, я роблю так:

Викликав SendMessage (fmMain.ClientHandle, WM_ERASEBKGND, 0, 0);
Рузультате - той же. Може вся фішка в тому, що виклик цієї функції проводиться з діалогового вікна (НЕ fmMain). причому воно на цей момент модальное.

Я так розумію, що, по-твоєму коду, легше б це змінити на:

procedure TfmMain.ClientWndProc (var Message: TMessage);
var
hdcClient: HDC;
hbrOld: HBRUSH;
begin
case Message.Msg of
WM_ERASEBKGND: begin
hdcClient: = GetDC (ClientHandle);
hbrOld: = SelectObject (hdcClient, CreatePatternBrush (imBackground.Picture.Bitmap.Handle));
FillRect (hdcClient, ClientRect, 0);
DeleteObject (SelectObject (hdcClient, hbrOld));
Result: = 1;
end;
else
Result: = CallWindowProc (FPrevClientProc, ClientHandle, Msg, wParam, lParam);
end;
end;

Адже, судячи по-всьому, ти "замостити" хочеш ClientHandle, нехай Win сама розраховує.
Та й потім, у виклику SendMessage (fmMain.ClientHandle, WM_ERASEBKGND, 0, 0); - треба б в wParam передавати HDC (GetDC (ClientHandle)), так як ти пишеш:

> Dc: = TWMEraseBkGnd (Message) .Dc;

спробував і так і сяк, працює і з діалогового вікна теж.

Схожі статті