PlanetSquires Forums

Support Forums => PlanetSquires Software => Topic started by: jermy on July 26, 2020, 11:42:24 AM

Title: Scrollbars Events
Post by: jermy on July 26, 2020, 11:42:24 AM
Dear people,

how can i catch WM_VSCROLL and WM_HSCROLL with the visual designer?
I have already tested several Toolbox Events with Richedit control. there is no response at all from the scrollbar.

Thanks in advance for your help
Title: Re: Scrollbars Events
Post by: Paul Squires on July 26, 2020, 04:02:02 PM
I don't think that the RichEdit control has dedicated message handlers for HSCROLL and VSCROLL.

You should be able to catch the messages by activating the "AllEvents" handler:


''
''
Function frmMain_RichEdit1_AllEvents( ByRef sender As wfxRichEdit, ByRef e As EventArgs ) As LRESULT

   select case e.Message
      case WM_SCROLL
      case WM_VSCROLL
   end select
   
   Function = 0
End Function

Title: Re: Scrollbars Events
Post by: jermy on July 26, 2020, 05:01:26 PM
Hi Paul,

i cant catch any response at all from the scrollbar.
I tested with some other controls, no WM_HSCROLL to catch
perhaps it was forgotten while programming winfbe
I just need to know if the scrollbar has been used


' frmMain form code file
''
''
Function frmMain_RichEdit1_AllEvents( ByRef sender As wfxRichEdit, ByRef e As EventArgs ) As LRESULT

   select case e.Message
      case WM_HSCROLL
     print "WM_HSCROLL"
      case WM_VSCROLL
     Print "WM_VSCROLL"     
   end select

    Function = 0
End Function

''
''
Function frmMain_Load( ByRef sender As wfxForm, ByRef e As EventArgs ) As LRESULT

dim i as long, s as CWSTR
for i = 0 to 20
     s = s & i & chr( 13, 10 )
next
frmMain.RichEdit1.Text = S

    Function = 0
End Function


Thanks in advance for your help
Title: Re: Scrollbars Events
Post by: Paul Squires on July 27, 2020, 01:49:55 PM
Ah, yes, RichEdit scrollbars are more complicated. I remember that an "event mask" had to be set allowing the notification to be sent to the parent window (?). I will research it later once I have access to my development computer.
Title: Re: Scrollbars Events
Post by: jermy on July 28, 2020, 06:11:42 PM
Hi Paul,

I have done a mini survey, sub_classing the edit control does pass the necessary messages

' frmMain form code file

declare Function SubRichEdit1(byval hWnd As HWND, byval uMsg As UINT, byval wParam As WPARAM, byval lParam As LPARAM, byval uIdSubclass As UINT_PTR, byval dwRefData As DWORD_PTR) As LRESULT

''
Function frmMain_Load( ByRef sender As wfxForm, ByRef e As EventArgs ) As LRESULT

dim i as long, s as CWSTR
for i = 0 to 20
     s = s & i & chr( 13, 10 )
next
frmMain.RichEdit1.Text = S


  ' // subclass the RichEdit Control
  SetWindowSubclass( frmMain.RichEdit1.hWindow, @SubRichEdit1, 0, 0 )

    Function = 0
End Function

' ========================================================================================
' Processes messages for the subclassed RichEdit Control.
' ========================================================================================
Function SubRichEdit1( byval hWnd As HWND, _
                       byval uMsg As Uint, _
                       byval wParam As wparam, _
                       byval lParam As lparam, _
                       byval uIdSubclass As Uint_ptr, _
                       byval dwRefData As Dword_Ptr) As LRESULT
select case uMsg
             
       case WM_HSCROLL
             print "WM_HSCROLL"
       case WM_VSCROLL
             Print "WM_VSCROLL"
       Case WM_MOUSEWHEEL
             Print "WM_MOUSEWHEEL"
       Case WM_MOUSEMOVE
             Print "WM_MOUSEMOVE"     
       Case WM_PAINT ' 15
             Print "WM_PAINT"   
       Case WM_SETCURSOR
             Print "WM_SETCURSOR"
       Case WM_TIMER
             Print "WM_TIMER"       
       Case WM_NCHITTEST
             Print "WM_NCHITTEST"                     
       case WM_DESTROY
             ' // Remove the subclass
             RemoveWindowSubClass( hwnd, @SubRichEdit1, uIdSubclass )
       case WM_NCDESTROY
               
       Case else

end select

   ' // Default processing of Windows messages
   FUNCTION = DefSubclassProc(hwnd, uMsg, wParam, lParam)
End Function


Thanks in advance for your help

(removed typo)
Title: Re: Scrollbars Events
Post by: veltesian on July 29, 2020, 02:28:55 AM
hello jermy & paul thanks for this post :D

i wanted to figure out how to work with a RichEdit CTRL. i hope its not a problem as i
copied jermy's example from their last post & everywhere i saw "frmMain" i just replaced that with "Form1"
& that code seemed to work perfectly. i did also want to understand how to populate a combobox & listbox
though, i guess i'll have to come back here soon & ask about it....
Title: Re: Scrollbars Events
Post by: jermy on July 29, 2020, 03:31:27 AM
Hello veltesian,

A small warning

The Toolbox Events description is misleading, AllEvents in the toolbox returns all events except the events that you can also select in the toolbox.
At the moment AllEvents is not working properly yet, it would be more convenient if AllEvents would actually pass on all events.


''
''
Function frmMain_RichEdit1_AllEvents( ByRef sender As wfxRichEdit, ByRef e As EventArgs ) As LRESULT
   
    Print e.Message
    ' // no keyboard event, no click event ... and so on
    Function = 0
End Function