Já faz algum tempo que me deparo com o problema de trabalhar com PopUp no Delphi 2006. Meu problema é simples; Tenho um formulário de cadastro e ao clicar em algum Button abriria um PopUp para fazer a pesquisa e depois fechar o mesmo passando o resultado da pesquisa para o formulário e para o campo correto.

 

    Bom poderíamos usar um método de certa forma fácil de se implementar que é o uso de Session tal como o meu colega Leonardo C. Quartieri publicou recentemente em PopUp em Aplicações Asp.Net com Delphi 2006 não tenho nada contra mas não sou muito fã de usar Session principalmente porque tenho que aplicar o refresh no formulário de cadastro com isso teria que gravar todos os campos do formulário em Session ufa ( tomara que meus cadastros tenha poucos campos, Brincadeira).

     Minha saída é meio simples vamos usar do bom javascript, e das suas propriedades window.opener.  Com as quais podemos passar de uma pagina para outra de forma simples como muitos programadores Delphi win 32 ja tinhão costume de fazer e que na programação WEB ja se torna mais complicado  ja que o ASP.NET não suporta tal procedimento mas  graças  a Deus temos o Javascript para nos socorre.

   Um problemque temos que analisar é o seguinte muitas vezes quando usamos controles web aplicados junto  com javascript acaba por ocasionando em muitos erros, isso porque os nomes dos objetos é automaticamente criado e gerenciado pelo ASP.NET, bom para não termos este problema devemos mudar isto de que forma? Informando nos mesmos os nomes que queremos utilizar em cada um dos objetos, e não podemos nos esquecer dos formulários que já são setados seus nomes pelo ASP.NET e com isso também temos que alterar seus nomes.

    Como todo bom programador temos que observar que o javascript é diferente pois o mesmo é Case-Sensitivity e com isso podem ocorrer erros se forem escritos de forma errado, errado não na programação mas sim nas letras em maiusculo e minusculo.

 

    Vamos por a mão na massa e criar nosso exemplo neste exemplo não vamos utilizar uma pesquisa em banco de dados mas somente a troca de informações entre o formulário de cadastro e a janela de PopUp,visto que para aplicar a uma pesquisa com banco de dados segue a mesma idéia de raciocínio.

    Primeiro:

   Vamos criar uma aplicação ASP.NET WebApplication

    Bom altere o nome do WebForm1 para WfCadastro adicione nele 2 TextBox e um Button como a figura abaixo

 

 

WfCadastro.JPG

 

 

 


    Mude para a visualização de HTML.

    No WfCadastro altere os id dos Textbox para TFica e TRecebe acresente name ="TFica" e name="TRecebe" respectivamente.

    Localize o ID do form e altere também seu ID para FrCadastro.

Segundo:

    Vamos criar um novo WebForm e renomeie o mesmo para WfPopUp adicione um Texbox e um Button como na figura abaixo. 

 

WfPopUp.JPG

 

 

    Mude para a visualização de HTML no WfPopUp.

    Altere os id dos Textbox para TInfVamor e acresente name ="TInfValor".

    Localize o ID do form e altere também seu ID para FrPopUp.


    Terceiro:

    Volte para o WfCadastro na visualização de HTML e digite o seguinte script opservando para digitar antes da tag de fechamento do HEAD

    Esse script ébem simples de se entender nada mais é que pedimos para abrir uma janela(pagina Pop Up) passamos como parametros o nome da pagina em asp depois o nome que daremos a janela delpois passamos o tamanho da janela e sua possição na tela do usuario e por fim informamos que esta janela(pagina Pop Up) vai nos retornar alguma informação.

<script id="clienteEventHandlersJS" language="javascript">

   function PegarInf()
{ janela=window.open(WfPopUp.aspx,nomeJanela,width=500,height=400,left=100,top=20,retorno);}


</script>

script11.JPG

 

 

 

Altere para o modo de código clicando em WfCadastro.pas e localise no mesmo o  evento Page_Load e adicione o seguinte código.

    Este codigo tem como finalidade atribui ao Button em seu evento Onclick a função que foi criada em javascript ( esta é uma grande vantage de se trabalhar integrando 3 linguagens de programação Delphi, ASP.NET e Javascript nunca que eu programando com Delphi 3 iria pensar um dia em usar uma cobinação destas rs rs).

    Button1.Attributes.Add(OnClick, PegarInf(););


    Quarto:

    Volte para o  WfPopUp na visualização HTML e digite o seguinte script opservando para digitar antes da tag de fechamento do HEAD

    Neste script temos duas funções podemos ter quantos forem nescessarios, na primeira PassaDados()  é onde pegamos as informações do nossos campos dentro do Pop Up que desejamos e informamos para onde eles seram mandados na janela de cadastro na segunda Fecha() simplesmente fecha com nossa janela de Pop up aproveitamos para dentro da função PassaDados() ja chamar a que fecha a janela.

<script id="clientEventHandlersJS" language="javascript">

function PassaDados()
{
 window.opener.document.FrCadastro.TRecebe.value = document.FrPopUp.TInfVamor.value;
 window.opener.document.FrCadastro.submit();
 Fechar();
}

function Fechar()
{
 window.close();
}

 

script2.JPG

 

 

 

Altere o modo de código clicando em WfPopUp.pas e ao evento Page_Load e adicione o seguinte código.

Como ja comentado acima aqui simplesmente adicionamos ao Button a função criada em javascript.

  Button1.Attributes.Add(Onclick,PassaDados(););
 

    Compile.

    Teste e   veja que você digita um valor no campo TFica e clica no Button ( Pop Up ) e digita outro valor no  campo TInfValor quando clica no botão fechar a pagina de cadastro não é recarregada novamente com isso não perde o valor digitado no campo TFica  mas recebe o valor que foi informado no janela de PopUp.


    Espero poder ter ajudado aos usuarios aqui do site e fico aqui disponivel para tentar sanar qualquer duvida arespeito do asunto desdeque eu saiba é só falar.

    Agradeço ao meu amigo Marcus Pavan pela ajuda prestada.
  


    Sem mais muito obrigado a todos.