On 05/01/2013 12:03, luiz americo pereira camara wrote:
2013/1/5 Martin <[email protected]>:
On 05/01/2013 11:43, luiz americo pereira camara wrote:
If I single step, it is not painted by that line.

It happens here

        Perform(CM_SHOWINGCHANGED, 0, 0); // see
TWinControl.CMShowingChanged

This ends with TWin32WSWinControl.ShowHide that calls SetWindowPos
which should not trigger a immediate wm_paint

What OS are you using?

Win Vista 32 bit

Did you tried commenting the code inside TWin32WidgetSet.ShowScrollBar?

No, I single stepped, and checked, when the paint happened.

Due to LCL/Win message nature, not always the backtrace correspond to
the code that actually triggered the event.

At this time, i'm not sure what exactly is triggering the paint
message you are seeing.

Sometimes the only way to know is by trial and error.

If commenting the code inside TWin32WidgetSet.ShowScrollBar avoids the
paint, we will know that the problem is there, so we can try to fix,
otherwise we will look elsewhere

BTW:

I just double checked and here no WM_PAINT message is triggered

Maybe is related to windows below windows 7



I traced it further, using the assembler.
B:\lazarus_latest_2\lcl\interfaces\win32\win32wscontrols.pp 600

class procedure TWin32WSWinControl.ShowHide(const AWinControl: TWinControl);
const
VisibilityToFlag: array[Boolean] of UINT = (SWP_HIDEWINDOW, SWP_SHOWWINDOW);
begin
  Windows.SetWindowPos(AWinControl.Handle, 0, 0, 0, 0, 0,
SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or VisibilityToFlag[AWinControl.HandleObjectShouldBeVisible])
end;

00571381 e89a08e9ff call 0x401c20 <_$dll$user32$SetWindowPos>


Of course, that may call WindowProc, and do other stuff....

So I set a break at:

B:\lazarus_latest_2\lcl\interfaces\win32\win32callback.inc line 1055
first line in
function WindowProc(Window: HWnd; Msg: UInt; WParam: Windows.WParam;
    LParam: Windows.LParam): LResult; stdcall;

And during the above I received

 Msg
 70 WM_WINDOWPOSCHANGING  (for SynEdit)
 133 WM_NCPAINT (that does it in CallDefaultWindowProc)  (also for SynEdit)
 20
 71


I single stepped the first (WM_WINDOWPOSCHANGING) but I dont know if anything happens when it too calls CallDefaultWindowProc. Didn't see any obvious calls to trigger paint.


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to