Lights_On Posted February 12, 2017 Posted February 12, 2017 (edited) Hi all, I am having a little trouble with ‘GUICtrlSetResizing’ an hoping someone could push me in the direction of best practice. I have a basic GUI created to a set size with the enabled abilities to resize it: GUICreate("Test", 500, 450, -1, -1, BitOR($WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX)) Inside this I have an image and label: GUICtrlCreateLabel($Image1StampInfo, 10, 395, 480, 20, $SS_CENTER) GUICtrlCreatePic($TheImage, 25, 25, 450, 350) Using: Case ($GUI_EVENT_MAXIMIZE or $GUI_EVENT_RESTORE or $GUI_EVENT_RESIZED) I activate: GUICtrlSetResizing($TheImageBox, $GUI_DOCKAUTO) GUICtrlSetResizing($Image1Stamp, $GUI_DOCKAUTO) This works fine with the image but not with the label – the label after a bit of resizing seems to get stuck in different places in the GUI as if the $GUI_DOCKAUTO has not worked properly. So 2 questions if I may. 1) Have I used $GUI_DOCKAUTO incorrectly for use with lables? 2) I am happy to manually set new sizes dynamically but how? I can get the size of the window with ‘WinGetPos()’ but how do I set new size parameters for the ‘label’ and ‘image’? Thank you in advance. Edited February 12, 2017 by Lights_On
Lights_On Posted February 12, 2017 Author Posted February 12, 2017 I have tired with 'GUICtrlSetPos' but with the same result. After playing around with the size of the GUI I eventually get as per attached. I have also tried deleting the GUI and then re adding it each time instead of resizing it. Cant see why this effect happens? Its like multiple windows are there in the wrong position overlaying one another?
Moderators Melba23 Posted February 12, 2017 Moderators Posted February 12, 2017 Lights_On, Give some runnable code which shows the problem and I will take a look - merely posting a bunch of snippets does not give us a lot with which to work. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Lights_On Posted February 13, 2017 Author Posted February 13, 2017 (edited) Hi M23, Your absolutely correct - apologies i should know better. Please find below: expandcollapse popup#include <GUIConstantsEx.au3> #include <GDIPlus.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> Call ("Viewer") Func Viewer() Local $TheViewer = GUICreate("Viewer", 500, 450, -1, -1, BitOR($WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX)) Local $TheImage = @ScriptDir & "\9.jpg" Local $TheImageBox = GUICtrlCreatePic($TheImage, 25, 25, 450, 350) local $Image1StampFile = FileOpen(@ScriptDir & "\9.txt") local $Image1StampInfo = FileRead($Image1StampFile) FileClose($Image1StampFile) local $Image1Stamp = GUICtrlCreateLabel($Image1StampInfo, 25, 395, 450, 20, $SS_CENTER) local $time = TimerInit() GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case ($GUI_EVENT_MAXIMIZE or $GUI_EVENT_RESTORE or $GUI_EVENT_RESIZED) GUICtrlSetResizing($TheImageBox, $GUI_DOCKVCENTER) GUICtrlSetResizing($Image1Stamp, $GUI_DOCKVCENTER) Case Else if TimerDiff($time) > 5000 Then local $Image1StampFile = FileOpen(@ScriptDir & "\9.txt") local $Image1StampInfo = FileRead($Image1StampFile) FileClose($Image1StampFile) local $Image1Stamp = GUICtrlCreateLabel($Image1StampInfo, 10, 395, 480, 20, $SS_CENTER) GUICtrlSetData($Image1Stamp, $Image1StampInfo) GUICtrlSetImage($TheImageBox, $TheImage) local $time = TimerInit() EndIf EndSwitch WEnd GUIDelete() EndFunc I have added 2 attachments that work with it. Simply run then resize the box by dragging the sides over and over. Eventual you see the issue discussed. I simply seek for the image and label to move and resize dynamically. Thank you. 9.txt Edited February 13, 2017 by Lights_On
Moderators Melba23 Posted February 13, 2017 Moderators Posted February 13, 2017 Lights_On, The problem arises because you are continually recreating the image and label controls at a specific place in the GUI. Just create them the once, setting theresizing at that point, and then merely reset the data they hold each time the 5 sec timer fires. This runs for me with no problem: expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> Viewer() Func Viewer() Local $TheViewer = GUICreate("Viewer", 500, 450, -1, -1, BitOR($WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX)) Local $TheImage = @ScriptDir & "\9.jpg" Local $TheFile = @ScriptDir & "\9.txt" Local $TheImageBox = GUICtrlCreatePic($TheImage, 25, 25, 450, 350) GUICtrlSetResizing($TheImageBox, $GUI_DOCKVCENTER) ; Set resizing as you create the control Local $Image1StampInfo = FileRead($TheFile) Local $Image1Stamp = GUICtrlCreateLabel($Image1StampInfo, 25, 395, 450, 20, $SS_CENTER) GUICtrlSetResizing($Image1Stamp, $GUI_DOCKVCENTER) ; Set resizing as you create the control Local $time = TimerInit() GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch ; The time is independent of GUIGetMsg, so I would place its code outside of the Switch structure If TimerDiff($time) > 5000 Then ; And now just replace the content of the controls Local $Image1StampInfo = FileRead($TheFile) GUICtrlSetData($Image1Stamp, $Image1StampInfo) GUICtrlSetImage($TheImageBox, $TheImage) Local $time = TimerInit() EndIf WEnd GUIDelete() EndFunc ;==>Viewer M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Lights_On Posted February 13, 2017 Author Posted February 13, 2017 ..and just like that my issue is fixed. Thank you sir. I had spent many hours in the last 48 trying to work this through. No luck. Your explanation was clear and I understand your examples and explanation. Thank you.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now