Jump to content



Photo

pop-up window from a button


  • Please log in to reply
14 replies to this topic

#1 sandin

sandin

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 569 posts

Posted 31 October 2008 - 02:00 AM

If you want your GUI to be small and pretty, and you don't want to make it too "crowded" with controls, simply make one button that will enable a pop-up window with the controls.
AutoIt         
#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #Include <WinAPI.au3> Global Const $WM_ENTERSIZEMOVE = 0x0231 Global Const $WM_EXITSIZEMOVE = 0x0232 $main_height = 300 ;height of the pop-up window $slide_speed = 500 ;window pop-up/down speed, bigger number = slower, smaller number = faster $Gui = GUICreate("Test", 370, 200) ;main GUI $checkbox = GUICtrlCreateCheckbox("Disable main window when child is open", 5, 5, 250) GUICtrlSetState(-1, $GUI_CHECKED) $button1 = GUICtrlCreateButton("Child_1", 5, 160, 100, 30) $button2 = GUICtrlCreateButton("Child_2", 110, 30, 250, 20) $bb = GUICtrlCreateTab(130, 80, 200, 100) $lol = GUICtrlCreateTabItem("Random control") WinSetTrans($Gui, "", 255) ;if it's not set to 255, then sliding out has visual bugs GUISetState(@SW_SHOW, $Gui) $ParentPosArr = WinGetPos($Gui) $ChildGui = GuiCreate("Child test", 100, $main_height, $ParentPosArr[0]+$ParentPosArr[2], $ParentPosArr[1]+5,$WS_POPUP, $WS_EX_MDICHILD, $Gui) $childpos = WinGetPos($ChildGui) $label1 = GUICtrlCreateButton("Test button 1", $childpos[2]/2-45, 5, 90) GUICtrlSetResizing (-1, $GUI_DOCKWIDTH+$GUI_DOCKHCENTER) ;button will be in center, and will not change width in case of window increasement (like when u press button2) $label2 = GUICtrlCreateButton("Close", $childpos[2]/2-45, 270, 90) GUICtrlSetResizing (-1, $GUI_DOCKWIDTH+$GUI_DOCKHCENTER) $label3 = GUICtrlCreateInput("Test", $childpos[2]/2-45, 80, 90)     GUICtrlCreateGraphic(0, 0, $childpos[2], $childpos[3], 0x07) ;gray line on the edge of the pop up window GUISetState(@SW_HIDE, $ChildGui) $child2 = GuiCreate("Child test", 100, $main_height, $ParentPosArr[0]+$ParentPosArr[2], $ParentPosArr[1]+5,$WS_POPUP, $WS_EX_MDICHILD, $Gui) ;transparent window to lock main window when child is opened GUISetBkColor(0, $child2) WinSetTrans($child2, "", 100) GUISetState(@SW_HIDE, $child2) GUIRegisterMsg($WM_ENTERSIZEMOVE,"WM_ENTERSIZEMOVE") GUIRegisterMsg($WM_EXITSIZEMOVE, "WM_EXITSIZEMOVE") Func WM_ENTERSIZEMOVE($hWndGUI, $MsgID, $WParam, $LParam)     WinSetTrans($ChildGui,"",254) EndFunc Func WM_EXITSIZEMOVE($hWndGUI, $MsgID, $WParam, $LParam)     WinSetTrans($ChildGui,"",255) EndFunc While 1     $msg = GUIGetMsg()     Switch $msg         Case $GUI_EVENT_CLOSE             Exit         Case $button1             _show_child_window($button1, $slide_speed) ;slide in pop-up window ($button1 = button's handle)         Case $button2             _show_child_window($button2, $slide_speed)         case $label2             _slide_out($ChildGui, $slide_speed)     EndSwitch WEnd Func _show_child_window($button_handle, $Speed)     if WinExists($ChildGui) then         _slide_out($ChildGui, $Speed/2) ;2x faster if switching between button pop-ups     endif         _slide_in($ChildGui, $Speed, $button_handle) EndFunc func _slide_in($hwGui, $Speed, $hwCtrl)     Local $position = ControlGetPos($Gui, "", $hwCtrl)     Local $position2 = WinGetPos($Gui)     Local $position2b = WinGetClientSize($Gui)     Local $position3 = WinGetPos($hwGui)     Local $light_border = ($position2[2]-$position2b[0])/2     Local $thick_border = ($position2[3]-$position2b[1])-$light_border         WinMove($hwGui, "", $position2[0]+$position[0]+$light_border, $position2[1]+$position[1]+$position[3]+$thick_border, $position[2]);set the window exacly below button     DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwGui, "int", $Speed, "long", 0x00040004)     _WinAPI_RedrawWindow($hwGui)     GUISetState(@SW_SHOW, $hwGui)         if GUICtrlRead($checkbox) = $GUI_CHECKED Then         WinMove($child2, "", $position2[0]+$light_border, $position2[1]+$thick_border, $position2b[0], $position2b[1])         WinSetTrans($child2, "", 0)         GUISetState(@SW_DISABLE, $child2)         GUISetState(@SW_SHOWNOACTIVATE, $child2)         for $i = 1 to 100 Step 10 ;showing "lock window" in smooth transparency             WinSetTrans($child2, "", $i)             Sleep(1)         Next     EndIf EndFunc func _slide_out($hwGui, $Speed)     if WinExists($child2) Then         for $i = 100 to 1 Step -10             WinSetTrans($child2, "", $i)             Sleep(1)         Next         GUISetState(@SW_HIDE, $child2)     EndIf     DllCall("user32.dll", "int", "AnimateWindow", "hwnd", $hwGui, "int", $Speed, "long", 0x00050008)     GUISetState(@SW_HIDE, $hwGui) EndFunc


edit: Made smoother "shadow" window appear/disappear

edit2: Fixed "flash" of the child window bug

Edited by sandin, 06 December 2008 - 08:55 PM.






#2 sandin

sandin

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 569 posts

Posted 31 October 2008 - 02:12 AM

I can only say: This is the BEST an GUI of AutoIt, Congratulations to you :mellow:

thank you =D

#3 sandin

sandin

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 569 posts

Posted 31 October 2008 - 02:19 AM

The value of $slide_speed is better: 250

$slide_speed = 250 ;window pop-up/down speed, bigger number = slower, smaller number = faster

it's individual thingy, some people love when it's smoother, and some when it's faster =) In my case, I prefer 500 =)

#4 gseller

gseller

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 1,057 posts

Posted 31 October 2008 - 05:31 AM

Totally Awesome!! Thanks for sharing! :mellow:

#5 UltraFine

UltraFine

    Adventurer

  • Banned (NOT IN USE)
  • 146 posts

Posted 31 October 2008 - 11:46 AM

Really owesome!

Thanks for sharing this code, it's style is like Norton Antivirus's GUI and i think i can use it to create similar GUI's.

#6 sandin

sandin

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 569 posts

Posted 31 October 2008 - 11:57 AM

Totally Awesome!! Thanks for sharing! :mellow:

thank you =)

Really owesome!

Thanks for sharing this code, it's style is like Norton Antivirus's GUI and i think i can use it to create similar GUI's.

thank you =)
(I never used Norton AV, but I had problem with my GUI space, so I needed something like this, that's why I made it)

#7 BrettF

BrettF

    My Drunk Monkey Guerilla is gonna getcha!

  • MVPs
  • 7,662 posts

Posted 31 October 2008 - 12:00 PM

Very nice! Great job!

#8 sandin

sandin

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 569 posts

Posted 31 October 2008 - 02:44 PM

Very nice! Great job!

tnx =D

#9 Calistoga

Calistoga

    Seeker

  • Active Members
  • 48 posts

Posted 31 October 2008 - 03:53 PM

This is some serious awesome work!

#10 sandin

sandin

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 569 posts

Posted 31 October 2008 - 04:04 PM

This is some serious awesome work!

tnx =)
btw, fixed some flash bug (which occurred when u click anywhere in child window)

#11 FaT3oYCG

FaT3oYCG

    Adventurer

  • Active Members
  • PipPip
  • 138 posts

Posted 31 October 2008 - 04:18 PM

WOW!

This is great, I made a gui with a similar effect a while ago but it wasn't as smooth or beatiful as this one. Thanks for sharing it.
Interpreters have great power!Although they live in the shadow of compiled programming languages an interpreter can do anything that a compiled language can do, you just have to code it right.

#12 sandin

sandin

    Universalist

  • Active Members
  • PipPipPipPipPipPip
  • 569 posts

Posted 31 October 2008 - 04:31 PM

WOW!

This is great, I made a gui with a similar effect a while ago but it wasn't as smooth or beatiful as this one. Thanks for sharing it.

ty for the kind words =)

#13 BJJ

BJJ

    Adventurer

  • Active Members
  • PipPip
  • 107 posts

Posted 06 February 2009 - 03:48 PM

Awesome work!!

#14 yehia

yehia

    Universalist

  • Active Members
  • PipPipPipPipPip
  • 274 posts

Posted 06 February 2009 - 10:26 PM

yeah totally nice
i will use this :)

#15 Rishav

Rishav

    Polymath

  • Active Members
  • PipPipPipPip
  • 201 posts

Posted 01 September 2009 - 10:44 AM

Fantabulous!
But I have a question. Can we make the GUI of a different size slide out of the button?
for eg. my button has width 100 and the gui that i want to slide out has dimensions 400*500.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users