Page 1 of 1

Sync two ScrollAreaGadgets

Posted: Thu Dec 10, 2020 11:07 pm
by incaroad
Hello!

How to sync two ScrollAreaGadgets horizontally?

Thanks
Best regards
Incaroad

Re: Sync two ScrollAreaGadgets

Posted: Fri Dec 11, 2020 1:59 am
by RASHAD
Hi incaroad
Sync 2 ScrollAreaGadgets Hal & Val

# 1:

Code: Select all

Global activeflag

Procedure syncCB()
  If activeflag = 1
    x_0 = GetGadgetAttribute(0, #PB_ScrollArea_X)
    y_0 = GetGadgetAttribute(0, #PB_ScrollArea_Y)
    SetGadgetAttribute(10, #PB_ScrollArea_X,x_0)
    SetGadgetAttribute(10, #PB_ScrollArea_Y,y_0)
  ElseIf activeflag = 10
    x_10 = GetGadgetAttribute(10, #PB_ScrollArea_X)
    y_10 = GetGadgetAttribute(10, #PB_ScrollArea_Y)
    SetGadgetAttribute(0, #PB_ScrollArea_X,x_10)
    SetGadgetAttribute(0, #PB_ScrollArea_Y,y_10)  
  EndIf
EndProcedure

 LoadImage(0, #PB_Compiler_Home + "examples/Sources/Data/PureBasicLogo.bmp")
 imgw = ImageWidth(0)
 imgh = ImageHeight(0)

OpenWindow(0, 0, 0, 500, 430,"Sync 2 ScrollArea", #PB_Window_SystemMenu|#PB_Window_ScreenCentered |#PB_Window_SizeGadget)
  ScrollAreaGadget(0, 10, 10, 480,200, 2000, 2000, 1, #PB_ScrollArea_Flat|#PB_ScrollArea_Center)
    CanvasGadget(1, 10,10,imgw,imgh)
    StartDrawing(CanvasOutput(1))
      DrawImage(ImageID(0),0,0)
    StopDrawing()
  CloseGadgetList()
  ScrollAreaGadget(10, 10, 220, 480,200, 2000, 2000, 1, #PB_ScrollArea_Flat|#PB_ScrollArea_Center)
    CanvasGadget(11,10,10,imgw,imgh)
    StartDrawing(CanvasOutput(11))
      DrawImage(ImageID(0),0,0)
    StopDrawing()
  CloseGadgetList()
BindGadgetEvent(0,@syncCB())
BindGadgetEvent(10,@syncCB())
Repeat
  Select WaitWindowEvent(1)
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #WM_NCMOUSEMOVE
      x = DesktopMouseX()
      y = DesktopMouseY()
      If WindowFromPoint_( y << 32+x) = GadgetID(0)
        activeflag = 1
      ElseIf WindowFromPoint_( y << 32+x) = GadgetID(10)
        activeflag = 10
      EndIf
      
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
Until Quit = 1
End
# 2:

Code: Select all

Global activeflag

Procedure IsMouseOver(hWnd) 
  GetWindowRect_(hWnd,r.RECT)
  GetCursorPos_(p.POINT) 
  Result = PtInRect_(r,p\y << 32 + p\x) 
  ProcedureReturn Result 
EndProcedure

Procedure syncCB()
  If activeflag = 1
    x_0 = GetGadgetAttribute(0, #PB_ScrollArea_X)
    y_0 = GetGadgetAttribute(0, #PB_ScrollArea_Y)
    SetGadgetAttribute(10, #PB_ScrollArea_X,x_0)
    SetGadgetAttribute(10, #PB_ScrollArea_Y,y_0)
  ElseIf activeflag = 10
    x_10 = GetGadgetAttribute(10, #PB_ScrollArea_X)
    y_10 = GetGadgetAttribute(10, #PB_ScrollArea_Y)
    SetGadgetAttribute(0, #PB_ScrollArea_X,x_10)
    SetGadgetAttribute(0, #PB_ScrollArea_Y,y_10)  
  EndIf
EndProcedure

 LoadImage(0, #PB_Compiler_Home + "examples/Sources/Data/PureBasicLogo.bmp")
 imgw = ImageWidth(0)
 imgh = ImageHeight(0)

OpenWindow(0, 0, 0, 500, 430,"Center ScrollArea", #PB_Window_SystemMenu|#PB_Window_ScreenCentered |#PB_Window_SizeGadget)
  ScrollAreaGadget(0, 10, 10, 480,200, 2000, 2000, 1, #PB_ScrollArea_Flat|#PB_ScrollArea_Center)
    CanvasGadget(1, 10,10,imgw,imgh)
    StartDrawing(CanvasOutput(1))
      DrawImage(ImageID(0),0,0)
    StopDrawing()
  CloseGadgetList()
  ScrollAreaGadget(10, 10, 220, 480,200, 2000, 2000, 1, #PB_ScrollArea_Flat|#PB_ScrollArea_Center)
    CanvasGadget(11,10,10,imgw,imgh)
    StartDrawing(CanvasOutput(11))
      DrawImage(ImageID(0),0,0)
    StopDrawing()
  CloseGadgetList()
BindGadgetEvent(0,@syncCB())
BindGadgetEvent(10,@syncCB())
Repeat
  Select WaitWindowEvent(1)
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #WM_NCMOUSEMOVE
      If IsMouseOver(GadgetID(0))
        activeflag = 1
      ElseIf IsMouseOver(GadgetID(10))
        activeflag = 10
      EndIf
      
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
Until Quit = 1
End

Re: Sync two ScrollAreaGadgets

Posted: Fri Dec 11, 2020 9:53 am
by incaroad
RASHAD master!
Thank you very much! :)

Re: Sync two ScrollAreaGadgets

Posted: Fri Dec 11, 2020 2:34 pm
by mestnyi
and so it is impossible?

Code: Select all

Procedure syncCB()
  x_0 = GetGadgetAttribute(EventGadget(), #PB_ScrollArea_X)
  y_0 = GetGadgetAttribute(EventGadget(), #PB_ScrollArea_Y)
  
  If EventGadget() = 0
    SetGadgetAttribute(10, #PB_ScrollArea_X,x_0)
    SetGadgetAttribute(10, #PB_ScrollArea_Y,y_0)
    
  ElseIf EventGadget() = 10
    SetGadgetAttribute(0, #PB_ScrollArea_X,x_0)
    SetGadgetAttribute(0, #PB_ScrollArea_Y,y_0) 
  EndIf
EndProcedure

LoadImage(0, #PB_Compiler_Home + "examples/Sources/Data/PureBasicLogo.bmp")
imgw = ImageWidth(0)
imgh = ImageHeight(0)

OpenWindow(0, 0, 0, 500, 430,"Sync 2 ScrollArea", #PB_Window_SystemMenu|#PB_Window_ScreenCentered |#PB_Window_SizeGadget)
ScrollAreaGadget(0, 10, 10, 480,200, 2000, 2000, 1, #PB_ScrollArea_Flat|#PB_ScrollArea_Center)
CanvasGadget(1, 10,10,imgw,imgh)
StartDrawing(CanvasOutput(1))
DrawImage(ImageID(0),0,0)
StopDrawing()
CloseGadgetList()
ScrollAreaGadget(10, 10, 220, 480,200, 2000, 2000, 1, #PB_ScrollArea_Flat|#PB_ScrollArea_Center)
CanvasGadget(11,10,10,imgw,imgh)
StartDrawing(CanvasOutput(11))
DrawImage(ImageID(0),0,0)
StopDrawing()
CloseGadgetList()
BindGadgetEvent(0,@syncCB())
BindGadgetEvent(10,@syncCB())

Repeat
  Select WaitWindowEvent(1)
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
Until Quit = 1
End


Re: Sync two ScrollAreaGadgets

Posted: Fri Dec 11, 2020 3:18 pm
by incaroad
Wow mestnyi!
You are great. So simply, I didn't even try.
Thanks for that!