Jump to content
Sign in to follow this  
Cleber Ferreira

como eu determino a gui q $GUI_EVENT_CLOSE deve fechar

Recommended Posts

digamos q eu tenha duas gui's uma dentro da outra, como faço pra quando clicar em fechar dentro da gui filha só ela fechar más se clicar na gui mãe as duas fechem ?

Edited by Cleber Ferreira

Share this post


Link to post
Share on other sites

Veja se ajuda

 

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
 
$pai = GuiCreate("janela principal", 300, 200)
$filho = GuiCreate("janela filho", 300, 200, 350, -1, -1, $WS_EX_MDICHILD, $pai)
 
GUISetState(@SW_SHOW, $pai)
GUISetState(@SW_SHOW, $filho)
 
While 1
$Msg = GUIGetMsg(1)
Select
Case $Msg[1] = $pai And $Msg[0] = -3
Exit
Case $Msg[1] = $filho And $Msg[0] = -3
GUIDelete($filho)
EndSelect
WEnd
 

Share this post


Link to post
Share on other sites
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $Button_01
$Form1 = GUICreate("janela principal", 300, 200)
$Form2 = GUICreate("janela filho", 300, 200, 350, -1, -1, $WS_EX_MDICHILD, $Form1)
GUISetState(@SW_SHOW, $Form1)
GUISetState(@SW_SHOW, $Form2)

While 1
	$nMsg = GUIGetMsg(1)
	Switch $nMsg[0]
		Case $GUI_EVENT_CLOSE
			Switch $nMsg[1]
				Case $Form1
					Exit
				Case $Form2
					GUISetState(@SW_HIDE, $Form2)
			EndSwitch
	EndSwitch
WEnd

Estou usando dessa forma, caso alguém precise da função deixo meu script como opção ao do joelson

Share this post


Link to post
Share on other sites

para a galera que for usar a janela novamente essa ultima maneira que @Cleber Ferreira postou é melhor que a minha, já que a minha deleta a GUI, ou seja interessante quando não for usar novamente a janela.

 

Obrigado pela contribuição @Cleber Ferreira

 

até mais.

Share this post


Link to post
Share on other sites

Aqui quando executo alguma ação na janela PAI o mesmo não está sendo aplicado na janela FILHO tipo se uso o @SW_SHOW ou @SW_HIDE só vale para janela PAI e também quando uso o WinMove() que só move a janela PAI, minha dúvida é se não deveria aplicar estas ações na outra janela por ela ser janela FILHO?

Edited by Belini

Share this post


Link to post
Share on other sites

Aqui quando executo alguma ação na janela PAI o mesmo não está sendo aplicado na janela FILHO tipo se uso o @SW_SHOW ou @SW_HIDE só vale para janela PAI e também quando uso o WinMove() que só move a janela PAI, minha dúvida é se não deveria aplicar estas ações na outra janela por ela ser janela FILHO?

 

Belini tem que aplicar na Janela filha Também, é só criar uma variável pra ela pra poder usar com qualquer função com WinMove() com você mencionou.

 

Explicando melhor a Janela Filha só recebe as funções indicadas pra elas, por isso tem que estar em uma Variável.

 

Exemplo:

#include <Misc.au3>

Global $pos_pai ; Variável que vai Pegar a Posição X Y e Tamanho de uma Janela.
Global $pos_filha , $andar
Global $hDLL = DllOpen("user32.dll") ; Abre a Dll Para Usar na Função _IsPressed.

Local $Gui_Pai = GUICreate(" Gui Pai", 300, 150, -1, -1) ; 1º Janela Pai.

GUICtrlCreateLabel("Setas Movem a Minha Filha" , 25, 50, 250, 45)
GUICtrlSetFont(-1, 15, 400, 1) ; Parâmetros da Fonte.

$pos_pai = WinGetPos($Gui_Pai)  ; Pega a Posição X Y e Tamanho Vertical e Horizontal da Janela (Essa Função é Para Posicionar a 2º Gui Próximo à 1ª).

GUISetState(@SW_SHOW, $Gui_Pai)    ; Mostra a 1º Janela Depois.

Local $Gui_Filha = GUICreate(" Gui Filha", 300, 150, $pos_pai[0], $pos_pai[3]+$pos_pai[1], -1, -1, $Gui_Pai) ; 2º Janela Filha.

$andar = GUICtrlCreateLabel("" , 35, 50, 250, 45)
GUICtrlSetFont(-1, 15, 400, 1) ; Parâmetros da Fonte.

Sleep(1000)

GUISetState(@SW_SHOW, $Gui_Filha)  ; Mostra a 2º Janela.

While Not _IsPressed("1B", $hDLL) ; Enquanto a Tecla Esc Não for Pressionada Mantem o Loop ==> Esc = Sair / Fechar.
    GUIGetMsg()
    GUICtrlSetData($andar, "Me Ensine a Andar Papai")
    $pos_filha = WinGetPos($Gui_Filha) ; Pega a Posição X Y e Tamanho Vertical e Horizontal da Janela.

    If _IsPressed("25", $hDLL) Then
	   GUICtrlSetData($andar, "    ESTOU  ANDANDO")
	   WinMove($Gui_Filha,"", $pos_filha[0]-5, Default, Default, Default,1)
    EndIf
	If _IsPressed("26", $hDLL) Then
	   GUICtrlSetData($andar, "    ESTOU  ANDANDO")
	   WinMove($Gui_Filha,"", Default, $pos_filha[1]-5 ,Default, Default,1)
    EndIf
	If _IsPressed("27", $hDLL) Then
	   GUICtrlSetData($andar, "    ESTOU  ANDANDO")
	   WinMove($Gui_Filha,"", $pos_filha[0]+5, Default, Default, Default,1)
    EndIf
	If _IsPressed("28", $hDLL) Then
	   GUICtrlSetData($andar, "    ESTOU  ANDANDO")
	   WinMove($Gui_Filha,"", Default, $pos_filha[1]+5 ,Default, Default,1)
    EndIf

WEnd

Exit(0)

:up: Coisa de Pai mesmo. rsrs

Edited by Fábio iGames

Share this post


Link to post
Share on other sites

Não é isto que eu quero! O que eu quero é que a janela filho fique parecendo que é parte da janela pai e tudo que tudo eu fizer na janela pai seja aplicado nela também ou seja é como se a janela filha fosse um controle PIC que no meu caso vou usar só prá esta finalidade aí ela vai ficar fixa num determinado lugar dentro da janela pai e obedecer aos comandos como se fizesse parte dela aí vc pergunta prá quê criar outra janela para mostrar uma imagem quando pode mostrar num PIC, é simples quando troco vídeos rapidamente dá bug's na gui que fazem piscar label's e listview que estão na gui e tendo outra só prá mostrar os vídeos este piscado passa desapercebido pois só vai piscar na janela filho e nela não tem nenhum outro controle além do PIC!

Edited by Belini

Share this post


Link to post
Share on other sites

kkkkkkkk é isso que quer, você não acredita, estou usando exatamente assim como falou desde do inicio que estamos conversando sobre a UDF WMP .

 

1ª Layout que fiz já ficou uma piscadeira danada mesmo usando $WS_EX_COMPOSITED, dai então já fui logo fazendo uma segunda Janela dentro da Gui principal só com o Player.

 

Pensei que vocês estavam fazendo assim por isso nem comentei.

 

Pra fazer isso que quer é simples tudo que colocar depois da 1ª GUICreate vai ser dela, mas depois que criar a 2ª GUICreate coloque somente o Player.

 

Eu tô usando assim:


#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <Misc.au3>
#include <IE.au3>

Janelas()
Func Janelas()

#Region ==> Essa GUICreate Ficam as Labels ListView e etc.
	$Gui = GUICreate(" FrontEnd iGames v.1.0", 1024, 768, -1, -1, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED)) ; Gui Principal
    GUISetBkColor(0xFAB100, $Gui)
    GUICtrlCreateLabel("Tecla Esc = Fechar / Sair", 10, 3, 330, 30)
    GUICtrlSetColor(-1, 0x000000)
    GUICtrlSetFont(-1, 18, 500, 1, "Arial Black")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
#EndRegion

#Region ==> Gui só Para o Player
    $Gui_Player = GUICreate(" WMPlayer", 640, 480, 380, 150, $WS_POPUP, BitOR($WS_EX_MDICHILD, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW), $Gui) ; Gui só para o Player.
	$oIE = _GUICtrl_CreateWMPlayer("about:blank", 0, 0, 640, 480)

    $playerOBJ = _IEGetObjById($oIE, "objWMPlayer")
    If NOT IsObj($playerOBJ) Then
	   MsgBox(0, "Erro", "WMPlayer não Conseguiu ser Criado.")
	   Exit(0)
    EndIf

    $FileOpen = @ScriptDir & "\video.mp4"

    If Not @error Then ;
	   _wmpvalue($playerOBJ, "nocontrols")
       _wmploadmedia($playerOBJ, $FileOpen)
     Else
       Exit(0)
    EndIf

	GUIRegisterMsg($WM_SIZE, "WM_SIZE")
#EndRegion

    GUISetState(@SW_SHOW, $Gui)
    GUISetState(@SW_SHOW, $Gui_Player)

EndFunc

Local $hDLL = DllOpen("user32.dll")
While Not _IsPressed("1B",$hDLL)
    GUIGetMsg()
WEnd

Exit(0)

Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
	#forceref $hWnd, $iMsg, $iwParam, $ilParam
	Local $xClient, $yClient
	$xClient = BitAND($ilParam, 0x0000FFFF)
	$yClient = BitShift($ilParam, 16)
	GUICtrlSetPos($IEControl, 0, 0, $xClient, $yClient)
	If Not @error Then
		If IsObj($playerOBJ) Then $playerOBJ.width  = $xClient;
		If IsObj($playerOBJ) Then $playerOBJ.height = $yClient;
	EndIf
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

;===============================================
;===============================================
#cs
	_wmploadmedia( $object, $URL )
	$object:    Object returned from the $playerOBJ = _IEGetObjById($oIE, "objWMPlayer")
	$URL:       Path or URL of the media
	Return: None
#ce
Func _wmploadmedia($object, $URL)
	$object.URL = $URL
	While Not $object.controls.isAvailable("play")
		Sleep(1)
	WEnd
	$object.controls.play()
EndFunc   ;==>_wmploadmedia

; Function: _GUICtrl_CreateWMPlayer
; Purpose: Embed Windows Media Player and play one file or one playlist only.
; Notes: PARAM NAME="url" is ReadOnly
; Authors: squirrely1
; borderless IE embed example: GaryFrost
; Kudos - Kare Johansson, CFire
; References:
; http://msdn2.microsoft.com/en-us/library/ms930698.aspx
; http://www.w3schools.com/media/media_playerref.asp
; clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6 - wmplayer latest installed version
; clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95 - wmp 6.4
;===============================================
;===============================================
Func _GUICtrl_CreateWMPlayer($movieURL, $playerLeft, $playerTop, $playerWidth, $playerHeight, _
		$insetBorders = 0, $fullscreenMode = False, $showControls = True, $enableContextMenu = True, _
		$LoopMode = False, $playCount = 1, $playVolume = 100, $playBalance = 0, $enableFullScreenControls = True)

	If $fullscreenMode Then
		$fullscreenMode = "true"
	Else
		$fullscreenMode = "false"
	EndIf
	If $showControls Then
		$showControls = "true"
	Else
		$showControls = "false"
	EndIf
	If $enableContextMenu Then
		$enableContextMenu = "true"
	Else
		$enableContextMenu = "false"
	EndIf
	If $LoopMode Then
		$playCount = 999
	EndIf
	If $enableFullScreenControls Then
		$enableFullScreenControls = "true"
	Else
		$enableFullScreenControls = "false"
	EndIf

	Local $myIE_Obj = _IECreateEmbedded()
	$IEControl = GUICtrlCreateObj($myIE_Obj, $playerLeft, $playerTop, $playerWidth, $playerHeight)
	_IENavigate($myIE_Obj, "about:blank")
	Local $htmlWMP
	$htmlWMP = '' _
			 & @CR & '<body style="margin:0;padding:0" >' _
			 & @CR & '<OBJECT' _
			 & @CR & 'ID="objWMPlayer"' _
			 & @CR & 'STYLE="margin:0;padding:0"' _
			 & @CR & 'HSPACE="0"' _
			 & @CR & 'VSPACE="0"' _
			 & @CR & 'BORDER="0"' _
			 & @CR & 'WIDTH="' & $playerWidth & '"' _
			 & @CR & 'HEIGHT="' & $playerHeight & '"' _
			 & @CR & 'CLASSID="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6"' _
			 & @CR & 'STANDBY="Loading Windows Media Player components..."' _
			 & @CR & 'TYPE="application/x-ms-wmp">' _
			 & @CR & '<PARAM NAME="allowHideControls" VALUE="true">' _
			 & @CR & '<PARAM NAME="autoStart" VALUE="false">' _
			 & @CR & '<PARAM NAME="audioStream" VALUE="false">' _
			 & @CR & '<PARAM NAME="autoSize" VALUE="false">' _
			 & @CR & '<PARAM NAME="balance" VALUE="' & $playBalance & '"><!-- -100 to 100 -->' _
			 & @CR & '<!-- <PARAM NAME="bufferingTime" VALUE="5"><!-- seconds -->' _
			 & @CR & '<PARAM NAME="clickToPlay" VALUE="false"><!-- has no effect -->' _
			 & @CR & '<PARAM NAME="currentPosition" VALUE="0"><!-- start position within video, in seconds -->' _
			 & @CR & '<PARAM NAME="enableContextMenu" VALUE="' & $enableContextMenu & '">' _
			 & @CR & '<PARAM NAME="enableFullScreenControls" VALUE="' & $enableFullScreenControls & '">' _
			 & @CR & '<PARAM NAME="enabled" VALUE="true"><!-- whether controls are enabled -->' _
			 & @CR & '<PARAM NAME="fullScreen" VALUE="' & $fullscreenMode & '">' _
			 & @CR & '<PARAM NAME="mute" VALUE="false">' _
			 & @CR & '<PARAM NAME="playCount" VALUE="' & $playCount & '">' _
			 & @CR & '<!-- <PARAM NAME="previewMode" VALUE="true"> -->' _
			 & @CR & '<PARAM NAME="rate" VALUE="1"><!-- play speed of -.5 to 2 increments of .1 -->' _
			 & @CR & '<PARAM NAME="sendPlayStateChangeEvents" VALUE="false">' _
			 & @CR & '<PARAM NAME="showCaptioning" VALUE="false">' _
			 & @CR & '<PARAM NAME="showControls" VALUE="' & $showControls & '">' _
			 & @CR & '<PARAM NAME="showGotoBar" VALUE="false">' _
			 & @CR & '<PARAM NAME="showPositionControls" VALUE="true"><!-- uiMode must = "full" -->' _
			 & @CR & '<PARAM NAME="showStatusBar" VALUE="false"><!-- has no effect -->' _
			 & @CR & '<PARAM NAME="showDisplay" VALUE="true"><!-- has no effect - reportedly shows filename -->' _
			 & @CR & '<PARAM NAME="stretchToFit" VALUE="true">' _
			 & @CR & '<PARAM NAME="uiMode" VALUE="full"><!-- invisible, none, mini, full -->' _
			 & @CR & '<!-- <PARAM NAME="videoBorderWidth" VALUE="0"> -->' _
			 & @CR & '<PARAM NAME="volume" VALUE="' & $playVolume & '"><!-- volume percent setting of wmplayer.exe -->' _
			 & @CR & '<PARAM NAME="windowlessVideo" VALUE="false"><!-- must be the default (false) for function to work in wmp 9.0, otherwise might renders video directly in the client area -->' _
			 & @CR & '</OBJECT>' _
			 & @CR & '</body>'
	_IEDocWriteHTML($myIE_Obj, $htmlWMP)
	_IEAction($myIE_Obj, "refresh")
	$myIE_Obj.document.body.scroll = "no"
	$myIE_Obj.document.body.style.border = $insetBorders
	Return $myIE_Obj
EndFunc   ;==>_GUICtrl_CreateWMPlayer

Func _wmpvalue($object, $setting, $para = 1)
	Switch $setting
		Case "play"
			If $object.controls.isAvailable("play") Then $object.controls.play()
		Case "stop"
			If $object.controls.isAvailable("stop") Then $object.controls.stop()
		Case "pause"
			If $object.controls.isAvailable("pause") Then $object.controls.pause()
		Case "invisible"
			$object.uiMode = "invisible"
		Case "controls"
			$object.uiMode = "full"
		Case "nocontrols"
			$object.uiMode = "none"
		Case "fullscreen"
			$object.fullscreen = "True"
		Case "step"
			If $object.controls.isAvailable("step") Then $object.controls.step($para)
		Case "fastForward"
			If $object.controls.isAvailable("fastForward") Then $object.controls.fastForward()
		Case "fastReverse"
			If $object.controls.isAvailable("fastReverse") Then $object.controls.fastReverse()
		Case "volume"
			$object.settings.volume = $para
		Case "rate"
			$object.settings.rate = $para
		Case "playcount"
			$object.settings.playCount = $para
		Case "setposition"
			$object.controls.currentPosition = $para
		Case "getposition"
			Return $object.controls.currentPosition
		Case "getpositionstring"
			Return $object.controls.currentPositionString
		Case "getduration"
			Return $object.currentMedia.duration
		Case "getname"
			Return $object.currentMedia.name
	EndSwitch
EndFunc   ;==>_wmpvalue

Fiz isso e Bye bye piscadeira, é isso que quer? ;)

Edited by Fábio iGames

Share this post


Link to post
Share on other sites

@Fabio iGames vc ainda não entendeu, isto aí é fácil fazer mas o que eu quero mesmo é que a segunda gui pareça ser parte da primeira ou seja se eu minimizar ou ocultar a primeira a segunda também seja minimizada ou ocultada como expliquei ela se´ria usada apenas como um PIC dentro da primeira janela.

 

Exemplo de quando oculto a primeira e a segunda continua visível:

#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <Misc.au3>
#include <IE.au3>

Global $Gui, $Gui_Player

Janelas()

Sleep(2000)
GUISetState(@SW_HIDE, $Gui)
Sleep(2000)
GUISetState(@SW_SHOW, $Gui)
Sleep(1000)
Exit

Func Janelas()

	#region ==> Essa GUICreate Ficam as Labels ListView e etc.
	$Gui = GUICreate(" FrontEnd iGames v.1.0", 1024, 768, -1, -1, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED)) ; Gui Principal
	GUISetBkColor(0xFAB100, $Gui)
	GUICtrlCreateLabel("Tecla Esc = Fechar / Sair", 10, 3, 330, 30)
	GUICtrlSetColor(-1, 0x000000)
	GUICtrlSetFont(-1, 18, 500, 1, "Arial Black")
	GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
	#endregion ==> Essa GUICreate Ficam as Labels ListView e etc.

	#region ==> Gui só Para o Player
	$Gui_Player = GUICreate(" WMPlayer", 640, 480, 380, 150, $WS_POPUP, BitOR($WS_EX_MDICHILD, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW), $Gui) ; Gui só para o Player.
	GUISetBkColor(0x000000, $Gui)

	GUISetState(@SW_SHOW, $Gui)
	GUISetState(@SW_SHOW, $Gui_Player)

EndFunc   ;==>Janelas
Edited by Belini

Share this post


Link to post
Share on other sites

 

@Fabio iGames vc ainda não entendeu, isto aí é fácil fazer mas o que eu quero mesmo é que a segunda gui pareça ser parte da primeira ou seja se eu minimizar ou ocultar a primeira a segunda também seja minimizada ou ocultada como expliquei ela seria usada apenas como um PIC dentro da primeira janela.

 

@Belini Try Again

 

Usando $WS_EX_MDICHILD a 2ª, 3ª ou quantas Janelas Criar como Filhas já Minimiza e Move de Acordo com a Janela Pai.
Agora Para Quando Ocultar o Pai, retirei do Exemplo de uma Função que o JScript passou pra você no Tópico: Saber quando a GUI está oculta. http://forum.autoitbrasil.com/index.php?/topic/1543-saber-quando-a-gui-esta-oculta/
Vamos ver se agora vai. :lol:
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.14.2
Author: Fábio iGames

Script Function:

    Exemplo Ocultando a Gui Pai e os Filha(o) Ocultam Junto:

Notas: Usando $WS_EX_MDICHILD a 2ª, 3ª ou quantas Janelas Criar como Filhas já
       Minimiza e Move de Acordo com a Janela Pai.

	   Agora Para Quando Ocultar o Pai, Retirei do Exemplo de uma Função que o JScript

	   Passou pra você Belini nesse Tópico: ==> Saber quando a GUI está oculta.

http://forum.autoitbrasil.com/index.php?/topic/1543-saber-quando-a-gui-esta-oculta/

By: JScript

$iEstadoGUI = WinGetState("NOME_DA_JANELA_QUE_VOCÊ_PROCURA_SABER_O_ESTADO", "")

MsgBox(0, "Estado da GUI oculta.", $iEstadoGUI & @CRLF & _AvaliarEstado($iEstadoGUI))

Func _AvaliarEstado($iEstado)
    $sRetorno = ""
    If BitAND($iEstado, 2) = 2 Then
        $sRetorno &= "Janela está visível"
    Else
        $sRetorno &= "Janela está oculta"
    EndIf
    Return $sRetorno
EndFunc

;================================================================================

Função WinGetState : Recupera o estado de uma determinada janela.

Um valor que indica o estado da janela.
Vários valores são somados então use BITAND() para examinar a parte que você está interessado:

Valores de Retorno:

$WIN_STATE_EXISTS (1)  = Window exists
$WIN_STATE_VISIBLE (2) = Window is visible
$WIN_STATE_ENABLED (4) = Window is enabled
$WIN_STATE_ACTIVE (8)  = Window is active
$WIN_STATE_MINIMIZED (16) = Window is minimized
$WIN_STATE_MAXIMIZED (32) = Window is maximized
;================================================================================

    OBSERVAÇÃO:
A Janela Filha já Fica na Posição X e Y do Pai Colocando -1 para a Posição X e Y Dela.

Exemplo: $Gui_Filha = GUICreate(" Gui Filha", 100, 50, 250, 100,  $WS_POPUP, $WS_EX_MDICHILD, $Gui_Pai) ; Janela Filha.

Se Colocar 250 Para X e 100 Para Y ela Ficará 250 à mais que o Pai na Posição X ,
e 100 à mais que o Pai na Posição Y.

#ce ----------------------------------------------------------------------------

#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <Misc.au3>

Global $pos_pai ; Variável que vai Pegar a Posição X Y e Tamanho de uma Janela.
Global $Gui_Pai, $Gui_Filho, $Gui_Filha
Global $hDLL = DllOpen("user32.dll") ; Abre a Dll Para Usar na Função _IsPressed.
Global $Oculta = False ; Variável Auxiliar Para Não Ficar Setando no If mais Abaixo da Função Ver_Papai().

Pai_Filhos()

While 1
	Switch GUIGetMsg()
	   Case $GUI_EVENT_CLOSE
	      Exit(0)
    EndSwitch

    Ver_Papai() ; Essa Função Fica Checando o Estado da Gui Pai.

	$pos_Pai = WinGetPos($Gui_Pai) ; Pega a Posição X Y e Tamanho Vertical e Horizontal da Janela Pai.

    If _IsPressed("25", $hDLL) Then WinMove($Gui_Pai,"", $pos_Pai[0]-5, Default, Default, Default,1) ; Seta Para Esquerda Move a Gui_Pai Para Esquerda.

	If _IsPressed("26", $hDLL) Then WinMove($Gui_Pai,"", Default, $pos_Pai[1]-5 ,Default, Default,1) ; Seta Para Cima Move a Gui_Pai Para Cima.

	If _IsPressed("27", $hDLL) Then WinMove($Gui_Pai,"", $pos_Pai[0]+5, Default, Default, Default,1) ; Seta Para Direita Move a Gui_Pai Para Direita.

	If _IsPressed("28", $hDLL) Then WinMove($Gui_Pai,"", Default, $pos_Pai[1]+5 ,Default, Default,1) ; Seta Para Baixo Move a Gui_Pai Para Baixo.

    If _IsPressed("4F", $hDLL) Then  GUISetState(@SW_HIDE, $Gui_Pai)   ; Tecla M = Mostra a 1º Janela Pai.

	If _IsPressed("4D", $hDLL) Then  GUISetState(@SW_SHOW, $Gui_Pai)   ; Tecla O = Oculta a 1º Janela Pai.

WEnd

Func Ver_Papai()
    Local $iEstadoGUI = WinGetState(" Gui Pai", "") ; Vai Verificar o Estado da Janela Pai.

    ; Se For usar  @SW_SHOW o Valor é 15
	; Se For usar @SW_SHOWNOACTIVATE o Valor é 7 ... e Asimm Por Diante, vai Depender do que Colocar no  GUISetState()

	If $iEstadoGUI == 15 Then
;~ 	   MsgBox(0x40000, "Estado da GUI oculta.", $iEstadoGUI ,1)
	   GUISetState(@SW_SHOW, $Gui_Filho)  ; Mostra a 2º Janela Filho.
       GUISetState(@SW_SHOW, $Gui_Filha)  ; Mostra a 2º Janela Filha.
	   $Oculta = False
    EndIf
	If $iEstadoGUI == 5 And Not $Oculta Then
;~ 	   MsgBox(0x40000, "Estado da GUI oculta.", $iEstadoGUI, 1)
	   GUISetState(@SW_HIDE, $Gui_Filho)  ; Oculta a 2º Janela Filho.
       GUISetState(@SW_HIDE, $Gui_Filha)  ; Oculta a 2º Janela Filha.
	   $Oculta = True
    EndIf

EndFunc

Func Pai_Filhos()
    $Gui_Pai = GUICreate(" Gui Pai", 200, 100, -1, 240, -1, $WS_EX_TOPMOST) ; 1º Janela Pai.
    GUISetBkColor(0xFAB100, $Gui_Pai)
    GUICtrlCreateLabel("Pai", 80, 0, 330, 30)
    GUICtrlSetColor(-1, 0x00000)
    GUICtrlSetFont(-1, 15, 500, 1, "Arial")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("M       = Mostrar", 15, 25, 330, 30)
    GUICtrlSetColor(-1, 0x00000)
    GUICtrlSetFont(-1, 15, 500, 1, "Arial")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("O       = Ocultar", 15, 50, 330, 30)
    GUICtrlSetColor(-1, 0x00000)
    GUICtrlSetFont(-1, 15, 500, 1, "Arial")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("Setas = Mover", 15, 75, 330, 30)
    GUICtrlSetColor(-1, 0x00000)
    GUICtrlSetFont(-1, 15, 500, 1, "Arial")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

    $Gui_Filho = GUICreate(" Gui Filho", 100, 50, 250, -50,  $WS_POPUP, $WS_EX_MDICHILD, $Gui_Pai) ; 2º Janela Filho.
    GUISetBkColor(0xF1ABCDE, $Gui_Filho)
    GUICtrlCreateLabel("Filho", 26, 15, 285, 30)
    GUICtrlSetColor(-1, 0x00000)
    GUICtrlSetFont(-1, 14, 500, 1, "Arial")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

    $Gui_Filha = GUICreate(" Gui Filha", 100, 50, 250, 100,  $WS_POPUP, $WS_EX_MDICHILD, $Gui_Pai) ; 3º Janela Filha.
    GUISetBkColor(0xFFABCDE, $Gui_Filha)
    GUICtrlCreateLabel("Filha", 26, 15, 285, 30)
    GUICtrlSetColor(-1, 0x00000)
    GUICtrlSetFont(-1, 14, 500, 1, "Arial")
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

    GUISetState(@SW_SHOW, $Gui_Pai)    ; Mostra a 1º Janela.
;~     GUISetState(@SW_SHOW, $Gui_Filho)  ; Mostra a 2º Janela.
;~     GUISetState(@SW_SHOW, $Gui_Filha)  ; Mostra a 2º Janela.
EndFunc

Se não resolver só mesmo uma UDF que gerencia tudo da Janela Pai. :P

Edited by Fábio iGames
  • Like 2

Share this post


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

Sign in to follow this  

×