resizing controls - refresh

Just starting out? Need help? Post your questions and find answers here.
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by richard.

hi,

using an example from purebasic, i wanted to display the controls correctly after a resize is done to the window.

is there a way to do the same ting without rebuilding everything?
way don't the bitmaps display anymore in the tree and list gadget?



;
; ------------------------------------------------------------
;
; PureBasic - Gadget example file
;
; (c) 2001 - Fantaisie Software
;
; ------------------------------------------------------------
;
; NOTE: This file doesn't compile with the demo version !

InitGadget(30) ; 31 Gadgets maximum (0 is included)

#WindowWidth = 450
#WindowHeight = 315

h=#WindowHeight
w=#WindowWidth

; Load our images..
;
LoadImage(0, "Data\Drive.bmp")
LoadImage(1, "Data\File.bmp")
LoadImage(2, "Data\PureBasic.bmp")

If OpenWindow(0, 100, 120, 450, 315, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget , "PureBasic - Advanced Gadget Demonstration")

If CreateGadgetList(WindowID())
ProgressBarGadget(3, 10, #WindowHeight-45, #WindowWidth-25, 20, 0, 100)

; Update the ProgressBar, just for fun !
;
For k=0 To 100
SetGadgetState(3, k)
Delay(10)
Next

Gosub buildWindows

EndIf

SetGadgetText(4, "Initialize Ok... Welcome !")

Repeat
Repeat
EventID.l = WaitWindowEvent()
Until EventID 0

If EventID = #PB_EventGadget

Select EventGadgetID()
Case 1
MessageRequester("Information", "You did it !", 0)
; resize window by dragging lower right corner
Case 2
SetGadgetText(4, "Tree Gadget. Item selected: "+Str(GetGadgetState(2)))

Case 5
SetGadgetText(4, "ListIcon Gadget. Item selected: "+Str(GetGadgetState(5)))

EndSelect
EndIf
If EventID = #PB_EventRepaint ; If the user has resized the window or anything, we will repaint our graphic
hnew=WindowHeight()
wnew=WindowWidth()
If (h hnew) Or (w wnew)
h=hnew
w=wnew
Gosub buildWindows
EndIf
EndIf

Until EventID = #PB_EventCloseWindow
EndIf

End

buildWindows:

h=WindowHeight()
w=WindowWidth()

CloseWindow(0)
OpenWindow(0, 100, 120, w, h, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget , "PureBasic - Advanced Gadget Demonstration")

CreateGadgetList(WindowID())

ImageGadget (0, 200, 5, 0, 0, UseImage(2))
ButtonImageGadget(1, w-66, 5, 50, 36, LoadIcon_(0, #IDI_WINLOGO))
TextGadget(4, 10, 16, 180, 24, "Please wait while initializing...")

ListIconGadget(5, 170, 50, 265, h-115, "Column 1", 100)
AddGadgetColumn(5, 1, "Column 2", 61)
AddGadgetColumn(5, 2, "Column 3", 80)

For k=0 To 100
AddListIconGadgetItem(5, k, "xxxxxxxElement "+Str(k)+Chr(10)+"Cxxxxxxxxxxxxxxx 2"+Chr(10)+"Comment 3", UseImage(0))
Next

TreeGadget (2, 10, 50, 110, h-115)
AddTreeGadgetItem(2, "General ", UseImage(1))
For k=0 To 10
AddTreeGadgetItem(2, "Hardware"+Str(k), UseImage(0))
OpenTreeGadgetNode()
AddTreeGadgetItem(2, "640*480", UseImage(1))
AddTreeGadgetItem(2, "800*600", UseImage(1))
AddTreeGadgetItem(2, "1024*768", UseImage(1))
AddTreeGadgetItem(2, "1600*1200", UseImage(1))
AddTreeGadgetItem(2, "ScreenMode", UseImage(0))
AddTreeGadgetItem(2, "Joystick", UseImage(1))
CloseTreeGadgetNode()
Next
AddTreeGadgetItem(2, "General "+Str(k), UseImage(1))


Return
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by Cantor.

I changed the code a little bit:
- The window has no longer to be closed and reopened to changed sizes
of gadgets.
- The sizes of gadgets fit better to the sizes of the window.

But: Why does it work only when the window gets greater? If you size
the window smaller, the refresh doesn't work, only if you activate a different window and reactivate your program window. Strange.

Program code:

InitGadget(30) ; 31 Gadgets maximum (0 is included)
#WindowWidth = 450
#WindowHeight = 315
h=#WindowHeight
w=#WindowWidth
; Load our images..
;
LoadImage(0, "Data\Drive.bmp")
LoadImage(1, "Data\File.bmp")
LoadImage(2, "Data\PureBasic.bmp")
If OpenWindow(0, 100, 120, 450, 315, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget , "PureBasic - Advanced Gadget Demonstration")
If CreateGadgetList(WindowID())
ProgressBarGadget(3, 10, #WindowHeight-45, #WindowWidth-25, 20, 0, 100)


; Update the ProgressBar, just for fun !
;
For k=0 To 100
SetGadgetState(3, k)
Delay(10)
Next
Gosub setgadgets
EndIf

SetGadgetText(4, "Initialize Ok... Welcome !")

Repeat
Repeat
EventID.l = WaitWindowEvent()
Until EventID 0
If EventID = #PB_EventGadget

Select EventGadgetID()
Case 1
MessageRequester("Information", "You did it !", 0)
; resize window by dragging lower right corner
Case 2
SetGadgetText(4, "Tree Gadget. Item selected: "+Str(GetGadgetState(2)))
Case 5
SetGadgetText(4, "ListIcon Gadget. Item selected: "+Str(GetGadgetState(5)))

EndSelect
EndIf

If EventID = #PB_EventRepaint ; If the user has resized the window or anything, we will repaint our graphic
hnew=WindowHeight()
wnew=WindowWidth()
If (h hnew) Or (w wnew)
h=hnew
w=wnew
For i=0 To 5:
freegadget(i)
Next
Gosub setgadgets
EndIf
EndIf
Until EventID = #PB_EventCloseWindow
EndIf
End
buildWindows:
h=WindowHeight()
w=WindowWidth()
CloseWindow(0)
OpenWindow(0, 100, 120, w, h, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget , "PureBasic - Advanced Gadget Demonstration")

CreateGadgetList(WindowID())


setgadgets:
ImageGadget (0, 200, 5, 0, 0, UseImage(2))
ButtonImageGadget(1, w-66, 5, 50, 36, LoadIcon_(0, #IDI_WINLOGO))
TextGadget(4, 10, 16, 180, 24, "Please wait while initializing...")
ListIconGadget(5, w/3+30, 50, w-w/3-50, h-115, "Column 1", 100)
AddGadgetColumn(5, 1, "Column 2", 61)
AddGadgetColumn(5, 2, "Column 3", 80)
For k=0 To 100
AddListIconGadgetItem(5, k, "xxxxxxxElement "+Str(k)+Chr(10)+"Cxxxxxxxxxxxxxxx 2"+Chr(10)+"Comment 3", UseImage(0))
Next
TreeGadget (2, 10, 50, w/3, h-115)
AddTreeGadgetItem(2, "General ", UseImage(1))
For k=0 To 10
AddTreeGadgetItem(2, "Hardware"+Str(k), UseImage(0))
OpenTreeGadgetNode()
AddTreeGadgetItem(2, "640*480", UseImage(1))
AddTreeGadgetItem(2, "800*600", UseImage(1))
AddTreeGadgetItem(2, "1024*768", UseImage(1))
AddTreeGadgetItem(2, "1600*1200", UseImage(1))
AddTreeGadgetItem(2, "ScreenMode", UseImage(0))
AddTreeGadgetItem(2, "Joystick", UseImage(1))
CloseTreeGadgetNode()
Next
AddTreeGadgetItem(2, "General "+Str(k), UseImage(1))
Return


--
Best regards,
Martin
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by richard.

hi,

thanx for the help and the tip. funny so, the bitmaps in the tree and the listbox do not display after the first resize. any hints?

regards

richard
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by richard.

hi,

it also seems like, that if you change the size unidirectional to make it smaller, that there is no #PB_EventRepaint. the window will not be repainted.

any suggestions?

regards

richard
Post Reply