Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Sáb Fev 11, 2012 2:36 pm Assunto: [Resolvido] Como Listar meus Forms no botão Voltar e Avançar |
|
|
Olá pessoal, venho solicitar um auxilio na questão de, "Como listar todos forms MDIChild abertos dentro do form PAI atravez dos botões [VOLTAR |v|] e [AVANCAR |v|], este |v| é a propriedade [ DropDownList ] dos botões....**Componente "toolbar"**
Motivo do Auxilio é:
- Evitar que o usuário fique clicando em 'Voltar' ou 'Avançar' um a um até chegar em um FormFilho aberto,ex: abro lá uns 10 forms (Parceiro/Cliente/Produto etc.....) então justamente entra esta minha lista nesta setinha para baixo do botão aparecerá todos meus Forms Filhos que foram abertos, e ele podendo selecionar na lista qual ele deseja que volte a ser mostrado...
Hoje estes meus 2 botões não faz mas do que ao clicar neles:
[Voltar] -> Previous;
[Avancar] -> Next;
Em Pratica da minha solicitação de auxilio:
[VOLTAR |v|]
[FormCadParceiro 1]
[FormCadCliente 2 ]
[FormCadFunc 3 ]
[FormCadProduto 4 ]
Etc...
PS: O botão Avançar mostrará tambem as mesmas listas do botão Voltar.
Poderiam me dar uma ideia de como fazer isso, se é por Popup ou por Action e vinculando no meu DropDownList destes botões
Espero que me ajudem, pois isso pode ajudar tambem muita gente..
Editado pela última vez por eduardolfj em Qua Fev 22, 2012 12:04 am, num total de 1 vez |
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Dom Fev 12, 2012 1:25 pm Assunto: Re: Como Listar meus Forms MDIChild no botão Voltar e Avançar |
|
|
Up |
|
Voltar ao Topo |
|
 |
lucas_alves Colaborador


Registrado: Domingo, 30 de Agosto de 2009 Mensagens: 1632 Localização: São Gonçalo - Rio de Janeiro
|
Enviada: Dom Fev 12, 2012 2:52 pm Assunto: |
|
|
Eu fiz algo parecido usando um JvTabBar, eu fiz asim:
Código: |
function FindTabTag(Tag : Integer) : TJvTabBarItem;
Var i : Integer;
begin
Result:=Nil;
for i := 0 to Pred(FormPrincipal.JvTabBar1.Tabs.Count) do
if FormPrincipal.JvTabBar1.Tabs[i].Tag=Tag then
begin
Result:=FormPrincipal.JvTabBar1.Tabs[i];
Exit;
end;
end;
procedure TFormPrincipal.RefleshTab;
Var NewTabBarItem : TJvTabBarItem;
TabSelected : TJvTabBarItem;
i : Integer;
begin
if JvTabBar1.Tabs.Count>0 then
JvTabBar1.Tabs.Clear;
for i := 0 to Pred(FormPrincipal.MDIChildCount) do
begin
NewTabBarItem:=TJvTabBarItem.Create(JvTabBar1.Tabs);
NewTabBarItem.Caption:=' '+FormPrincipal.MDIChildren[i].Caption+' ';
NewTabBarItem.Tag:=integer(FormPrincipal.MDIChildren[i].Handle);
FormPrincipal.MDIChildren[i].Tag:=NewTabBarItem.Tag;
end;
if (ActiveMDIChild<>nil) then
begin
TabSelected:=FindTabTag(FormPrincipal.ActiveMDIChild.Tag);
FormPrincipal.JvTabBar1.SelectedTab:=TabSelected;
if ActiveMDIChild.WindowState <> wsMaximized then ActiveMDIChild.WindowState:=wsMaximized;
end;
JvTabBar1.Visible:=(JvTabBar1.Tabs.Count>0);
//PanelFundo.Visible:=(Not JvTabBar1.Visible);
end;
//evento onTabSelected
procedure TFormPrincipal.JvTabBar1TabSelected(Sender: TObject;
Item: TJvTabBarItem);
Var vWinControl : TForm;
begin
if JvTabBar1.SelectedTab=nil then
Exit;
vWinControl:=FindFormTag(JvTabBar1.SelectedTab.Tag);
if vWinControl<>nil then
TForm(vWinControl).Show;
end;
///***********
///***********
//Depois que dar um Show no form chame a função "RefleshTab;"
|
Você pode adaptar o código as suas necessidades!
Qualquer coisa é só falar!
Abraços!!! _________________ Agora eu também programo em PHP. |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Seg Fev 13, 2012 8:48 am Assunto: |
|
|
Veja como funciona a property "WindowMenu" do form
ela faz exatamente isso |
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Seg Fev 13, 2012 6:34 pm Assunto: |
|
|
gilsonnrodrigues escreveu: | Veja como funciona a property "WindowMenu" do form
ela faz exatamente isso |
Boa tarde, obrigado pelas informações mas pelo WindowMenu do form eu sabia que listava, o que eu quero é mostrar as mesmas do WindowMenu nos meus Botões [Voltar] e [Avançar] que possui o 'DropDowMenu'
Segue a imagem dos meus botões no FormPrincipal |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Ter Fev 14, 2012 9:51 am Assunto: |
|
|
eu não falei pra vc usar o menuwindow.
falei pra vc ver como ele funciona.
vc pode tb fazer assim:
acho q funciona. não testei.
Código: |
procedure TSeuForm.FormCreate(Sender: TObject);
begin
Self.WindowMenu := SeuBotao.DropDowMenu.Items |
|
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Qua Fev 15, 2012 6:43 pm Assunto: |
|
|
gilsonnrodrigues escreveu: | eu não falei pra vc usar o menuwindow.
falei pra vc ver como ele funciona.
vc pode tb fazer assim:
acho q funciona. não testei.
Código: |
procedure TSeuForm.FormCreate(Sender: TObject);
begin
Self.WindowMenu := SeuBotao.DropDowMenu.Items |
|
Tentei desta forma citada no meu FormPrincipal mas não funcionou, tambem
Mais alguma solução amigos ? |
|
Voltar ao Topo |
|
 |
gilsonnrodrigues Moderador

Registrado: Quinta-Feira, 14 de Abril de 2005 Mensagens: 9009 Localização: Governador Valadares-MG
|
Enviada: Qui Fev 16, 2012 8:59 am Assunto: |
|
|
Código: | var
mi : TMenuItem;
begin
mi := TMenuItem.create(SeuBotao.DropDowMenu);
SeuBotao.DropDowMenu.Items.Add(mi);
mi.Caption := 'Janelas';
Self.WindowMenu := mi; |
|
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Qui Fev 16, 2012 11:48 pm Assunto: |
|
|
gilsonnrodrigues escreveu: | Código: | var
mi : TMenuItem;
begin
mi := TMenuItem.create(SeuBotao.DropDowMenu);
SeuBotao.DropDowMenu.Items.Add(mi);
mi.Caption := 'Janelas';
Self.WindowMenu := mi; |
|
1º Obrigado por estar me ajudando gilson, tentei utilizar isso no meu Form Pai, evento OnCreate mas não funcionou, tentei tambem no OnChange do popup tambem não deu hehe....
Haveria algum outro local para se adaptar o código ou se foi testado já ?
Obs: Se coloco no OnCreate ocorre violações
---------------------------
Debugger Exception Notification
---------------------------
Project Comercial.exe raised exception class EAccessViolation with message 'Access violation at address 0053B6BA in module 'Comercial.exe'. Read of address 00000034'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
--------------------------- |
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Sáb Fev 18, 2012 12:33 pm Assunto: |
|
|
UP |
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Ter Fev 21, 2012 12:57 pm Assunto: |
|
|
Ainda não consegui pessoal tentei ligar o WindowMenu do meu FormPai em um TMenuItem do popup que está ligado ao btnVoltar.DropDowMenu mas não aparece os forms Filhos abertos.. Opção do WindowMenu so funciona ao TMainMenu.
Ajudem plz rs....msn: eduardolfj@hotmail.com |
|
Voltar ao Topo |
|
 |
lucas_alves Colaborador


Registrado: Domingo, 30 de Agosto de 2009 Mensagens: 1632 Localização: São Gonçalo - Rio de Janeiro
|
Enviada: Ter Fev 21, 2012 8:06 pm Assunto: |
|
|
eduardolfj escreveu: |
Ainda não consegui pessoal tentei ligar o WindowMenu do meu FormPai em um TMenuItem do popup que está ligado ao btnVoltar.DropDowMenu mas não aparece os forms Filhos abertos.. Opção do WindowMenu so funciona ao TMainMenu.
Ajudem plz rs....msn: eduardolfj@hotmail.com |
tente assim:
Código: |
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
ToolButton1: TToolButton;
private
procedure ClickButton(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
procedure ExibirMenu;
end;
{.......}
procedure TForm1.ClickButton(Sender: TObject);
Var vForm : TForm;
begin
vForm:=TForm(FindControl(HWnd(TToolButton(Sender).Tag)));
if vForm<>nil then
vForm.Show;
end;
procedure TForm1.ExibirMenu;
var
NewPopUp : TPopupMenu;
NewItem : TMenuItem;
i : Integer;
begin
NewPopUp:=TPopupMenu.Create(self);
for i := 0 to self.MDIChildCount-1 do
begin
NewItem := TMenuItem.create(NewPopUp);
NewItem.Caption := Self.MDIChildren[i].Caption;
NewItem.Tag:=Self.MDIChildren[i].Handle;
NewItem.OnClick:=ClickButton;
NewPopUp.Items.Add(NewItem);
ToolButton1.DropdownMenu:=NewPopUp;
end;
end;
|
depois que abrir um form tem que chamar a função "ExibirMenu();".
Abraços!!! _________________ Agora eu também programo em PHP. |
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Ter Fev 21, 2012 10:33 pm Assunto: |
|
|
Citação: |
tente assim:
Código: |
type
TForm1 = class(TForm)
ToolBar1: TToolBar;
ToolButton1: TToolButton;
private
procedure ClickButton(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
procedure ExibirMenu;
end;
{.......}
procedure TForm1.ClickButton(Sender: TObject);
Var vForm : TForm;
begin
vForm:=TForm(FindControl(HWnd(TToolButton(Sender).Tag)));
if vForm<>nil then
vForm.Show;
end;
procedure TForm1.ExibirMenu;
var
NewPopUp : TPopupMenu;
NewItem : TMenuItem;
i : Integer;
begin
NewPopUp:=TPopupMenu.Create(self);
for i := 0 to self.MDIChildCount-1 do
begin
NewItem := TMenuItem.create(NewPopUp);
NewItem.Caption := Self.MDIChildren[i].Caption;
NewItem.Tag:=Self.MDIChildren[i].Handle;
NewItem.OnClick:=ClickButton;
NewPopUp.Items.Add(NewItem);
ToolButton1.DropdownMenu:=NewPopUp;
end;
end;
|
depois que abrir um form tem que chamar a função "ExibirMenu();".
Abraços!!! |
Obrigado lucas_alves desta forma funcionou perfeito, só a um problema quando o form é fechado o nome dele esta permanecendo na lista do botao.DropDowMenu
Ps: estou chamando o ExibirMenu(); no OnCreate dos meus forms.. |
|
Voltar ao Topo |
|
 |
eduardolfj Novato

Registrado: Sábado, 4 de Fevereiro de 2012 Mensagens: 33
|
Enviada: Qua Fev 22, 2012 12:04 am Assunto: |
|
|
Resolvido adicionei mas está procedure com for i :=1 no meu FormPrincipal e declarei pubilica, depois no FormClose eu chamo frmMenu.FecharMenu(); e ela atualiza meu caption do botão.
Obrigado a todos que ajudaram..
Código: |
procedure TfrmMenu.FecharMenu;
var
NewPopUp : TPopupMenu;
NewItem : TMenuItem;
i : Integer;
begin
NewPopUp:=TPopupMenu.Create(self);
for i := 1 to self.MDIChildCount-1 do
begin
NewItem := TMenuItem.create(NewPopUp);
NewItem.Caption := Self.MDIChildren[i].Caption;
NewItem.Tag:=Self.MDIChildren[i].Handle;
NewItem.OnClick:=ClickButton;
NewPopUp.Items.Add(NewItem);
btnVoltar.DropdownMenu:=NewPopUp;
btnAvancar.DropdownMenu:=NewPopUp;
end;
end;
|
|
|
Voltar ao Topo |
|
 |
lucas_alves Colaborador


Registrado: Domingo, 30 de Agosto de 2009 Mensagens: 1632 Localização: São Gonçalo - Rio de Janeiro
|
Enviada: Qua Fev 22, 2012 11:02 am Assunto: |
|
|
eduardolfj escreveu: | Resolvido adicionei mas está procedure com for i :=1 no meu FormPrincipal e declarei pubilica, depois no FormClose eu chamo frmMenu.FecharMenu(); e ela atualiza meu caption do botão.
Obrigado a todos que ajudaram..
|
É só chamar a função "ExibirMenu;" depois que fechar o form!
Abraços!!! _________________ Agora eu também programo em PHP. |
|
Voltar ao Topo |
|
 |
|