[firebase-br] RES: StatusBar

lazaro lazaro em usinaalvorada.com.br
Sáb Maio 23 11:28:45 -03 2009


Acho que e isso que vc procura.
Retirado da DTDelphi 2.8--------------------------
777 - Como adicionar items de menu dinâmicamente
Normalmente nós criamos nossos menus, diretamente no Delphi em time project.
Mas e se por algum motivo quisermos incluir itens em um menu em runtime ?
Bom, o TMainMenu possui métodos capazes de incluir(Insert) e excluir(Delete)
itens
de um menu, como fazer isso? Fácil. No exemplo vamos incluir todas as fontes
do windows
em um sub-menu.
 
1: Inicie um novo projeto e inclua um componente TMainMenu no form.
2: Faça com que o menu tenha a seguinte estrutura.
Arquivo Editar
Abrir Copiar
Fechar Colar
  Fontes
3: Coloque um TButton no form e inclua o seguinte código no evento onClick
do mesmo.
 
procedure TfMtCpPrMs.Button1Click(Sender: TObject);
var
  I : Integer;
  NovoItem : TMenuItem;
begin
  For I := 0 to Screen.Fonts.Count - 1 do 
  begin
    NovoItem := TMenuItem.Create(MainMenu1);
    NovoItem.Caption := Screen.Fonts[I];
    MainMenu1.Items[1].Items[2].Insert(I,NovoItem);
  end;
  NovoItem.Free;
end;
 
Bom, beleza o menu será criado.
Na linha MainMenu1.Items[1].Items[2].Insert(I,NovoItem);
Existe uma lógica, veja:
  MainMenu1.Items[1] = Menu Editar
  MainMenu1.Items[1].Items[2] = Item 3 de menu Editar, no caso Fontes
(Lembre-se que o indece começa em 0)
4: Ótimo, mas o que fazer com um item de menu que não tem funcinalidade?
Para que nosso exemplo faça sentido, precisamos que o item clicado execute
alguma ação. Para isso no momento da criação é necessário associar ao evento
onClick do mesmo uma ação, no nosso caso vamos criar uma procedure para ele.
Crie uma procedure na área publica ou privada do seu form, algo como.
 
procedure CapturaClick(Sender : TObject);
 
5: Escreva o seguinte código na sua nova procedure;
 
procedure TfMtCpPrMs.CapturaClick(Sender: TObject);
begin
  ShowMessage('Você escolheu a fonte: ' + TMenuItem(Sender).Caption);
end;
 
6: Agora associe a procedure CapturaClick ao evento de cada item adicionado;
Adicione a seguinte linha ao laço For;
 
MainMenu1.Items[1].Items[2].Items[I].OnClick := CapturaClick;
//Atenção, não passe parâmetros para a procedure
//Modo incorreto.
MainMenu1.Items[1].Items[2].Items[I].OnClick := CapturaClick(Sender);
 
7: O código de inclusão do item de menu completo fica assim:
 
procedure TfMtCpPrMs.Button1Click(Sender: TObject);
var
  I: Integer;
  NovoItem : TMenuItem;
begin
  For I := 0 to Screen.Fonts.Count - 1 do 
  begin
    NovoItem := TMenuItem.Create(MainMenu1);
    NovoItem.Caption := Screen.Fonts[I];
    MainMenu1.Items[1].Items[2].Insert(I,NovoItem);
    MainMenu1.Items[1].Items[2].Items[I].OnClick := CapturaClick;
  end;
  NovoItem.Free;
end;
 
Pronto, teste o programa.
Enviado por Adriano

Fim da dica-----------------------


-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Carlos H. Cantu
Enviada em: sexta-feira, 22 de maio de 2009 18:50
Para: FireBase
Assunto: Re: [firebase-br] StatusBar

EdS> Galera alguem poderia me dar uma dica para criar uma barra de status
com
EdS> botões de controle para acessar os formulários?

Sugiro que vc envie essa duvida para uma lista de Delphi.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br



______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista