WM_SETTEXT:
begin
if not Self_.fIsStaticControl or (Self_.DblBufTopParent = nil) then Exit;
ShowWindow( Self_.fHandle, SW_HIDE );
Rslt := DefWindowProc( Self_.fHandle, WM_SETTEXT, Msg.wParam, Msg.lParam );
ShowWindow( Self_.fHandle, SW_SHOWNA );
UpdateWindow( Self_.fHandle ); // necessary!!!
Result := True;
end;
Работает при fIsStaticControl = true (To prevent flickering it in DoubleBuffered mode). Включен по-умолчанию в Label. Никакой разницы не заметил, ни с ним, ни без него.
------------ Дoбавленo:
Вот смотри, что я сделал
function WndProcBufferedDraw( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean;
begin
Result := False;
if Self_.fCannotDoubleBuf or (Self_.DblBufTopParent = nil) then Exit;
case Msg.message of
WM_PAINT:
begin
if Self_.DblBufTopParent <> Self_ then begin
if (not Self_.DblBufTopParent.fDblBufPainting) or (Self_.DblBufTopParent.fPaintDC = 0) then begin
ValidateRect( Self_.fHandle, nil );
if not Self_.DblBufTopParent.fDblBufPainting then Self_.DblBufTopParent.Invalidate;
Rslt := 0;
Result := True;
end;
Exit;
end;
if Msg.wParam = 0 then DoDrawDblBuffered( Self_ );
end;
WM_HSCROLL, WM_VSCROLL, WM_WINDOWPOSCHANGED: Self_.Invalidate;
WM_COMMAND: case HiWord( Msg.wParam ) of LBN_SELCHANGE: Self_.Invalidate; end;
end;
end;