Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Criar o mesmo form com outro nome!


Douglas Soares

Pergunta

Boa tarde, tenho um projeto aqui e preciso fazer o seguinte:

Quando eu minimizar o form, criar um botão em modo de execução em outro form! - Isso já consegui!

Quando Restaurar o form, destruir o botão em modo de execução no outro form! - Tambem já consegui!

Quando fechar o form, tambem destruir o botão em modo de execução no outro form! - já fiz!

Queria saber, se quando eu abrir outro form (o mesmo form), tivesse como eu identificar qual form é qual!, pois como vou destruir ou criar o botão no outro form se eu nem sei o nome de cada form :wacko: , to meio confuso!, e gostaria de saber tambem, se eu for criar o segundo botão, como eu faria para coloca-lo do lado de um botão já criado anteriormente, e se não tiver nenhum botão lá ainda, dai ele poe no começo, (left := 0)....................................

Abraços

Editado por Douglas_Soares
Link para o comentário
Compartilhar em outros sites

22 respostass a esta questão

Posts Recomendados

  • 0

Na verdade, eu até consegui abrir 2 forms iguais, mas se eu der um Form.Hide por exemplo, ele vai esconder os 2!, não sei diferenciar :wacko: , e quando eu minimizar é para criar um botão no outro form!, então eu preciso saber como controlar os 2 ou + individualmente!

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

para criar o botão em runtime eu uso isso:

private
procedure ClickMe(Sender : TObject);
public
end;
var
btnRunTime : TButton;
procedure TfrmCadClientes.FormShow(Sender: TObject);
begin
  btnRunTime := TButton.Create(frmPrincipal);
  with btnRunTime do begin
    Visible := true;
    Top := 865;
    Left := 0;
    Width := 140;
    Caption := frmCadClientes.Caption;
    Name := 'cliente_' + DBEdit1.Text;
    Parent := frmPrincipal;
    OnClick := ClickMe;
  end;
  frmCadClientes.Hide;
end;
procedure TfrmCadClientes.ClickMe(Sender : TObject);
begin
  with (Sender as TButton) do
  begin
  frmCadClientes.Show;
  frmCadClientes.WindowState := wsNormal;
  frmCadClientes.BringToFront;
  end;
end;
procedure TfrmCadClientes.FormClose(Sender: TObject);
begin
try
  btnRunTime.Destroy;
except
end;
end;

é Isso ai que eu uso para criar o botão!

Obs: quando estou no frmCadClientes, e fico sem mecher por 3 segundos ele esconde o form, e vem o principal pra frente, não sei porque :mellow:

Editado por Douglas_Soares
Link para o comentário
Compartilhar em outros sites

  • 0

Veja este material

function CreateForms( FormClass: TFormClass; FormName: TCustomForm; ModalForm : Boolean ) : Boolean;
begin
  with FormName do
  try
    FormName := FormClass.Create(Application);
    If ModalForm Then
       ShowModal
    else
       Show;
    CreateForms := True;
  except
    messagedlg( 'Ocorreu um erro enquanto o sistema criava a janela ' + FormName.ClassName + '!!', MtError, [MbOk], 0 );
    CreateForms := False;
  end;
end;

http://www.ramosdainformatica.com.br/art_r...s01.php?CDA=584

http://www.devmedia.com.br/articles/viewcomp.asp?comp=2558

http://www.linhadecodigo.com.br/Dica.aspx?id=376

http://delphizinho.blogspot.com/2009/02/cr...amicamente.html

OBS: Em um deles vai achar algo interessante para voce usar

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Usei essa sua função, que deu na mesma coisa! eu sempre dou show, então deixei False a opção Modal da function, eu consigo abrir quantos eu quiser! ele abre normalmente, porem quando abre e cria o botão, se ele abre otro, ele cria o botão com o mesmo nome e da erro!, na questão do nome do botão eu queria que ficasse, btnClientes1, btnClientes2, btClientes3................... E quando eu clico no botão era pra ele restaurar o form que o criou, e não todos os frmCadClientes que estão criados!, no entando quando os forms criam o botão, eles criam no mesmo lugar!, eu queria detectar se já tem botão, e se tiver, eu seto o left um pouco mais para o botão ir pra direita! :wacko: :wacko: :wacko:

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
eu queria detectar se já tem botão, e se tiver, eu seto o left um pouco mais para o botão ir pra direita!

Então use esta rotina

var i : Integer;
begin
   for i := 0 to ComponentCount -1 do
    begin

      if Components[i] is TButton then
         showmessage('Já existe um button no Form');

    end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
como eu faria para contar quantos buttons tem no determinado form?

var i , numbt : Integer;
begin
   numbt := 0;
   for i := 0 to ComponentCount -1 do
    begin

      if Components[i] is TButton then
         numbt := numbt + 1;  // numero de buttons encontrados no form
    end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
certo, mas teria uma forma nesse OnClick, pra mim mandar dar um Show no Form que o criou?, pois pode ter 2 forms abertos com o mesmo nome, dai fica dificil =/ eu saber...

Douglas ... porque tem que ter 2 forms com o mesmo nome ? só vai existir 2 forms com o mesmo nome se voce quiser.

Reveja os códigos e voce encontrará a maneira de se fazer isso

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Douglas ... olhei o seu video.

Qual a necessidade de abrir o mesmo formulario mais de uma vez ? mesmo que voce tenha que trabalhar com outras abas ( outras telas de informação ) existentes no form, não vejo a necessiade disso.

Acho que o que voce esta querendo fazer se resolve com este comando

SetWindowPos(FMovCaixa.handle, HWND_NOTOPMOST, FMovCaixa.Left, FMovCaixa.Top,FMovCaixa.Width, FMovCaixa.Height, 0); // HWND_NOTOPMOST normal

Veja no help do delphi

The SetWindowPos function changes the size, position, and Z order of a child, pop-up, or top-level window. Child, pop-up, and top-level windows are ordered according to their appearance on the screen. The topmost window receives the highest rank and is the first window in the Z order.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Num entendi muito bem, na verdade o que eu quero é abas mesmo, da mesma app, se eu soubesse como fazer isso do zero....... :wacko:

Obs: não precisa ser com button, eu só fiz pra testar, pode ser com qualquer componente......... funcionando está bom, ehehe!

Abraços

Editado por Douglas_Soares
Link para o comentário
Compartilhar em outros sites

  • 0

Estou quase chegando lá.... agora uso um PageControl, e como posso saber o nome da pagecontrol que eu cliquei, no onclick dela, exemplo:

procedure TfrmCadClientes.ClickMe(Sender : TObject);
begin
  with (Sender as TPageControl) do
  begin
  ShowMessage(botãoquecliquei.name);
  end;
end;

é isso ai que eu queria :wacko:

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Estou quase chegando lá.... agora uso um PageControl, e como posso saber o nome da pagecontrol que eu cliquei, no onclick dela
Douglas ... com o botão direito do mouse no pagecontrol voce cria ( New Page ) quantas paginas ( abas ) voce quiser e cada uma delas voce pode colocar um nome ou usar o nome padrão ( tabsheet1 , tabsheet2, tabsheet3 .. etc )

como posso saber o nome da pagecontrol que eu cliquei

na verdade voce usaria o tabsheet, clicando neles voce vera que cada um tem um nome, e dentro de cada tabsheet voce pode montar outras telas de informação para a sua aplicação. É como se voce colocasse varios forms dentro de um apenas.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

não é isso, eu crio um page em runtime e os deleto quando fecho o form, dai eu associo um evento onchange para cada botão criado, dai nesse onchance eu queria saber se tem um jeito pra eu saber o nome da page que eu acabei de clicar.... ShowMessage(TabSheetClidada.Name);

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
agora só falta eu setar a ActivePage para a pagina que acabei de criar.... como eu faço isso?

Coloque o numero da pagina... exemplo

PageControl1.ActivePageIndex := 1;

PageControl1.ActivePageIndex := 0;

PageControl1.ActivePageIndex := 3;

PageControl1.ActivePageIndex := 2;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Estou com um problema lógica....

no FormActivate, tenho que dar o seguinte comando:

frmPrincipal.PageControl1.ActivePage := formname;

sendo que formname é uma variável do tipo STRING

no entanto, a variavel formname contem o nome do TTabSheet que eu preciso que esteja ativo!

Será que eu teria que fazer alguma conversão :wacko: ......

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Estou com um problema lógica....

no FormActivate, tenho que dar o seguinte comando:

frmPrincipal.PageControl1.ActivePage := formname;

Douglas... já que quer trabalhar dese modo o certo seria:

formname := 'TabSheet2';

   if formname = 'TabSheet1' then
      frmPrincipal.PageControl1.ActivePageIndex := 0;

   if formname = 'TabSheet2' then
      frmPrincipal.PageControl1.ActivePageIndex := 1;

   if formname = 'TabSheet3' then
      frmPrincipal.PageControl1.ActivePageIndex := 2;

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...