Fórum Barra de Ferramentas em Aplicação Form MDI (Igual WindowsBar do IbExpert) #6248
30/05/2009
0
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
Curtir tópico
+ 0Posts
30/05/2009
Wesley Yamazack
Estarei desenvolvendo o teu exemplo, e logo retornarei com o mesmo.
Peço que aguarde. Grato pela compreensão.
Att,
Wesley Y
Gostei + 0
01/06/2009
Wesley Yamazack
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
02/06/2009
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
03/06/2009
Wesley Yamazack
Estarei fazendo as alterações e logo te retornarei com a solução.
Peço que aguarde.
Att,
Wesley Y
Gostei + 0
03/06/2009
Wesley Yamazack
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
04/06/2009
Rogério Nascimento
Chamado resolvido. Valeu pela atenção e grande ajuda !!!
Até a proxima,
Abraços,
Rogério Nascimento.
Gostei + 0
05/06/2009
Wesley Yamazack
Estamos aqui sempre que precisar, pode contar com agente.
Abraços,
Wesley Y
Gostei + 0
09/06/2009
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
09/06/2009
Rogério Nascimento
Se eu tiro da uses o ComCtrls, o projeto compila, porem qdo vou fechar o Frm Child, da Acess Violation.
Gostei + 0
10/06/2009
Wesley Yamazack
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
10/06/2009
Rogério Nascimento
Acabei de testar, ficou show de bola, muito obrigado !!!!
Abraços,
Rogério Nascimento
Gostei + 0
10/06/2009
Wesley Yamazack
Att,
Wesley Y
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)