Sync two ScrollAreaGadgets

Just starting out? Need help? Post your questions and find answers here.
incaroad
User
User
Posts: 35
Joined: Sat Apr 20, 2013 2:58 pm
Location: Hungary; Pilisvörösvár

Sync two ScrollAreaGadgets

Post by incaroad »

Hello!

How to sync two ScrollAreaGadgets horizontally?

Thanks
Best regards
Incaroad
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4955
Joined: Sun Apr 12, 2009 6:27 am

Re: Sync two ScrollAreaGadgets

Post 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
Egypt my love
incaroad
User
User
Posts: 35
Joined: Sat Apr 20, 2013 2:58 pm
Location: Hungary; Pilisvörösvár

Re: Sync two ScrollAreaGadgets

Post by incaroad »

RASHAD master!
Thank you very much! :)
mestnyi
Addict
Addict
Posts: 1098
Joined: Mon Nov 25, 2013 6:41 am

Re: Sync two ScrollAreaGadgets

Post 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

incaroad
User
User
Posts: 35
Joined: Sat Apr 20, 2013 2:58 pm
Location: Hungary; Pilisvörösvár

Re: Sync two ScrollAreaGadgets

Post by incaroad »

Wow mestnyi!
You are great. So simply, I didn't even try.
Thanks for that!
Post Reply