From 587653ec392db9f8619fb97f369ae389110237ce Mon Sep 17 00:00:00 2001 From: martin Date: Sun, 15 Jul 2018 00:37:42 +0000 Subject: [PATCH] SynEdit: Hiding scrollbar on Win32 via code may fail. (Maybe bug in Windows itself). Need to disable it first (by setting page width to 100%). Issue #0027072 git-svn-id: trunk@58526 - --- components/synedit/synedit.pp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index c9cd034214..57b5f37ac5 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -4817,11 +4817,22 @@ begin else include(fStateFlags, sfHorizScrollbarVisible); if fStateFlags * [sfEnsureCursorPos, sfEnsureCursorPosAtResize] <> [] then include(fStateFlags, sfEnsureCursorPosAtResize); + + {$IFDEF LCLWin32} + // Some bug in Windows? ShowScrollBar will not always remove the scrollbar + // This will make the scrollbar un-scrollable, after that it can be hidden + if not (sfHorizScrollbarVisible in fStateFlags) then begin + ScrollInfo.nMax := 99; + ScrollInfo.nPage := ScrollInfo.nMax-1; + ScrollInfo.nPos := 1; + SetScrollInfo(Handle, SB_HORZ, ScrollInfo, False); + end; + {$ENDIF} + ShowScrollBar(Handle, SB_Horz, sfHorizScrollbarVisible in fStateFlags); RecalcCharsAndLinesInWin(True); end; if (sfHorizScrollbarVisible in fStateFlags) then begin -debugln(['}}} ',ScrollInfo.nMax, ', ',CharsInWindow ]); ScrollInfo.nPage := CharsInWindow; ScrollInfo.nPos := LeftChar; SetScrollInfo(Handle, SB_HORZ, ScrollInfo, True); @@ -4846,6 +4857,18 @@ debugln(['}}} ',ScrollInfo.nMax, ', ',CharsInWindow ]); else include(fStateFlags, sfVertScrollbarVisible); if fStateFlags * [sfEnsureCursorPos, sfEnsureCursorPosAtResize] <> [] then include(fStateFlags, sfEnsureCursorPosAtResize); + + {$IFDEF LCLWin32} + // Some bug in Windows? ShowScrollBar will not always remove the scrollbar + // This will make the scrollbar un-scrollable, after that it can be hidden + if not (sfVertScrollbarVisible in fStateFlags) then begin + ScrollInfo.nMax := 99; + ScrollInfo.nPage := ScrollInfo.nMax-1; + ScrollInfo.nPos := 1; + SetScrollInfo(Handle, SB_Vert, ScrollInfo, False); + end; + {$ENDIF} + ShowScrollBar(Handle, SB_Vert, sfVertScrollbarVisible in fStateFlags); RecalcCharsAndLinesInWin(True); end;