Fórum Trabalhar com abas em forms separados usando TAdvOfficePager #452736

20/08/2013

0

Boa noite galera,

Isso vai ser pro meu TCC. Tenho um componente da TMS, o AdvOfficePager, nele quero pode adicionar abas com o conteudo carregado de outro form, por ser mais orientado..
A principio, pensei, em cada form de cadastro que fizer, colocar os componentes num AdvOfficePage e depois integra-lo com AdvOfficePager na tela principal.
Outra possibilidade seria colocar num TPanel. Porem nao faco ideia de como instancia-los e finaliza-los depois tbm.

Qualquer ajuda sera bem vinda,
Abracos.
Michel Tank

Michel Tank

Responder

Posts

21/08/2013

Rafael Brendolan

Michel, tenho um projeto em casa onde eu tenho um PageControl da TMS e vou abrindo os forms em guias.
É isso que você quer?
Posso disponibilizar aqui quando chegar em casa de noite.
Ele está completo, só disparar procedure AbrirForm e passar o Form q ele abre em uma guia nova (que ele cria automaticamente) e tem controle para não abrir uma guia idêntica, etc... só confirma se é isso que você quer que se for positivo eu coloco no meu 4Shared e disponibilizo aqui
Responder

Gostei + 0

21/08/2013

Michel Tank

Será de grande ajuda Rafael. Estava fazendo em java, quase pronto, mas recentemente conheci o Delphi, e curti demais, oferece inúmeros recursos, e agora está vindo suporte para várias plataformas xD
Aproveitando o tópico, vc conhece alguma API do delphi equivalente ao Hibernate do Java?
Responder

Gostei + 0

22/08/2013

Siplancontrol-m

Ok, ainda hoje disponibilizo a você. Sobre o Hibernate para Delphi conheço o Aurelius da TMS. Tem alguns artigos sobre ele aqui na DevMedia
Responder

Gostei + 0

30/08/2013

Rafael Brendolan

Desculpe a demora.
Eu fiz isso para um projeto meu uma época e acabei não usando, mas deixei guardado;
Criei uma Unit e coloquei as funções lá dentro, recomendo o mesmo para ficar mais simples o uso.
Crie uma unit TClassFuncoes ou adicione em alguma do tipo se você já tiver.

class procedure AbrirForm(Form: TFormClass);
class function  AbaExiste(NomeAba: string): Boolean;
class procedure FecharForm(Form: TFormClass);


Depois implemente:

class function TClassFuncoes.AbaExiste(NomeAba: string): Boolean;
var
  i: Integer;
  Aba: TcxTabSheet;
begin
  Result := False;
  for i := 0 to FrmPrincipal.cxPageControlPrincipal.PageCount - 1 do
  begin
    if FrmPrincipal.cxPageControlPrincipal.Pages[i].Caption = NomeAba then
    begin
      Aba := FrmPrincipal.cxPageControlPrincipal.Pages[i];
      FrmPrincipal.cxPageControlPrincipal.ActivePage := Aba;
      Result := True;
      break;
    end;
  end;
end;


class procedure TClassFuncoes.AbrirForm(Form : TFormClass);
var
  i: Integer;
  Tab: TcxTabSheet;
  frm: TForm;
begin
  try
    for i:=0 to FrmPrincipal.cxPageControlPrincipal.PageCount-1 do
    begin
      if (FrmPrincipal.cxPageControlPrincipal.Pages[i].Controls[0].ClassType = Form) then
      begin
        FrmPrincipal.cxPageControlPrincipal.ActivePage := FrmPrincipal.cxPageControlPrincipal.Pages[i];
        Exit;
      end;
    end;
    Tab := TcxTabSheet.Create(FrmPrincipal.cxPageControlPrincipal);
    Tab.PageControl := FrmPrincipal.cxPageControlPrincipal;
    frm := Form.Create(Application);
    frm.Parent := Tab;
    frm.Align := alClient;
    frm.BorderStyle := bsNone;
    Tab.Caption := frm.Caption;
    frm.Show;
    FrmPrincipal.cxPageControlPrincipal.ActivePage := Tab;
  except
    on E: Exception do
      ShowMessage('Erro ao abrir a janela: ' + E.Message);
  end;
end;


class procedure TClassFuncoes.FecharForm(Form : TFormClass);
var
  i: integer;
  Aba: TcxPageControl;
begin
  for i := 0 to FrmPrincipal.cxPageControlPrincipal.PageCount - 1 do
  begin
    if FrmPrincipal.cxPageControlPrincipal.Pages[i].Controls[0].ClassType = Form then
    begin
      FrmPrincipal.cxPageControlPrincipal.Pages[i].Destroy;
      Exit;
    end;
  end;
end;


São auto-explicativas. Qualquer dúvida não deixe de perguntar e mais uma vez desculpe pela demora.

Abrçs.
Responder

Gostei + 0

10/09/2013

Michel Tank

Muito obrigado amigo, vou analisar a solucao, ah..sem problemas quanto a demora, fui adiantando outras coisas. 2 Meses pro TCC xD
Responder

Gostei + 0

12/09/2013

Marcos Oliveira

Bom dia Michel! Uso TMS também, e há muito tempo queria fazer isso mas não conseguia.
Adaptei o código ao meu sistema, porém não está dando certo.
Consegui criar os "Tabs" dentro do AdvOfficePager, porém o form não aparece.
Quando indico que o "parent" do form é o "tab", dá erro "Cannot focus a visible or invisible Window". Já dei um visible no form, mas o erro persiste.
Se eu tirar o "parent" não dá erro, mas o form não aparece.
Você conseguiu fazer funcionar?

Obrigado!

Marcos
Responder

Gostei + 0

12/09/2013

Rafael Brendolan

Marcos, não sei o que você mudou no código, mas copiei aqui em um projeto novo com dois forms e consegui abrir sem problemas.
O que pode estar acontecendo é no OnCreate você estar querendo dar Foco em algum campo que ainda não está na tela.
Responder

Gostei + 0

12/09/2013

Marcos Oliveira

Rafael, descobri o que é. É porque meus forms são todos MDI Child. E pra isso funcionar, não pode ser MDI.
De qualquer forma obrigado pela atenção e pelo código.
Att,
Marcos
Responder

Gostei + 0

12/09/2013

José

Olá amigos tendo entendido que as duvidas foram solucionadas estou dando o tópico por concluído.
Caso contrario basta sinalizar para reabrirmos o tópico ou fique a vontade para abrir um novo tópico.
Responder

Gostei + 0

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

Aceitar