Chamar outro form no intraweb

Delphi

20/06/2003

oi, pessoal, eu estava programando com o intraweb ( o que raramente tenho feito) e me deparei com um problema: eu precisava chamar outro form, porem o comando form2.show nao funcionou, como chamo outro form pelo intraweb?
agora tive que dar uma parada no projeto por causa disso. pra variar o forum ficou uns 3 dias fora do ar. Ajudem, por favor, é para um artigo muito interessante que eu estou desenvolvendo.

brigadao...


Davicdc

Davicdc

Curtidas 0

Respostas

Marcelo Carvalho

Marcelo Carvalho

20/06/2003

Oi,

Tem várias formas.

1) Na primeira, você cria o formulário dinamicamente e o mostra, e depois destrói o formulário atual. Funciona como uma mudança de página em um site. Desta forma não é possível [b:0bb7ba7506]voltar[/b:0bb7ba7506]* (com Release) à página anterior, e seu conteúdo eventualmente alterado (ex: dados preenchidos em formulários) é perdido. Mas torna possível que uma aplicação IW tenha navegação livre, em qualquer seqüência de páginas, como em um site.

*Não pode-se ´voltar´, mas pode-se ´ir de novo´...

// Botão para abrir o formulário:
procedure TIWForm1.IWButton2Click(Sender: TObject);
begin
  // Forma simples - cria dinamicamente um "formulário" e já o mostra:
  TIWForm3.Create(WebApplication).Show;
  // Destrói o formulário atual:
  Release;
end;


2) Uma alternativa semelhante à anterior, que permite que se configure alguma coisa na página a ser aberta antes de mostrá-la:

// Botão para abrir o formulário:
procedure TIWForm1.IWButton1Click(Sender: TObject);
begin
  // Assim posso criar dinamicamente o "formulário" a ser mostrado,
  // e ainda alterar alguma informação nele:
  with TIWForm2.Create(WebApplication)
    do begin
      IWLabel2.Caption:=´Blá bla bla´;
      Show;
    end;
  // Destrói o formulário atual:
  Release;
end;


3) Noutro método, você não destrói a página atual. Funcionaria como um ´show modal´, mesmo que só usando ´show´. O usuário passa para a próxima janela, mas a anterior não é destruída. Ao se utilizar ´Release´ na nova janela, volta-se à anterior, que tem seus dados (ex: valores de formulários) mantidos:

// Botão para abrir o formulário:
procedure TIWForm1.IWButton4Click(Sender: TObject);
begin
  // Forma simples - cria dinamicamente um "formulário" e já o mostra:
  TIWForm4.Create(WebApplication).Show;
  // O formulário não é destruído, permitindo o retorno com Release.
end;


4) Se preferir, ainda pode-se criar as páginas seguintes (do tipo modal) ao inicializar o programa (páginas persistentes), e chamá-las quando for utilizar. Fica parecido com o que uma aplicação típica Delphi faz, mas pode consumir mais recursos do servidor. Mas pode ser útil se você souber que essas páginas serão de qualquer forma utilizadas pelo seu usuário, e com bastante freqüência:

var
    // Páginas persistentes: (variáveis locais ao Form principal TIWForm1)
    F6: TIWForm6;

procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
  // Outra opção seria criá-lo no OnCreate do Form1, e deixá-lo já criado.
  F6:=TIWForm6.Create(WebApplication);
end;

// Botão para abrir o formulário:
procedure TIWForm1.IWButton6Click(Sender: TObject);
begin
  // Mostra a página 6 pré-criada:
  F6.Show;
  // O formulário não é destruído, permitindo o retorno com Release.
end;


5) Meio maluca, esta opção permite se usar um formulário persistente, sem criá-lo no início. Será criado só na primeira vez que for utilizado, e ficará até o fim da sessão. Na verdade a idéia é tentar abrí-lo, e se der erro, criá-lo e tentar de novo. O risco é ficar provocando ´Access Violations´, ainda que de forma controlada...

var
    // Páginas persistentes: (variáveis locais ao Form principal TIWForm1)
    F5: TIWForm5;

// Botão para abrir o formulário:
procedure TIWForm1.IWButton5Click(Sender: TObject);
begin
  // Neste modo, tenta abrir o formulário, e se der erro o cria.
  try
    // TENTA mostrar o formulário.
    // Se não existir, gera um erro Access Violation (encapsulado)
    F5.Show;
  except
    // Cria o formulário
    F5:=TIWForm5.Create(WebApplication);
    F5.Show;
  end;
  // O formulário não é destruído, permitindo o retorno com Release.
end;


Ah, não se esqueça de incluir as units dos formulários a serem chamados na cláusula Uses do formulário ´chamante´...


GOSTEI 0
POSTAR