jennico Posted January 12, 2009 Posted January 12, 2009 (edited) please help and see my example. when you size or minimize the gui, the embedded progress bar vanishes. i tried some things in WM_Size, but don't know further. maybe just recreate it all the time ? expandcollapse popup#include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #Include <GuiStatusBar.au3> #include <ProgressConstants.au3> Global Const $S32 = "shell32.dll", $K32 = "Kernel32.dll", $U32 = "User32.dll", $INT = "int", $HWN = "hwnd", $STR = "str", $LPA = "lparam", $WPA = "wparam", $PTR = "ptr", $UIN = "uint" Global Const $aParts[6] = [83, 173, 270, 375, 455, -1] ;gui $Child = GUICreate("resize embedded progressbar", 371, 245, Default, Default, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME, $WS_MAXIMIZEBOX), $WS_EX_ACCEPTFILES) ;statusbar $hInstance = DllCall($K32, $HWN, "GetModuleHandle", $PTR, 0) $StatusBar = DllCall($U32, $HWN, "CreateWindowEx", $INT, 0, _;ExStyle $STR, "msctls_statusbar32", $STR, "", $INT, BitOR($__STATUSBARCONSTANT_WS_CHILD, $__STATUSBARCONSTANT_WS_VISIBLE), _;Style $INT, 0, $INT, 0, $INT, 0, $INT, 0, $HWN, $Child, $HWN, 10000, $HWN, $hInstance[0], $PTR, 0) ;parts $struct_parts = DllStructCreate("int[" & UBound($aParts) & "]") For $i = 0 To UBound($aParts) - 1 DllStructSetData($struct_parts, 1, $aParts[$i], $i + 1) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $SB_SETPARTS, $WPA, $i + 1, $PTR, DllStructGetPtr($struct_parts)) Next ;progress $Progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_MARQUEE) $hProgress = GUICtrlGetHandle($Progress) DllCall($U32, $LPA, "SendMessage", $HWN, $hProgress, $INT, $PBM_SETMARQUEE, $WPA, 1, $LPA, 200) DllCall($U32, $HWN, "SetParent", $HWN, $hProgress, $HWN, $StatusBar[0]) DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUISetState() Do Until GUIGetMsg()=-3 Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $__STATUSBARCONSTANT_WM_SIZE, $WPA, 0, $LPA, 0) ; that's what i have tried DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) GUICtrlSetState($Progress,16) ; Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE thx j. Edited January 12, 2009 by jennico Spoiler I actively support Wikileaks | Freedom for Julian Assange ! | Defend freedom of speech ! | Fight censorship ! | I will not silence.Don't forget this IP: 213.251.145.96
BrettF Posted January 12, 2009 Posted January 12, 2009 _GUICtrlStatusBar_Resize () Cheers, Brett Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version!
jennico Posted January 12, 2009 Author Posted January 12, 2009 (edited) hi brett, maybe u missed, that i have statusbar resize in WM_Size function !DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $__STATUSBARCONSTANT_WM_SIZE, $WPA, 0, $LPA, 0)i found a solution meanwhile. instead of WM_Size i have to use WM_ExitSizeMove (much better) !!! :expandcollapse popup#include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #Include <GuiStatusBar.au3> #include <ProgressConstants.au3> Global Const $S32 = "shell32.dll", $K32 = "Kernel32.dll", $U32 = "User32.dll", $INT = "int", $HWN = "hwnd", $STR = "str", $LPA = "lparam", $WPA = "wparam", $PTR = "ptr", $UIN = "uint" Global Const $aParts[6] = [83, 173, 270, 375, 455, -1] Global Const $WM_EXITSIZEMOVE=0x0232 Global $StaBarIcon[6] ;gui $Child = GUICreate("resize embedded progressbar", 371, 245, Default, Default, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME, $WS_MAXIMIZEBOX), $WS_EX_ACCEPTFILES) ;statusbar $hInstance = DllCall($K32, $HWN, "GetModuleHandle", $PTR, 0) $StatusBar = DllCall($U32, $HWN, "CreateWindowEx", $INT, 0, _ ;ExStyle $STR, "msctls_statusbar32", $STR, "", $INT, BitOR($__STATUSBARCONSTANT_WS_CHILD, $__STATUSBARCONSTANT_WS_VISIBLE), _ ;Style $INT, 0, $INT, 0, $INT, 0, $INT, 0, $HWN, $Child, $HWN, 10000, $HWN, $hInstance[0], $PTR, 0) ;parts $struct_parts = DllStructCreate("int[" & UBound($aParts) & "]") For $i = 0 To UBound($aParts) - 1 DllStructSetData($struct_parts, 1, $aParts[$i], $i + 1) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $SB_SETPARTS, $WPA, $i + 1, $PTR, DllStructGetPtr($struct_parts)) Next ;progress $Progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_MARQUEE) $hProgress = GUICtrlGetHandle($Progress) DllCall($U32, $LPA, "SendMessage", $HWN, $hProgress, $INT, $PBM_SETMARQUEE, $WPA, 1, $LPA, 200) DllCall($U32, $HWN, "SetParent", $HWN, $hProgress, $HWN, $StatusBar[0]) DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) ;GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUIRegisterMsg($WM_EXITSIZEMOVE, "WM_EXITSIZEMOVE") GUISetState() Do Until GUIGetMsg()=-3 For $i = 0 To 5 DllCall($U32, $INT, "DestroyIcon", $HWN, $StaBarIcon[$i]) Next Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $__STATUSBARCONSTANT_WM_SIZE, $WPA, 0, $LPA, 0) ; that's what i have tried DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) GUICtrlSetState($Progress,16) ; Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE Func WM_EXITSIZEMOVE($hWnd, $iMsg, $iwParam, $ilParam) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $__STATUSBARCONSTANT_WM_SIZE, $WPA, 0, $LPA, 0) DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) Return $GUI_RUNDEFMSG EndFuncbut it still vanishes on minimize-maximimize action....j. Edited January 12, 2009 by jennico Spoiler I actively support Wikileaks | Freedom for Julian Assange ! | Defend freedom of speech ! | Fight censorship ! | I will not silence.Don't forget this IP: 213.251.145.96
BrettF Posted January 12, 2009 Posted January 12, 2009 Why aren't you using the UDF? Its all there available for you to use under _GUICtrlStatusBar_*... I don't ever see the point of doing it the hard way, when the easier way is better. Cheers, Brett Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version!
jennico Posted January 12, 2009 Author Posted January 12, 2009 the question is, why use the udf if you can do it the easier way without ? but seriously, if you examine my script you will find one and another reasons for not using the udf in a script. i regard them rather as interesting tutorials. but maybe anyone to help with the minimax issue ? j. Spoiler I actively support Wikileaks | Freedom for Julian Assange ! | Defend freedom of speech ! | Fight censorship ! | I will not silence.Don't forget this IP: 213.251.145.96
jennico Posted January 12, 2009 Author Posted January 12, 2009 got another solution: i need them all: WM_Size WM_ExitSizeMove $gui_event_maximize $gui_event_restore $gui_event_resized ? expandcollapse popup#include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #Include <GuiStatusBar.au3> #include <ProgressConstants.au3> Opt("GUIOnEventMode", 1) Global Const $S32 = "shell32.dll", $K32 = "Kernel32.dll", $U32 = "User32.dll", $INT = "int", $HWN = "hwnd", $STR = "str", $LPA = "lparam", $WPA = "wparam", $PTR = "ptr", $UIN = "uint" Global Const $aParts[6] = [83, 173, 270, 375, 455, -1] Global Const $WM_EXITSIZEMOVE = 0x0232 Global $StaBarIcon[6] ;gui $Child = GUICreate("resize embedded progressbar", 371, 245, Default, Default, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME, $WS_MAXIMIZEBOX), $WS_EX_ACCEPTFILES) ;statusbar $hInstance = DllCall($K32, $HWN, "GetModuleHandle", $PTR, 0) $StatusBar = DllCall($U32, $HWN, "CreateWindowEx", $INT, 0, _ ;ExStyle $STR, "msctls_statusbar32", $STR, "", $INT, BitOR($__STATUSBARCONSTANT_WS_CHILD, $__STATUSBARCONSTANT_WS_VISIBLE), _ ;Style $INT, 0, $INT, 0, $INT, 0, $INT, 0, $HWN, $Child, $HWN, 10000, $HWN, $hInstance[0], $PTR, 0) ;parts $struct_parts = DllStructCreate("int[" & UBound($aParts) & "]") For $i = 0 To UBound($aParts) - 1 DllStructSetData($struct_parts, 1, $aParts[$i], $i + 1) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $SB_SETPARTS, $WPA, $i + 1, $PTR, DllStructGetPtr($struct_parts)) Next ;progress $Progress = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_MARQUEE) $hProgress = GUICtrlGetHandle($Progress) DllCall($U32, $LPA, "SendMessage", $HWN, $hProgress, $INT, $PBM_SETMARQUEE, $WPA, 1, $LPA, 200) DllCall($U32, $HWN, "SetParent", $HWN, $hProgress, $HWN, $StatusBar[0]) DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) GUIRegisterMsg($WM_SIZE, "WM_EXITSIZEMOVE") GUIRegisterMsg($WM_EXITSIZEMOVE, "WM_EXITSIZEMOVE") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "WM_EXITSIZEMOVE");= -6 GUISetOnEvent($GUI_EVENT_RESTORE, "WM_EXITSIZEMOVE"); = -5 ;$GUI_EVENT_RESIZED = -12 GUISetState() Do Until GUIGetMsg() = -3 For $i = 0 To 5 DllCall($U32, $INT, "DestroyIcon", $HWN, $StaBarIcon[$i]) Next Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $__STATUSBARCONSTANT_WM_SIZE, $WPA, 0, $LPA, 0) ; that's what i have tried DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) GUICtrlSetState($Progress, 16) ; Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE Func WM_EXITSIZEMOVE($hWnd, $iMsg, $iwParam, $ilParam) DllCall($U32, $LPA, "SendMessage", $HWN, $StatusBar[0], $INT, $__STATUSBARCONSTANT_WM_SIZE, $WPA, 0, $LPA, 0) DllCall($U32, $INT, "MoveWindow", $HWN, $hProgress, $INT, $aParts[1] + 3, $INT, 3, $INT, $aParts[2] - $aParts[1] - 3, $INT, 16, $INT, 1) Return $GUI_RUNDEFMSG EndFunc ;==>WM_EXITSIZEMOVE but i would prefer a more universal solution (without oneventmode). j. Spoiler I actively support Wikileaks | Freedom for Julian Assange ! | Defend freedom of speech ! | Fight censorship ! | I will not silence.Don't forget this IP: 213.251.145.96
rasim Posted January 12, 2009 Posted January 12, 2009 @jennicoExample:#include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #include <GuiStatusBar.au3> Global $iResize = 0 Dim $aPartsEdge[2] = [100, 100] Dim $aPartsText[1] = ["MyStatusBar"] $hGUI = GUICreate("Test GUI", 300, 200, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX, $WS_MAXIMIZEBOX)) $hStatusBar = _GUICtrlStatusBar_Create($hGUI, $aPartsEdge, $aPartsText) $cProgressBar = GUICtrlCreateProgress(0, 0, -1, -1) GUICtrlSetData(-1, 50) $hProgressBar = GUICtrlGetHandle($cProgressBar) _GUICtrlStatusBar_EmbedControl($hStatusBar, 1, $hProgressBar) GUIRegisterMsg($WM_SIZE, "WM_SIZE") GUISetState() Do If $iResize Then $iResize = 0 _GUICtrlStatusBar_EmbedControl($hStatusBar, 1, $hProgressBar) EndIf Until GUIGetMsg() = $GUI_EVENT_CLOSE Func WM_SIZE($hWnd, $Msg, $wParam, $lParam) $iResize = 1 _GUICtrlStatusBar_Resize($hStatusBar) Return $GUI_RUNDEFMSG EndFunc ;==>WM_SIZE
jennico Posted January 12, 2009 Author Posted January 12, 2009 (edited) i will try that in my - more complicated - main script, thx. no, my last attempt was better. the control doesn't stay stable on dropevent. no, not working at all. Edited January 12, 2009 by jennico Spoiler I actively support Wikileaks | Freedom for Julian Assange ! | Defend freedom of speech ! | Fight censorship ! | I will not silence.Don't forget this IP: 213.251.145.96
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