Jump to content

auto re size GUI content


 Share

Recommended Posts

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 by Lights_On
Link to comment
Share on other sites

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?

Capture.JPG

Link to comment
Share on other sites

  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Hi M23,

 

Your absolutely correct - apologies i should know better. 

 

Please find below:

#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

9.JPG

Edited by Lights_On
Link to comment
Share on other sites

  • Moderators

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:

#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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...