Barra de Ferramentas em Aplicação Form MDI (Igual WindowsBar do IbExpert)
Olá
Estou desenvolvendo uma aplicação FormMDI e gostaria de criar uma barra de ferramentas que mostrasse as opções abertas na aplicação, igual a windowsbar do ibexpert ou a barra de ferramentas do windows xp.
Como eu poderia fazer isto?
Abaixo modelo de como seria.
Abraços,
Rogério
Estou desenvolvendo uma aplicação FormMDI e gostaria de criar uma barra de ferramentas que mostrasse as opções abertas na aplicação, igual a windowsbar do ibexpert ou a barra de ferramentas do windows xp.
Como eu poderia fazer isto?
Abaixo modelo de como seria.
Abraços,
Rogério
Rogério Nascimento
Curtidas 0
Respostas
Wesley Yamazack
30/05/2009
Olá Rogério,
Estarei desenvolvendo o teu exemplo, e logo retornarei com o mesmo.
Peço que aguarde. Grato pela compreensão.
Att,
Wesley Y
Estarei desenvolvendo o teu exemplo, e logo retornarei com o mesmo.
Peço que aguarde. Grato pela compreensão.
Att,
Wesley Y
GOSTEI 0
Wesley Yamazack
30/05/2009
Olá Rogério,
Segue abaixo exmplo para que você possa fazer a mesma ideia do ibexpert .
unit uPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ToolWin, ComCtrls, StdCtrls;
type
TFrmPrincipal = class(TForm)
MainMenu1: TMainMenu;
Cliente1: TMenuItem;
ToolBar1: TToolBar;
Button1: TButton;
procedure Cliente1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Botao : TToolButton; // Add este botão aqui
procedure DoClick(Sender: TObject); // add esta procedure e implemente a mesma
end;
var
FrmPrincipal: TFrmPrincipal;
implementation
uses uCliente;
{$R *.dfm}
procedure TFrmPrincipal.Cliente1Click(Sender: TObject);
begin
FrmCliente := TFrmCliente.Create(Self);
FrmCliente.Show;
Botao := TToolButton.Create(ToolBar1);
Botao.Caption := FrmCliente.Caption;
Botao.tag := Integer(FrmCliente);
Botao.Parent := ToolBar1;
Botao.OnClick := DoClick;
ToolBar1.ShowCaptions := True;
end;
procedure TFrmPrincipal.DoClick(Sender: TObject);
begin
TForm(TComponent(Sender).Tag).Color := clRed;
TForm(TComponent(Sender).Tag).show;
end;
end.
Att,
Wesley Y
Segue abaixo exmplo para que você possa fazer a mesma ideia do ibexpert .
unit uPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ToolWin, ComCtrls, StdCtrls;
type
TFrmPrincipal = class(TForm)
MainMenu1: TMainMenu;
Cliente1: TMenuItem;
ToolBar1: TToolBar;
Button1: TButton;
procedure Cliente1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Botao : TToolButton; // Add este botão aqui
procedure DoClick(Sender: TObject); // add esta procedure e implemente a mesma
end;
var
FrmPrincipal: TFrmPrincipal;
implementation
uses uCliente;
{$R *.dfm}
procedure TFrmPrincipal.Cliente1Click(Sender: TObject);
begin
FrmCliente := TFrmCliente.Create(Self);
FrmCliente.Show;
Botao := TToolButton.Create(ToolBar1);
Botao.Caption := FrmCliente.Caption;
Botao.tag := Integer(FrmCliente);
Botao.Parent := ToolBar1;
Botao.OnClick := DoClick;
ToolBar1.ShowCaptions := True;
end;
procedure TFrmPrincipal.DoClick(Sender: TObject);
begin
TForm(TComponent(Sender).Tag).Color := clRed;
TForm(TComponent(Sender).Tag).show;
end;
end.
Att,
Wesley Y
GOSTEI 0
Rogério Nascimento
30/05/2009
Olá Wesley
Muito obrigado pela ajuda, é extamente isto que estou precisando, mas preciso de uma ajuda ainda em relação a isto.
Como devo fazer para que ao o botão fique checado conforme o form selecionado.
Exemplo:
Abri 3 Form´s (Clientes,Fornecedores e Produtos) pelo MainMenu, mas estou operando no form Fornecedores, gostaria que na toolbar identificasse o form em operação, se eu trocar para o form Clientes, o botão checado será o relacionado ao cliente e o anterior (Fornecedores) volta ao estado normal.
E mais uma ajuda !
Qual a melhor forma de chamar o Form Child para que ele não abra mais de uma vez, eu utilizo desta forma:
if FrmClientes = nil then
begin
FrmClientes := TFrmClientes.Creat(Self);
FrmClientes.Show;
end
else
FrmClientes.Show;
e depois eu faço assim para fechar o mesmo:
procedure TFrmClientes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FrmClientes.FormClose;
end;
procedure TFrmClientes.FormDestroy(Sender: TObject);
begin
FrmClientes := nil;
end;
Esta é a melhor forma? ou a forma mais correta?
Abraços,
Rogério Nascimento
Muito obrigado pela ajuda, é extamente isto que estou precisando, mas preciso de uma ajuda ainda em relação a isto.
Como devo fazer para que ao o botão fique checado conforme o form selecionado.
Exemplo:
Abri 3 Form´s (Clientes,Fornecedores e Produtos) pelo MainMenu, mas estou operando no form Fornecedores, gostaria que na toolbar identificasse o form em operação, se eu trocar para o form Clientes, o botão checado será o relacionado ao cliente e o anterior (Fornecedores) volta ao estado normal.
E mais uma ajuda !
Qual a melhor forma de chamar o Form Child para que ele não abra mais de uma vez, eu utilizo desta forma:
if FrmClientes = nil then
begin
FrmClientes := TFrmClientes.Creat(Self);
FrmClientes.Show;
end
else
FrmClientes.Show;
e depois eu faço assim para fechar o mesmo:
procedure TFrmClientes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FrmClientes.FormClose;
end;
procedure TFrmClientes.FormDestroy(Sender: TObject);
begin
FrmClientes := nil;
end;
Esta é a melhor forma? ou a forma mais correta?
Abraços,
Rogério Nascimento
GOSTEI 0
Wesley Yamazack
30/05/2009
Olá Rogério,
Estarei fazendo as alterações e logo te retornarei com a solução.
Peço que aguarde.
Att,
Wesley Y
Estarei fazendo as alterações e logo te retornarei com a solução.
Peço que aguarde.
Att,
Wesley Y
GOSTEI 0
Wesley Yamazack
30/05/2009
Olá Rogério,
Vamos lá.
1 - No Form que você que "destruir" o botão faça o seguinte.
2 - Dar uses nos forms em ComCtrls;
procedure TFrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TToolButton(tag).Destroy; // Adicionando isso, ao fechar o teu form o Botão que esta associoado a ele será destruído.
Action := caFree;
end;
Você não precisa botar num bloco begin / end e dar um Show novamente, do jeito que esta agora já funciona.
if FrmClientes = nil then
FrmClientes := TFrmClientes.Creat(Self);
FrmClientes.Show;
Altere também a forma de abrir cada Form.
FrmCliente := TFrmCliente.Create(Self);
Botao := TToolButton.Create(ToolBar1);
Botao.Parent := ToolBar1;
Botao.Caption := FrmCliente.Caption;
Botao.Tag := Integer(FrmCliente);
FrmCliente.Tag := Integer(Botao);
Botao.Style := tbsCheck;
Botao.Grouped := True;
Botao.OnClick := DoClick;
FrmCliente.Show;
ToolBar1.ShowCaptions := True;
Conseguimos resolver o problema, desta forma?
Att,
Wesley Y
Vamos lá.
1 - No Form que você que "destruir" o botão faça o seguinte.
2 - Dar uses nos forms em ComCtrls;
procedure TFrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TToolButton(tag).Destroy; // Adicionando isso, ao fechar o teu form o Botão que esta associoado a ele será destruído.
Action := caFree;
end;
Você não precisa botar num bloco begin / end e dar um Show novamente, do jeito que esta agora já funciona.
if FrmClientes = nil then
FrmClientes := TFrmClientes.Creat(Self);
FrmClientes.Show;
Altere também a forma de abrir cada Form.
FrmCliente := TFrmCliente.Create(Self);
Botao := TToolButton.Create(ToolBar1);
Botao.Parent := ToolBar1;
Botao.Caption := FrmCliente.Caption;
Botao.Tag := Integer(FrmCliente);
FrmCliente.Tag := Integer(Botao);
Botao.Style := tbsCheck;
Botao.Grouped := True;
Botao.OnClick := DoClick;
FrmCliente.Show;
ToolBar1.ShowCaptions := True;
Conseguimos resolver o problema, desta forma?
Att,
Wesley Y
GOSTEI 0
Rogério Nascimento
30/05/2009
Caro Wesley, perfeito, é isto mesmo.
Chamado resolvido. Valeu pela atenção e grande ajuda !!!
Até a proxima,
Abraços,
Rogério Nascimento.
Chamado resolvido. Valeu pela atenção e grande ajuda !!!
Até a proxima,
Abraços,
Rogério Nascimento.
GOSTEI 0
Wesley Yamazack
30/05/2009
Olá Rogério,
Estamos aqui sempre que precisar, pode contar com agente.
Abraços,
Wesley Y
Estamos aqui sempre que precisar, pode contar com agente.
Abraços,
Wesley Y
GOSTEI 0
Rogério Nascimento
30/05/2009
Olá Wesley, tdo bem?!!!
Primeiramente peço desculpas, somente agora que eu consegui finalizar o formChild e apresentou problemas sobre ao apagar o button. Preciso de sua ajuda.
Esta é a linha com o problema:
TToolButton(tag).Destroy;
esta desta forma:
procedure TFrmAlunos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TToolButton(tag).Destroy;
OnClose := FrmAlunos.FormClose;
Action := caFree;
end;
Vale lembrar que a toolbar esta no frmPrincipal, o frm MDI, não sei se isto influencia, mas qdo vou compilar, da este erro:
[DCC Warning] uFrmAlunos.pas(8): W1005 Unit 'FileCtrl' is specific to a platform
[DCC Error] uFrmAlunos.pas(130): E2004 Identifier redeclared: 'ComCtrls'
[DCC Fatal Error] RPSIG.dpr(8): F2063 Could not compile used unit 'D:\Exemplos\Curso CDS\uFrmAlunos.pas'
em uses esta desta forma:
uses uDmAlunos, uFrmPrncipal, ComCtrls;
o que devo fazer?
Abraços,
Rogério Nascimento.
Primeiramente peço desculpas, somente agora que eu consegui finalizar o formChild e apresentou problemas sobre ao apagar o button. Preciso de sua ajuda.
Esta é a linha com o problema:
TToolButton(tag).Destroy;
esta desta forma:
procedure TFrmAlunos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TToolButton(tag).Destroy;
OnClose := FrmAlunos.FormClose;
Action := caFree;
end;
Vale lembrar que a toolbar esta no frmPrincipal, o frm MDI, não sei se isto influencia, mas qdo vou compilar, da este erro:
[DCC Warning] uFrmAlunos.pas(8): W1005 Unit 'FileCtrl' is specific to a platform
[DCC Error] uFrmAlunos.pas(130): E2004 Identifier redeclared: 'ComCtrls'
[DCC Fatal Error] RPSIG.dpr(8): F2063 Could not compile used unit 'D:\Exemplos\Curso CDS\uFrmAlunos.pas'
em uses esta desta forma:
uses uDmAlunos, uFrmPrncipal, ComCtrls;
o que devo fazer?
Abraços,
Rogério Nascimento.
GOSTEI 0
Rogério Nascimento
30/05/2009
Ah mais um detalhe,
Se eu tiro da uses o ComCtrls, o projeto compila, porem qdo vou fechar o Frm Child, da Acess Violation.
Se eu tiro da uses o ComCtrls, o projeto compila, porem qdo vou fechar o Frm Child, da Acess Violation.
GOSTEI 0
Wesley Yamazack
30/05/2009
Olá Rogério,
Primeiramente peço enormes desculpas pela demora ao responder o chamado, tive problemas pessoais.
Vamos ao que interessa seguem as alterações.
procedure TFrmPrincipal.Cliente1Click(Sender: TObject);
begin
Botao := TToolButton.Create(ToolBar1);
FrmCliente := TFrmCliente.Create(Self);
Botao.Caption := FrmCliente.Caption;
Botao.tag := Integer(FrmCliente);
Botao.Parent := ToolBar1;
Botao.OnClick := DoClick;
ToolBar1.ShowCaptions := True;
FrmCliente.Show;
FrmCliente.btnBotao := Botao;
end;
unit uFrmCliente;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TFrmCliente = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
btnBotao : TToolButton;
end;
var
FrmCliente: TFrmCliente;
implementation
{$R *.dfm}
procedure TFrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
btnBotao.Destroy;
end;
end.
Espero que isso possa te ajudar meu caro.
Att,
Wesley Y
Primeiramente peço enormes desculpas pela demora ao responder o chamado, tive problemas pessoais.
Vamos ao que interessa seguem as alterações.
procedure TFrmPrincipal.Cliente1Click(Sender: TObject);
begin
Botao := TToolButton.Create(ToolBar1);
FrmCliente := TFrmCliente.Create(Self);
Botao.Caption := FrmCliente.Caption;
Botao.tag := Integer(FrmCliente);
Botao.Parent := ToolBar1;
Botao.OnClick := DoClick;
ToolBar1.ShowCaptions := True;
FrmCliente.Show;
FrmCliente.btnBotao := Botao;
end;
unit uFrmCliente;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TFrmCliente = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
btnBotao : TToolButton;
end;
var
FrmCliente: TFrmCliente;
implementation
{$R *.dfm}
procedure TFrmCliente.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
btnBotao.Destroy;
end;
end.
Espero que isso possa te ajudar meu caro.
Att,
Wesley Y
GOSTEI 0
Rogério Nascimento
30/05/2009
Que isto Wesley, eu que peço desculpas por não ter feito todos os testes.
Acabei de testar, ficou show de bola, muito obrigado !!!!
Abraços,
Rogério Nascimento
Acabei de testar, ficou show de bola, muito obrigado !!!!
Abraços,
Rogério Nascimento
GOSTEI 0
Wesley Yamazack
30/05/2009
Blz então meu amigo, estamos a disposição.
Att,
Wesley Y
Att,
Wesley Y
GOSTEI 0