PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 25 → WX - Existe uma maneira de saber se alguma janela está aberta e Existe uma maneira de limitar uma janela a 1 instância?
WX - Existe uma maneira de saber se alguma janela está aberta e Existe uma maneira de limitar uma janela a 1 instância?
Iniciado por BOLLER, 19,feb. 2018 19:01 - No hay respuesta
Miembro registrado
3.651 mensajes
Popularité : +175 (223 votes)
Publicado el 19,febrero 2018 - 19:01
//Aqui está um procedimento que escrevi para alterar os controles em uma janela.
//Ele usa Indirection e ENumControl. Se você tiver o tempo passar por isso e ver o que faz. Realmente valerá a pena.

Procedure ChangeTheme(pWindow)

ct is int
sControl is string

//Assume a maximum of 500 controls per window
WHILE ct < 500
ct++
IF EnumControl(pWindow, ct) = "" THEN BREAK
//info(Upper(Left(EnumControl({pWindow, indControl}, ct), 3)))
//Change the window color
//{pWindow, indControl}..brushColor = strgeneralrec.WindowsColour
{pWindow, indControl}..BrushColor = gsWindowColor

//Change the statics, combo box and radio buttons colors
IF Upper(Left(EnumControl({pWindow, indControl}, ct), 3)) = "STC" OR Upper(Left(EnumControl({pWindow, indControl}, ct), 3)) = "CBO" OR Upper(Left(EnumControl({pWindow, indControl}, ct), 3)) = "RAD" THEN
sControl = EnumControl({pWindow, indControl}, ct)
{sControl, indControl}..Color = gsStaticColor
END

//Change the edit control text and background colors
IF Upper(Left(EnumControl({pWindow}, ct), 3)) = "EDT" THEN
sControl = EnumControl({pWindow}, ct)
//info(strGeneralRec.EntryColour)
{sControl}..Color = gsEntryTextColor
//info({sControl, indControl}..Color)
{sControl}..BrushColor = gsEntryBackgroundColor
END

//Change the button control colors
IF Upper(Left(EnumControl({pWindow, indControl}, ct), 3)) = "BTN" THEN
sControl = EnumControl({pWindow, indControl}, ct)
{sControl, indControl}..Color = gsButtonColor
END
END




nNumWinsOpen is int

WHEN EXCEPTION IN
IF Handle(WIN_Browse_Tracks)>0 THEN
nNumWinsOpen++
END
DO
END



nNumWinsOpen is int
sWinStatus is int
sWinStatus = WinStatus(Win_Browse_Tracks)
IF sWinStatus = 0 /// zero is apparently the code for active
nNumWinsOpen++
Trace("nNumWinsOpen")
END



WindowCount ()


1a. Se você quiser apenas verificar se uma janela conhecida está aberta, você pode usar a função WinStatus (windowname) que retorna o status da janela (não se encontra aberto, invisível se aberto, mas não visível, fora de tela, ativo, exibido apenas e assim por diante )

1b. Se você quiser conhecer as janelas disponíveis no seu projeto, você pode fazer uma lista de toda a janela usando a função EnumElement (enumwindow) e, em seguida, verifique o status de cada janela como em 1a.

2. Se você usa Abrir (janela ...), a janela aberta é modal e nenhuma outra janela (exceto outras janelas modal) pode ser aberta (ok, isso é trivial). Não sei se existe um parâmetro que limita as instâncias da janela a 1, mas é muito fácil criar uma classe ou procedimento que gerencie a abertura e o fechamento da janela, limitando, portanto, o instanciamento múltiplo da mesma janela.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/