TheAutomator Posted December 8, 2018 Posted December 8, 2018 (edited) Is there a (simple) way to make your script using a picture-control to resize the gui? This would be useful for a transparant pop-up window with a custom made theme using picture controls: $Form = GUICreate('', 301, 173, 5, 5, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) GUICtrlCreatePic(@scriptdir & "\resize_win.bmp", 0, 73, 20, 51) ; some api call or code telling the os to use this picture as a resize border GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) GUISetState(@SW_SHOW) While True if GUIGetMsg() = $GUI_EVENT_CLOSE then Exit WEnd EDIT: to make it more clear what i wanna do, if you go with the mouse arrow over the border of a re-sizable window the arrow changes to a "resize" arrow, you click and drag the border and then the window size adjusts to the mouse position until you release the mouse button. I want my picture control to be used the same way as the resize border to resize my window. Edited December 9, 2018 by TheAutomator Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
UEZ Posted December 8, 2018 Posted December 8, 2018 This may help: TheAutomator 1 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
TheAutomator Posted December 8, 2018 Author Posted December 8, 2018 (edited) read my edit please Edited December 8, 2018 by TheAutomator Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
UEZ Posted December 9, 2018 Posted December 9, 2018 (edited) If this is what you are looking for expandcollapse popup;coded by UEZ #include <Constants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> AutoItSetOption("GUICoordMode", 2) Global Const $STM_SETIMAGE = 0x0172 Global $sPathKey = "HKLM64\SOFTWARE\AutoIt v3\AutoIt\" If @OSArch = "x64" Then $sPathKey = "HKLM\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt\" Global $sImage = RegRead($sPathKey, "InstallDir") & "\Examples\GUI\logo4.gif" _GDIPlus_Startup() Global $hBmp = _GDIPlus_BitmapCreateFromFile($sImage) Global $iW = _GDIPlus_ImageGetWidth($hBmp), $iH = _GDIPlus_ImageGetHeight($hBmp), $iWG = 600, $iHG = 300 Global $hGUI = GUICreate("Test", $iWG, $iHG, -1, -1, -1, $WS_EX_COMPOSITED) Global $idPic = GUICtrlCreatePic("", ($iWG - $iW) / 2, ($iHG - $iH) / 2, $iW, $iH, -1, $WS_EX_STATICEDGE) Global $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp) Global $hB = GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap) If $hB Then _WinAPI_DeleteObject($hB) GUISetState(@SW_SHOW) Global $aMPos, $aCPos = ControlGetPos($hGUI, "", $idPic) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hHBitmap) _GDIPlus_BitmapDispose($hBmp) _GDIPlus_Shutdown() GUIDelete() Exit Case $GUI_EVENT_RESTORE ControlMove($hGUI, "", $idPic, $aCPos[0], $aCPos[1], $aCPos[2], $aCPos[3]) EndSwitch $aMPos = GUIGetCursorInfo($hGUI) Switch $aMPos[4] Case $idPic $aCPos = ControlGetPos($hGUI, "", $idPic) If $aMPos[0] = $aCPos[0] Then ;border west GUISetCursor(13, 1, $hGUI) If $aMPos[2] Then While $aMPos[2] $aMPos = GUIGetCursorInfo($hGUI) ControlMove($hGUI, "", $idPic, $aMPos[0], $aCPos[1], $aCPos[2] + $aCPos[0] - $aMPos[0], $aCPos[3]) WEnd EndIf ElseIf $aMPos[0] = $aCPos[0] + $aCPos[2] Then ;border east GUISetCursor(13, 1, $hGUI) If $aMPos[2] Then While $aMPos[2] $aMPos = GUIGetCursorInfo($hGUI) ControlMove($hGUI, "", $idPic, $aCPos[0], $aCPos[1], $aMPos[0] - $aCPos[0], $aCPos[3]) WEnd EndIf ElseIf $aMPos[1] = $aCPos[1] + $aCPos[3] Then ;border north GUISetCursor(11, 1, $hGUI) If $aMPos[2] Then While $aMPos[2] $aMPos = GUIGetCursorInfo($hGUI) ControlMove($hGUI, "", $idPic, $aCPos[0], $aCPos[1], $aCPos[2], $aMPos[1] - $aCPos[1]) WEnd EndIf ElseIf $aMPos[1] = $aCPos[1] Then ;border south GUISetCursor(11, 1, $hGUI) If $aMPos[2] Then While $aMPos[2] $aMPos = GUIGetCursorInfo($hGUI) ControlMove($hGUI, "", $idPic, $aCPos[0], $aMPos[1], $aCPos[2], $aCPos[3] + $aCPos[1] - $aMPos[1]) WEnd EndIf Else GUISetCursor(2, 1, $hGUI) EndIf Case Else GUISetCursor(2, 1, $hGUI) EndSwitch WEnd then adding the 4 corners is homework for you. Edited December 9, 2018 by UEZ pixelsearch and argumentum 2 Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
pixelsearch Posted December 9, 2018 Posted December 9, 2018 (edited) Another great one from UEZ In case one finds it a bit difficult to grab exactly the desired edge, it should be possible to give him some space : ; If $aMPos[0] = $aCPos[0] Then ;border west If $aMPos[0] >= $aCPos[0] - 3 And $aMPos[0] <= $aCPos[0] + 3 Then ;border west ; a little homework for the 3 other borders :) Edited December 9, 2018 by pixelsearch "I think you are searching a bug where there is no bug... don't listen to bad advice."
TheAutomator Posted December 9, 2018 Author Posted December 9, 2018 (edited) its an interesting workaround for resizing a picture inside a window but i think you still not quite get what i meant.. i'm sorry if my question wasn't clear, i want to use the picture to resize the window anyways, i maybe can alter the code so it resizes the window and not the picture i thought the grip on the window edge was a control itself that could be placed anywhere on a window with some sort of api call, maybe a simple mousepos and winmove is the most simple solution? Thanks for the example Edited December 9, 2018 by TheAutomator Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
UEZ Posted December 10, 2018 Posted December 10, 2018 12 hours ago, pixelsearch said: In case one finds it a bit difficult to grab exactly the desired edge Well, if you hold the lmb pressed and move the mouse cursor over the frames slowly it will automatically catch it. Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
UEZ Posted December 10, 2018 Posted December 10, 2018 10 hours ago, TheAutomator said: i want to use the picture to resize the window Sorry but I don't understand what you want exactly. Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
TheAutomator Posted December 10, 2018 Author Posted December 10, 2018 2 hours ago, UEZ said: Sorry but I don't understand what you want exactly. resize the window using an image control, i don't know how to be more clear Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
Nine Posted December 10, 2018 Posted December 10, 2018 (edited) When is the window enlarged ? When the picture hits the border ? At the moment the picture starts moving ? How do you reduce the window ? How do we know what type of arrow cursor to use ? I think this is the kind of questions... Edited December 10, 2018 by Nine “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Debug Messages Monitor UDF Screen Scraping Round Corner GUI UDF Multi-Threading Made Easy Interface Object based on Tag
TheAutomator Posted December 10, 2018 Author Posted December 10, 2018 (edited) 1 hour ago, Nine said: When is the window enlarged ? When the picture hits the border ? At the moment the picture starts moving ? How do you reduce the window ? How do we know what type of arrow cursor to use ? I think this is the kind of questions... oh okay, well i'm planning on using 4 pictures, top, bottom, left,right and they are on a transparent popup window. hover over for example the right image and the horizontal resize arrow appears when for example the mouse clicks and drags on the bottom picture, the form starts to change shape vertically at the bottom like it would if you would click-drag the bottom grip on a normal re sizable form. the image is supposed to be saying at the bottom in this case Edited December 10, 2018 by TheAutomator Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
BrewManNH Posted December 10, 2018 Posted December 10, 2018 Use the picture to trigger a WinMove, you can use the picture like you would a button control. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
TheAutomator Posted December 10, 2018 Author Posted December 10, 2018 2 minutes ago, BrewManNH said: Use the picture to trigger a WinMove, you can use the picture like you would a button control. not if you wanna use click-drag, a button reacts only after you release the mouse. Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
Nine Posted December 10, 2018 Posted December 10, 2018 Well like @BrewManNH said you can use winmove. I modified @UEZ script to give you an idea how it can be done... expandcollapse popup#include <Constants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> Opt ("MustDeclareVars", 1) AutoItSetOption("GUICoordMode", 2) Global $sPathKey = "HKLM64\SOFTWARE\AutoIt v3\AutoIt\" If @OSArch = "x64" Then $sPathKey = "HKLM\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt\" Global $sImage = RegRead($sPathKey, "InstallDir") & "\Examples\GUI\logo4.gif" _GDIPlus_Startup() Global $hBmp = _GDIPlus_BitmapCreateFromFile($sImage) Global $iW = _GDIPlus_ImageGetWidth($hBmp), $iH = _GDIPlus_ImageGetHeight($hBmp), $iWG = 600, $iHG = 300 Global $hGUI = GUICreate("Moving Pictures", $iWG, $iHG, -1, -1, -1, $WS_EX_COMPOSITED) Global $idPic = GUICtrlCreatePic("", ($iWG - $iW) / 2, ($iHG - $iH) / 2, $iW, $iH) Global $hHBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBmp) Global $hB = GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hHBitmap) If $hB Then _WinAPI_DeleteObject($hB) GUISetState(@SW_SHOW) Global $aMPos, $aCPos = ControlGetPos($hGUI, "", $idPic), $dx, $dy, $aWPos = WinGetPos ($hGUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hHBitmap) _GDIPlus_BitmapDispose($hBmp) _GDIPlus_Shutdown() GUIDelete() Exit Case $GUI_EVENT_RESTORE ControlMove($hGUI, "", $idPic, $aCPos[0], $aCPos[1], $aCPos[2], $aCPos[3]) EndSwitch $aMPos = GUIGetCursorInfo($hGUI) if $aMPos[4] <> $idPic then ContinueLoop $aCPos = ControlGetPos($hGUI, "", $idPic) $dx = $aCPos[0]-$aMPos[0] $dy = $aCPos[1]-$aMPos[1] if $aMpos[2] then GUISetCursor($IDC_SIZEALL, $GUI_CURSOR_OVERRIDE, $hGUI) While $aMpos[2] $aMPos = GUIGetCursorInfo($hGUI) $aCPos = ControlGetPos($hGUI, "", $idPic) ControlMove($hGUI, "", $idPic, $aMPos[0]+$dx, $aMPos[1]+$dy, $aCPos[2], $aCPos[3]) if $aCPos[0] < 0 then WinMove ($HGui, "", $aWPos[0]+$aCPos[0],$aWPos[1],$aWPos[2]-$aCPos[0],$aWPos[3]) $aWPos = WinGetPos ($hGUI) endif if $aCPos[1] < 0 then WinMove ($HGui, "", $aWPos[0],$aWPos[1]+$aCPos[1],$aWPos[2],$aWPos[3]-$aCPos[1]) $aWPos = WinGetPos ($hGUI) endif Wend GUISetCursor($IDC_ARROW, $GUI_CURSOR_OVERRIDE, $hGUI) endif WEnd Only done Left and Top edges, but you will be able to create the wanted script. “They did not know it was impossible, so they did it” ― Mark Twain Spoiler Block all input without UAC Save/Retrieve Images to/from Text Monitor Management (VCP commands) Tool to search in text (au3) files Date Range Picker Virtual Desktop Manager Sudoku Game 2020 Overlapped Named Pipe IPC HotString 2.0 - Hot keys with string x64 Bitwise Operations Multi-keyboards HotKeySet Recursive Array Display Fast and simple WCD IPC Multiple Folders Selector Printer Manager GIF Animation (cached) Debug Messages Monitor UDF Screen Scraping Round Corner GUI UDF Multi-Threading Made Easy Interface Object based on Tag
TheAutomator Posted December 10, 2018 Author Posted December 10, 2018 16 minutes ago, Nine said: Well like @BrewManNH said you can use winmove. I modified @UEZ script to give you an idea how it can be done... Only done Left and Top edges, but you will be able to create the wanted script. the picture doesn't have to move ill try to alter the code, i think the gdi stuff is not necessary i post my code later Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
BrewManNH Posted December 10, 2018 Posted December 10, 2018 If it doesn't have to move then you can do what I said, use the picture as a trigger for a function to resize the window. I didn't say it was a button, I said you can use it like a button. I don't understand why you keep saying click-drag and then saying it doesn't have to move. Either it's moving (being dragged i.e. click-drag) or it's stationary, pick one and stop moving the goals. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
TheAutomator Posted December 10, 2018 Author Posted December 10, 2018 (edited) 9 hours ago, BrewManNH said: If it doesn't have to move then you can do what I said, use the picture as a trigger for a function to resize the window. I didn't say it was a button, I said you can use it like a button. I don't understand why you keep saying click-drag and then saying it doesn't have to move. Either it's moving (being dragged i.e. click-drag) or it's stationary, pick one and stop moving the goals. i didn't move the goal, if you resize a normal window you also press the main mouse button down while resizing the window, isn't that a click drag operation until you release the mouse button? Edited December 11, 2018 by TheAutomator Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
TheAutomator Posted December 11, 2018 Author Posted December 11, 2018 (edited) the code i end up with: While True Local $win = WinGetPos($Form) Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $Left; image control on the left side of the form While GUIGetCursorInfo($Form)[2] = 1 Local $y = MouseGetPos()[0] - 15; the image distance from the side of the form is 15 here WinMove($Form,'',$y,$win[1], $win[2] + $win[0] - $y,$win[3]) WEnd Case $Top While GUIGetCursorInfo($Form)[2] = 1 Local $x = MouseGetPos()[1] - 15 WinMove($Form,'',$win[0], $x, $win[2],$win[3] + $win[0] - $x) WEnd Case $Right While GUIGetCursorInfo($Form)[2] = 1 WinMove($Form,'',$win[0],$win[1], MouseGetPos()[0] - $win[0] + 15 ,$win[3]) WEnd Case $Bottom While GUIGetCursorInfo($Form)[2] = 1 WinMove($Form,'',$win[0],$win[1] , $win[2], MouseGetPos()[1] - $win[1] + 15) WEnd EndSwitch WEnd Again, sorry if i wasn't as clear as i thought, at the end i could use the code examples given by you guys and extract the necessary info from it Thanks for the help! Edited December 11, 2018 by TheAutomator Retro Console, NestedArrayDisplay UDF foldermaker-pro-clone MiniMark Editor
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