Fórum Barra de Ferramentas em Aplicação Form MDI (Igual WindowsBar do IbExpert) #6248

30/05/2009

0

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


Rogério Nascimento

Rogério Nascimento

Responder

Posts

30/05/2009

Wesley Yamazack

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
Responder

Gostei + 0

01/06/2009

Wesley Yamazack

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
Responder

Gostei + 0

02/06/2009

Rogério Nascimento

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
Responder

Gostei + 0

03/06/2009

Wesley Yamazack

Olá Rogério,
  Estarei fazendo as alterações e logo te retornarei com a solução.
  Peço que aguarde.

Att,

Wesley Y
Responder

Gostei + 0

03/06/2009

Wesley Yamazack

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
Responder

Gostei + 0

04/06/2009

Rogério Nascimento

Caro Wesley, perfeito, é isto mesmo.

Chamado resolvido. Valeu pela atenção e grande ajuda !!!


Até a proxima,

 Abraços,

Rogério Nascimento.



Responder

Gostei + 0

05/06/2009

Wesley Yamazack

Olá Rogério,
  Estamos aqui sempre que precisar, pode contar com agente.

Abraços,

Wesley Y
Responder

Gostei + 0

09/06/2009

Rogério Nascimento

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.

Responder

Gostei + 0

09/06/2009

Rogério Nascimento

Ah mais um detalhe,

Se eu tiro da uses o ComCtrls, o projeto compila, porem qdo vou fechar o Frm Child, da Acess Violation.
Responder

Gostei + 0

10/06/2009

Wesley Yamazack

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
Responder

Gostei + 0

10/06/2009

Rogério Nascimento

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
Responder

Gostei + 0

10/06/2009

Wesley Yamazack

Blz então meu amigo, estamos a disposição.

Att,

Wesley Y
Responder

Gostei + 0

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

Aceitar