Jump to content

Recommended Posts

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 by TheAutomator
Link to post
Share on other sites

If this is what you are looking for

;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 by UEZ

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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to post
Share on other sites

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 by pixelsearch
Link to post
Share on other sites

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 by TheAutomator
Link to post
Share on other sites
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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to post
Share on other sites
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!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to post
Share on other sites

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 by Nine
Link to post
Share on other sites
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 by TheAutomator
Link to post
Share on other sites

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 Gude
How 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

Link to post
Share on other sites

Well like @BrewManNH said you can use winmove.  I modified @UEZ script to give you an idea how it can be done...

#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.

Link to post
Share on other sites
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

Link to post
Share on other sites

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 Gude
How 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

Link to post
Share on other sites
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 by TheAutomator
Link to post
Share on other sites

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 by TheAutomator
Link to post
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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By nacerbaaziz
      hello guys, please i need your help
      am trying to work with CreateWindowEx api, i created the window with it controls, also i setup the call back function
      i'am using WinMSGLoop to focus with the keyboard.
      here i have a problem, i hope that you can help me.
      on the controls i used the UDF that comme with the autoit, such as _GUIButton_Create, _GUIListBox_Create....
      but i can't find a STATIC control UDF, for that i used this

      local $h_ssrvlbl = _WinAPI_CreateWindowEx(0, "STATIC", "الخادم", BitOr($WS_VISIBLE, $WS_CHILD, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN), 250, 10, 100, 20, $hWnd)
      as you can see here, there is an arabic text, so here is the problem, the arabic text isn't show normally, what is the problem here?
      also i have  an other question about keyboard focus, when i used WinMSGLoop, it worked, but if i press alt+tab to switch windows or focus an other window and return back to my window, the focus of control is kill.
      can any one help me to solve that please?
      my code will be as file here with the include files
      i hope can any one help me here
      thanks in advance
       
      speed Test win.zip
    • By shelly
      Here is the below code for handling pop-up when window is  inactive ..but I don't know how to change sleep and when i run this script it runs sometimes and sometimes it stops .
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{SPACE}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{DOWN}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{ENTER}")
      --- these 3 lines never worked while TAB lines works sometimes but not in accurate way
      I am new too AutoIt .. help me out why this script behaves in strange way
      ControlFocus("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog", "", "Internet Explorer_Server1","1")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog", "", "Internet Explorer_Server1","the request is send")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{SPACE}")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{DOWN}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      Sleep(3000)
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{TAB}")
      ControlSend("Policy Decisions -- Webpage Dialog","","Internet Explorer_Server1","{ENTER}")
       
    • By Cengokill
      Hi everyone,
      I have created a ListView that is in a tab, and I want to display an image in that tab, with the ListView on top.
      However, the image still appears on top of my ListView.
      If I remove the tabs everything works. 
      I looked at the autoit documentation and the <GuiListView.au3> documentation , I can't figure out how to display a background image, and put on top a ListView, inside a tab. 😥
      Here is the code:
      Opt("GUIOnEventMode", 1) $Form1 = GUICreate($Titre, 700, 627, $Form1Width, $Form1Height); main window $tabulation = GUICtrlCreateTab(148,0,700,580); creating tabs $tab1=GUICtrlCreateTabItem("Tab 1"); first tab GUICtrlSetState(-1, $GUI_SHOW); this tab is selected by default $Pic1 = GUICtrlCreatePic("image.jpg", 0, 30, 700, 627) GUICtrlSetState(-1, $GUI_DISABLE). $idListview = GUICtrlCreateListView("list 1|list 2|list 3", 200, 50, 390, 200) GUISetState(@SW_SHOW) While 1     Sleep(100) WEnd Thank you in advance.

    • By nooneclose
      I need to dynamically resize my 2d array while looping. 
      I know this code:
      ReDim $rArray[UBound($rArray) + 1] works for the rows, however, I also need to increase the columns. How would i go about increasing both rows and columns while looping? 
    • By nacerbaaziz
      hello sirs, please i created a tool witch get the focused control in a window and play a audio file linked with this controls
      e.g buttons, checkBoxes, radios, comboboxes, and others
      i know that their is a function that give us the control focus but it return the classNN
      i want to get the class name to use it with a switch and
      because their are more than class e.g button tbutton timagebutton tnewButton...
      please can any one help me to get the class name not the classnn
      thanks in advance
×
×
  • Create New...