Trabalhar com abas em forms separados usando TAdvOfficePager
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.
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
Curtidas 0
Respostas
Rafael Brendolan
20/08/2013
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
É 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
GOSTEI 0
Michel Tank
20/08/2013
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?
Aproveitando o tópico, vc conhece alguma API do delphi equivalente ao Hibernate do Java?
GOSTEI 0
Siplancontrol-m
20/08/2013
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
GOSTEI 0
Rafael Brendolan
20/08/2013
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.
Depois implemente:
São auto-explicativas. Qualquer dúvida não deixe de perguntar e mais uma vez desculpe pela demora.
Abrçs.
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.
GOSTEI 0
Michel Tank
20/08/2013
Muito obrigado amigo, vou analisar a solucao, ah..sem problemas quanto a demora, fui adiantando outras coisas. 2 Meses pro TCC xD
GOSTEI 0
Marcos Oliveira
20/08/2013
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
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
GOSTEI 0
Rafael Brendolan
20/08/2013
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.
O que pode estar acontecendo é no OnCreate você estar querendo dar Foco em algum campo que ainda não está na tela.
GOSTEI 0
Marcos Oliveira
20/08/2013
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
De qualquer forma obrigado pela atenção e pelo código.
Att,
Marcos
GOSTEI 0
José
20/08/2013
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.
Caso contrario basta sinalizar para reabrirmos o tópico ou fique a vontade para abrir um novo tópico.
GOSTEI 0