melflex
1st December 2008 01:47 UTC
Problems getting horizontal scrollbars on a listbox working
I am trying to get a horizontal scrollbar to be displayed on the list box but with no success, below is what I am trying to do, I have also tried setting LB_SETHORIZONTALEXTENT as the msdn state that this needs to be set if you want to set WS_HSCROLL but it didn't help.
Has anybody else enabling the horizontal scrollbar?
Function releaseNotesPage
nsDialogs::Create /NOUNLOAD 1018
Pop $ReleaseNotesDialog
${If} $ReleaseNotesDialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Release notes."
Pop $ReleaseNotesLabel
${NSD_CreateListBox} 0 13u 262u -13u ""
Pop $ReleaseNotesText
${NSD_LB_AddString} $ReleaseNotesText "A really long string that should be longer than the listbox that contains this message, so I can enable the horizontal scrollbar, Please."
SendMessage $ReleaseNotesText ${LB_SETHORIZONTALEXTENT} 20, 0
${NSD_AddStyle} $ReleaseNotesText ${WS_HSCROLL}
nsDialogs::Show
FunctionEnd
Thank-you
Melflex.
Anders
1st December 2008 02:39 UTC
LB_SETHORIZONTALEXTENT is used to specify the max scroll width, so it needs to be bigger than the listview. It also works better if WS_HSCROLL is there from the get go so you don't have to refresh the control
nsDialogs::CreateControl /NOUNLOAD ${__NSD_ListBox_CLASS} ${__NSD_ListBox_STYLE}|${WS_HSCROLL} ${__NSD_ListBox_EXSTYLE} 0 13u 262u -13u ""
>Pop $ReleaseNotesText
>${NSD_LB_AddString} $ReleaseNotesText "A really long string that should be longer than the listbox that contains this message, so I can enable the horizontal scrollbar, Please."
>SendMessage $ReleaseNotesText ${LB_SETHORIZONTALEXTENT} 2000 0
>
melflex
1st December 2008 02:53 UTC
That worked.
Thanks most appreciated.
Melflex.
Anders
1st December 2008 02:59 UTC
But of course, you might not know the end users font, or even how long the text is, so you can calculate it with this ugly code:
nsDialogs::CreateControl /NOUNLOAD ${__NSD_ListBox_CLASS} ${__NSD_ListBox_STYLE}|${WS_HSCROLL} ${__NSD_ListBox_EXSTYLE} 0 13u 262u -13u ""
Pop $ReleaseNotesText
${NSD_LB_AddString} $ReleaseNotesText "A pretty loooooooooooooooooooooooooooooooooooooooooooooooong striiiiiiiiiiing"
${NSD_LB_AddString} $ReleaseNotesText "A really long string that should be longer than the listbox that contains this message, so I can enable the horizontal scrollbar!"
SendMessage $ReleaseNotesText ${WM_GETFONT} 0 0 $R0
System::Call user32::GetDC(i$ReleaseNotesText)i.R1
System::Call gdi32::SelectObject(i$R1,i$R0)i.R0
System::Call *(i,i)i.r0
StrCpy $2 0
${NSD_LB_GetCount} $ReleaseNotesText $1
loop:
IntOp $1 $1 - 1
System::Call 'user32::SendMessage(i $ReleaseNotesText,i ${LB_GETTEXT},i $1,t.r3)'
StrLen $4 $3
System::Call 'gdi32::GetTextExtentPoint32(i $R1,t "$3",i $4,i $0)'
System::Call *$0(i.r4,i)
IntOp $4 $4 + 10 ;add a little padding
${IfThen} $4 > $2 ${|} StrCpy $2 $4 ${|}
IntCmp $1 0 "" "" loop
System::Free $0
System::Call gdi32::SelectObject(i$R1,i$R0)i
System::Call user32::ReleaseDC(i$ReleaseNotesText,i$R1)
SendMessage $ReleaseNotesText ${LB_SETHORIZONTALEXTENT} $2 0
Edit: Added padding