PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Ativando form já criado #282114

18/05/2005

0

olá pessoal

estou com um probleminha na ativação de forms que estou criando.

tenho uma formPrincipal que é um MDIChild:
nele eu tenho do lado direito um panel que contém:
BtnClientes : cria o form de clientes TFrmClientes

No TFrmClientes eu tenho na parte superior os dados cadastrais do cliente e abaixo tenho um grid que possui os pedidos deste cliente.

no centro deste formPrincipal eu tenho um panelPrincipal onde são criados os forms acima indicados, conforme o usuarios selecionar.
segue o codigo utilizado

...
var
  FrmPrincipal : TFrmPrincipal;

  frmCli  : TFrmClientes;

implementation

...

// chamada igual para todos os forms, só muda o tipo.. esse é dos clientes.
procedure TFrmPrincipalF.BtnClientesClick(Sender: TObject);
begin
  if Application.FindComponent(´frmcli´+IntToStr(TblClientes.FieldByName(´CD_CLIENTE´).Value)) = nil then
  begin
    frmcli := TFrmClientes.Create(Application);
    frmcli.Name   := ´frmcli´+IntToStr(TblClientes.FieldByName(´CD_CLIENTE´).Value);
    frmcli.Parent := FrmPrincipal.PnlPrincipal;
    frmcli.BorderStyle := bsNone;
    frmcli.Visible := True;
    Adiciona_Cliente; // é uma procedure que adiciona o cliente que foi selecionado ao treeview do FrmPrincipal.
  end
  else
    TForm(Application.FindComponent(´frmcli´+IntToStr(TblClientes.FieldByName(´CD_CLIENTE´).Value))).BringToFront;

end;

...

do lado esquerdo tb tenho um treeview que vai recebendo os clientes.
qdo eu navego no treeview o frmClientes deste cliente é trazido para a frente com o seguinte código:
procedure TFrmPrincipalF.TreeviewClientesChange(Sender: TObject; Node: TTreeNode);
begin
  Localiza_Cliente; // esta procedure tem o código que localiza o cliente do node selecionado na TblClientes.
  if Application.FindComponent(´frmcli´+IntToStr(TblClientes.FieldByName(´CD_CLIENTE´).Value)) <> nil then
  begin
    TForm(Application.FindComponent(´frmcli´+IntToStr(TblClientes.FieldByName(´CD_CLIENTE´).Value))).BringToFront;
    Pedidos_Cliente; // executa a QueryPedidos.
  end
  else
    // senão encontrar vai executar a rotina do BtnClientes para criar o frmcliente para este cliente.   
 

end;

...
Abaixo do treeview no frmprincipal também tenho um GridPedidos que está ligado a DataSourcePedidos e este ligado ao QueryPedidos.
Esta querypedidos é executada no OnChange do Treeview listando somente os pedidos do cliente selecionado.
então no Onchange do treeview eu ativo o frmcli e executo a query do cliente selecionado.

no evento AfterScroll da QueryPedidos eu executo o seguite código:
...
procedure TFrmPrincipal.QueryPedidosAfterScroll(DataSet: TDataSet);
begin
  if(Application.FindComponent(´frmcli´+IntToStr(QueryAtendCD_CLIENTE.Value)) <> nil)then
  begin
    // o que esta nesse bloco é problema
    if frm510.TblClientes.State = dsBrowse then
    begin
      
      frm510.EdtPesquisa.Text := IntToStr(QueryAtendCD_CLIENTE.Value);
      frm510.BtnPesquisa.Onclick(self); 
    end;  
  end;
end;

...
Independente do codigo do bloco indicado acima, o código não está sendo executado para o frmcli que foi chamado pelo BringToFront.
Ele executa sempre para o ultimo frmcli que foi criado e não para o ativo.
tentei utlizar um active, mas não funcionou.
Então o que preciso além de trazer o form do cliente para a frente com o BringToFront é ativá-lo.

alguem pode me ajudar?

valeu
Diogo.


Diogoalles

Diogoalles

Responder

Posts

18/05/2005

Diogoalles

olá galera

acabei conseguindo fazer com que funcione com o código abaixo.
Só gostaria que alguém me dissesse qual a diferença entre os comandos e se estaria correto como fiz.

...
TForm(Application.FindComponent(´frmcli´+IntToStr(TblClientes.FieldByName(´CD_CLIENTE´).Value))).BringToFront; 
SetForegroundWindow(TForm(Application.FindComponent(´frmcli´+IntToStr(TblClientes.FieldByName(´CD_CLIENTE´).Value))).Handle);
...



abraço
Diogo


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar