Page 2 of 2

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 1:26 pm
by RASHAD
Hi KCC
Full sync. of 2 ListIcons.

Code: Select all

Global oldCallback

Procedure LVcallback(hwnd, msg, wparam, lparam)

  result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
  Select msg
        Case #WM_NOTIFY    
            Protected *nmHEADER.HD_NOTIFY = lParam
            Select *nmHEADER\hdr\code 
              Case #HDN_ENDTRACK,#HDN_DIVIDERDBLCLICK
                  If hwnd = GadgetID(0)
                      Columnw = SendMessage_(GadgetID(0), #LVM_GETCOLUMNWIDTH, *nmHEADER\iItem,0)
                      SendMessage_(GadgetID(1), #LVM_SETCOLUMNWIDTH, *nmHEADER\iItem,Columnw)
                  ElseIf hwnd = GadgetID(1)
                      Columnw = SendMessage_(GadgetID(1), #LVM_GETCOLUMNWIDTH, *nmHEADER\iItem,0)
                      SendMessage_(GadgetID(0), #LVM_SETCOLUMNWIDTH, *nmHEADER\iItem,Columnw)
                  EndIf
                  
            EndSelect                                                              
    

        Case #WM_VSCROLL,#WM_MOUSEWHEEL
              If hwnd = GadgetID(1)
                Item_Sp = SendMessage_(GadgetID(1), #LVM_GETITEMSPACING, 1, 0) >> 16 
                SelItem = GetScrollPos_(GadgetID(1),#SB_VERT) - GetScrollPos_(GadgetID(0),#SB_VERT)
                SendMessage_(GadgetID(0), #LVM_SCROLL, 0, SelItem * Item_Sp)
              ElseIf hwnd = GadgetID(0)
                Item_Sp = SendMessage_(GadgetID(0), #LVM_GETITEMSPACING, 1, 0) >> 16 
                SelItem = GetScrollPos_(GadgetID(0),#SB_VERT) - GetScrollPos_(GadgetID(1),#SB_VERT)
                SendMessage_(GadgetID(1), #LVM_SCROLL, 0, SelItem * Item_Sp)
              EndIf 
        
        Case #WM_HSCROLL
              If hwnd = GadgetID(1)
                  SelItem = GetScrollPos_(GadgetID(1),#SB_HORZ) - GetScrollPos_(GadgetID(0),#SB_HORZ)
                  SendMessage_(GadgetID(0), #LVM_SCROLL, SelItem , 0)
              ElseIf hwnd = GadgetID(0)
                  SelItem = GetScrollPos_(GadgetID(0),#SB_HORZ) - GetScrollPos_(GadgetID(1),#SB_HORZ)
                  SendMessage_(GadgetID(1), #LVM_SCROLL, SelItem , 0)
              EndIf
              
              
        Case #WM_KEYDOWN ,#WM_MENUSELECT
              If wParam=#VK_UP Or wParam=#VK_DOWN
                  If hwnd = GadgetID(1)
                    Item_Sp = SendMessage_(GadgetID(1), #LVM_GETITEMSPACING, 1, 0) >> 16 
                    SelItem = GetScrollPos_(GadgetID(1),#SB_VERT) - GetScrollPos_(GadgetID(0),#SB_VERT)
                    SendMessage_(GadgetID(0), #LVM_SCROLL, 0, SelItem * Item_Sp)
                  ElseIf hwnd = GadgetID(0)
                    Item_Sp = SendMessage_(GadgetID(0), #LVM_GETITEMSPACING, 1, 0) >> 16 
                    SelItem = GetScrollPos_(GadgetID(0),#SB_VERT) - GetScrollPos_(GadgetID(1),#SB_VERT)
                    SendMessage_(GadgetID(1), #LVM_SCROLL, 0, SelItem * Item_Sp)
                  EndIf             
              ElseIf wParam=#VK_LEFT Or wParam=#VK_RIGHT
                  If hwnd = GadgetID(1)
                      SelItem = GetScrollPos_(GadgetID(1),#SB_HORZ) - GetScrollPos_(GadgetID(0),#SB_HORZ)
                      SendMessage_(GadgetID(0), #LVM_SCROLL, SelItem , 0)
                  ElseIf hwnd = GadgetID(0)
                      SelItem = GetScrollPos_(GadgetID(0),#SB_HORZ) - GetScrollPos_(GadgetID(1),#SB_HORZ)
                      SendMessage_(GadgetID(1), #LVM_SCROLL, SelItem , 0)
                  EndIf
              EndIf 

  EndSelect
  
  ProcedureReturn result
EndProcedure

OpenWindow(0, 0, 0, 600, 430,"Syncronize ListIcon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 10, 10, 580, 200, "Column 0", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  ListIconGadget(1, 10, 220, 580, 200, "Column 0", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
  
  oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @LVcallback())
  oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @LVcallback())
  
  For n = 0 To 1
    For i=1 To 5
       AddGadgetColumn(n,i,"Column "+Str(i),150)
    Next
    For i = 0 To 100
      AddGadgetItem(n,-1,"Line " + Str(i) + " Column 0" + Chr(10) + "Line " + Str(i) + " Column 1"+ Chr(10) + "Line " + Str(i) + " Column 2"+ Chr(10) + "Line " + Str(i) + " Column 3"+ Chr(10) + "Line " + Str(i) + " Column 4"+ Chr(10) + "Line " + Str(i) + " Column 5")
    Next i
  Next  
 
Repeat
  Select WaitWindowEvent()
  
        Case #WM_MOUSEMOVE         
                   
        Case #PB_Event_CloseWindow 
          Quit = 1 
    
  EndSelect
 
Until Quit = 1

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 1:40 pm
by Thunder93
Nice. Thanks RASHAD.

Actually very useful when dealing with comparisons. For instance something like file original states and changed states. :)

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 2:04 pm
by Kwai chang caine
Yeeess RASHAD !!!
Exactely what i want !!!! :shock:
In fact, i prefer when the two scrolbars is active :wink:

You continue to pilot and move the API, also simply that flies :D 8)
Image

Thanks my friend and have a good day !! 8)

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 2:13 pm
by Kwai chang caine
I know i overstrain :oops:
But is it possible with your splendid code to "Synchronise or no" dynamically
It "Synchronize = #true" the two ListIcon is synchronized...else no :D

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 2:24 pm
by Thunder93
Like

Code: Select all

  Synchronize = #True
  If Synchronize
    oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @LVcallback())
    oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @LVcallback())
  EndIf
? :lol:

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 2:51 pm
by Kwai chang caine
:lol: :lol:
That...it's specially the KCC programming :lol:
I know do that :mrgreen:

If you have a little bit better,... i take :D

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 2:52 pm
by RASHAD
Thanks Thunder93
With KCC it will be ended in some place else :mrgreen:

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 2:55 pm
by Thunder93
LOL. I've been observing that from him. :lol:

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 3:09 pm
by Thunder93
Well. I suppose you could make a procedure to be called at different points.

Code: Select all

Procedure SetSynchronizeState(State)
  If State = 1
    oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @LVcallback())
    oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @LVcallback())
  Else
    oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, #False)
    oldCallback = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, #False)
  EndIf   
EndProcedure
Then simply
SetSynchronizeState(1) ; To Enable
SetSynchronizeState(0 ; To Disable

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 3:29 pm
by Kwai chang caine
Thanks that works !!! 8)
In fact i know it's possible to cancel a WindowcallBack like this, but i don't know it's the same behaviour with SetWindowLongPtr_ :shock:

Thanks at you two for your precious help

Re: Synchronised Scroll Bars Swimming

Posted: Thu Mar 13, 2014 3:34 pm
by Thunder93
No problem :mrgreen: