Ei, Equipe de Scripts!Flores florescendo. Caixas de diálogo aparecendo. A primavera chegou.

A Equipe de Scripts da Microsoft

Ah, a primavera chegou. Ficamos muito felizes. Depois de um inverno com recorde de chuvas e tempestades de gelo, de neve e de vento (uma das quais espatifou uma árvore enorme contra um dos pátios da Equipe de Scripts, passando a centímetros da casa e fazendo nosso cachorro se esconder atrás da poltrona), a primavera finalmente chegou. Estamos até gostando dessa chuvinha fraca que antecede a chuva mais quente do Noroeste Pacífico que se instala para o verão.

Enquanto observamos a garoa lá fora, pensamos que esta é uma boa hora para nos aventurarmos um pouco com nossos scripts e examinarmos os Aplicativos HTML (HTAs). E quando falamos aventura, é exatamente isso que queremos dizer. Não vamos fazer nenhum tipo de introdução neste artigo. Supomos que você já sabe o que é um HTA e como criar um. Se não souber, consulte o Centro de Desenvolvedores de HTAs no Script Center. Especificamente, convém ler os dois artigos na seção HTAs para Iniciantes. Isso feito, você estará pronto para voltar aqui.

Nesta coluna, vamos mostrar como criar caixas de diálogo e como passar informações entre o HTA principal e a caixa de diálogo. É, o ar fresco da primavera realmente despertou nossas ambições, não foi? Aproveite enquanto dura.

Como você deve saber, existem dois tipos de caixas de diálogo: restrita e sem janela restrita. A diferença é que uma caixa de diálogo restrita, enquanto estiver aberta, impede que você retorne à janela principal. Quando você abre uma caixa de diálogo sem janela restrita, pode se movimentar entre as janelas. No entanto, se você fechar a janela principal, sua caixa de diálogo sem janela restrita também será fechada.

A criação de caixas de diálogo restritas e sem janela restrita funciona exatamente da mesma forma. A única diferença é que, para criar uma caixa de diálogo restrita, você chama a função ShowModalDialog e, para criar uma caixa de diálogo sem janela restrita, você chama a função ShowModelessDialog. Ambas aceitam os mesmos parâmetros. Vamos começar examinando um HTA simples que abre uma caixa de diálogo restrita (consulte Figura 1).

Figure 1 Caixa de diálogo simples inicial

<html> 
<head> 
<title>Modal Example</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”MainModal”>
</head>

<script language=”VBScript”> 
Sub ShowDialog 
 intReturn = _
    ShowModalDialog(“modaldialog.hta”) 
 textbox.Value = intReturn
End Sub
</script> 

<body> 
<button onclick=”ShowDialog”>
 Show Dialog Box</button> <p>
<input type=”text” name=”textbox”>
</body> 
</html>

Aqui criamos um HTA intitulado Exemplo de Restrita. Na área <corpo> do nosso HTA, acrescentamos dois elementos: um botão rotulado Mostrar Caixa de Diálogo e uma caixa de texto chamada textbox. Ambos podem ser vistos na Figura 2. Quando você clica no botão, a sub-rotina ShowDialog é executada.

Figura 2 Caixa de diálogo restrita de HTA real

Figura 2** Caixa de diálogo restrita de HTA real **

A sub-rotina ShowDialog é muito simples. Chamamos a função ShowModalDialog, passando como um parâmetro o nome do arquivo HTA que queremos exibir como caixa de diálogo restrita; neste caso, modaldialog.hta. (Estamos supondo que modaldialog.hta está na mesma pasta que esse HTA. Caso não esteja, você deverá incluir o caminho de arquivo inteiro aqui.)

Também capturamos um valor de retorno (intReturn) de ShowModalDialog e o exibimos na caixa de texto. Você verá daqui a pouco como esse valor foi obtido. Uma observação importante é que a chamada para ShowModalDialog só retornará quando a caixa de diálogo restrita for fechada. Isso significa que o valor de retorno não será atribuído à caixa de texto enquanto a caixa de diálogo estiver aberta.

Agora vamos examinar modaldialog.hta, que é a caixa de diálogo aberta pelo HTA que fez a chamada (consulte a Figure 3). Nesse HTA, criamos dois elementos: uma caixa de listagem chamada listbox e um botão rotulado OK, como mostra a Figura 4. Adicionamos quatro itens à caixa de listagem rotulados Opção 1, Opção 2, etc. e atribuímos valores correspondentes (de 1 a 4) a cada um desses itens. Quando se clica no botão OK, a sub-rotina CloseWindow é executada.

Figure 3 modaldialog.hta

<html> 
<head> 
<title>Modal Dialog Box</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”ModalDialog”>
</head>

<script language=”VBScript”> 
Sub CloseWindow
  window.returnValue = listbox.Value
  window.Close 
End Sub
</script> 

<body> 
<select size=”3” name=”listbox”>
 <option value=”1”>Option 1</option>
 <option value=”2”>Option 2</option>
 <option value=”3”>Option 3</option>
 <option value=”4”>Option 4</option>
</select>
<p>
<input type=”button” id=”idBtn” value=”OK” onclick=”CloseWindow”> 
</body> 
</html>

Figura 4 HTA que representa a caixa de diálogo restrita

Figura 4** HTA que representa a caixa de diálogo restrita **

A sub-rotina CloseWindow é muito simples. Nossa primeira tarefa é ler o valor do item na caixa de listagem que foi selecionada e atribuí-lo à propriedade window.returnValue. Por exemplo, se o usuário escolher Opção 2, o valor 2 será atribuído a window.returnValue. Em seguida, chamamos o método window.Close para fechar a caixa de diálogo.

Neste momento, o controle retorna para o HTA principal. Lembre-se da nossa chamada para ShowModalDialog:

intReturn = _
  ShowModalDialog(“modaldialog.hta”) 

O valor de retorno atribuído a intReturn é o valor que atribuímos a window.returnValue no HTA da nossa caixa de diálogo. Por isso, se escolhermos Opção 2 na caixa de diálogo, que atribui o valor 2 a window.returnValue, intReturn será igual a 2 e a linha de código a seguir exibirá este valor na caixa de texto:

textbox.Value = intReturn

Agora que vimos como obter um valor de uma caixa de diálogo, vejamos como obtivemos um valor para uma caixa de diálogo. Desta vez, usaremos uma caixa de diálogo sem janela restrita (consulte a Figura 5), mas lembre-se que o processo será igual ao de uma caixa de diálogo restrita, já que ambas funcionam da mesma forma.

Figure 5 Transformando em sem janela restrita

<html>
<head>
<title>Modeless Example</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”ModelessMain”>
</head>

<script language=”VBScript”>
Sub ShowDialog
  intReturn = _
    window.ShowModelessDialog _
    (“modelessdialog.hta”, _
    lstServers.Value, _
    “dialogHeight:400px;dialogWidth:300px”)
End Sub
</script>

<body>
<select size=”1” name=”lstServers”>
 <option value=”server1”>Server1</option>
 <option value=”server2”>Server2</option>
 <option value=”server3”>Server3</option>
 <option value=”server4”>Server4</option>
</select>
<p>
<input type=”button” value=”Retrieve Processes” onclick=”ShowDialog”>
</body>
</html>

Figura 7 Dados passados para caixa de diálogo sem janela restrita

Figura 7** Dados passados para caixa de diálogo sem janela restrita **

Desta vez, criamos uma caixa de listagem suspensa chamada lstServers (você sabe que é suspensa porque o tamanho é igual a 1). Há também um botão rotulado Recuperar Processos. Quando se clica no botão, a sub-rotina ShowDialog é executada. Essa sub-rotina tem apenas uma linha, que é a chamada para a função window.ShowModelessDialog, como mostrado aqui:

intReturn = _
  window.ShowModelessDialog _
  (“modelessdialog.hta”, _
  lstServers.Value, _
  “dialogHeight:400px;dialogWidth:300px”)

O primeiro parâmetro que passamos para essa função é o nome do arquivo HTA que queremos executar na caixa de diálogo restrita; neste caso, modelessdialog.hta. O segundo parâmetro é a propriedade Value da nossa caixa de listagem. Lembre-se de que a propriedade Value contém o valor da opção selecionada na caixa de listagem. Por isso, se o usuário selecionar Servidor2 na caixa de listagem, Value será server2. Esse parâmetro indica a forma como passamos informações para a caixa de diálogo. (Se você quiser passar vários valores, poderá fazê-lo nesse parâmetro como uma matriz ou talvez uma coleção.)

Veremos daqui a pouco como a caixa de diálogo recebe o valor nesse parâmetro. Mas primeiro, observe que inserimos um terceiro parâmetro:

“dialogHeight:400px;dialogWidth:300px”

Este parâmetro contém uma cadeia de caracteres que especifica a altura e a largura desejadas para nossa caixa de diálogo. Neste caso, especificamos uma altura de 400 pixels (400px) e uma largura de 300 pixels. Como vimos no nosso exemplo de restrita, mesmo que esse parâmetro seja deixado em branco, a caixa de diálogo será exibida como o tamanho padrão para o computador.

Agora vamos examinar modelessdialog.hta (na Figura 6) e ver como a caixa de diálogo lê o valor que é passado para ela.

Figure 6 modelessdialog.hta

<html>
<head>
<title>Modeless Dialog</title>
<HTA:APPLICATION 
  APPLICATIONNAME=”Processes”>
</head>

<script language=”VBScript”>
Sub window_onLoad
  strComputer = window.dialogArguments
  Set objWMIService = GetObject(“winmgmts:” _
    & “{impersonationLevel=impersonate}!\\” _
    & strComputer & “\root\cimv2”)
  Set colProcesses = objWMIService.ExecQuery   _
    (“Select * from Win32_Process”)

  strHTML = “<h1>” & strComputer & “</h1><p>”
  For Each objProcess in colProcesses
    strHTML = strHTML & objProcess.Name & _
       “<br>”
  Next

  DataArea.InnerHTML = strHTML
End Sub
</script>

<body>
<span id=”DataArea”></span>
</body>
</html>

Neste HTA, o único elemento que especificamos é uma distribuição, que contém a área completa da caixa de diálogo. Em nossa seção de script, definimos uma sub-rotina window_onLoad, que será executada assim que o HTA for aberto (neste caso, pela chamada para ShowModelessDialog). Dê uma olhada na primeira linha dessa sub-rotina:

strComputer = window.dialogArguments

Estamos atribuindo à variável strComputer o conteúdo da propriedade window.dialogArguments. E o que você acha que está nessa propriedade? Viu? Você deve estar despertando com a primavera também. Isso mesmo, é o valor passado no segundo parâmetro da chamada para ShowModelessDialog. Se Servidor2 tiver sido selecionado na janela principal, strComputer agora contém o valor server2.

O resto da sub-rotina simplesmente recupera todos os processos de strComputer e os exibe na área de distribuição. Você pode ver os resultados dessa operação na Figura 7.

Felizmente, agora você tem o verão inteiro para se divertir com caixas de diálogo de HTA. Obviamente, a menos que você more no Hemisfério Sul, onde o inverno está chegando, e tenha tantos problemas de queda de energia como tivemos aqui.

A Equipe de Scripts da Microsoft trabalha para a – bem, é empregada da – Microsoft. Quando não está jogando/treinando/assistindo beisebol (e diversas outras atividades), ela administra o Script Center da TechNet. Confira no site www.scriptingguys.com.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..