Delphi - Duplicate TPanel e tbuttons na segunda forma
Pergunta
No meu formulário principal Eu tenho um TPanel contendo botões que funcionam como uma barra de ferramentas. Eu quero clone / copiar este barra de ferramentas e os botões e sua funcionalidade para um segundo formulário.
Clonagem o menu foi simples usando newmenu.merge (mainmenu). Isso foi um excelente atalho para duplicar um TMainMenu.
Mas estou em uma perda sobre como duplicar facilmente minha barra de ferramentas sem ter de atribuir manualmente os eventos e manter um temporizador para comparar e acompanhar quais botões são ativados e desativados em comparação com o mainmenu real sobre a forma principal. Dependendo do que o aplicativo está fazendo os principais botões da barra de ferramentas será ativada e desativada em vários momentos.
Todas as ideias aqui? Obrigado por todas as sugestões ou dicas para tornar isso mais fácil.
Solução
-
Duplicando os controles
No criador de formulário, selecione o painel e pressione Ctrl + C para copiá-lo e todos os seus filhos para a área de transferência. Ir para a segunda forma e pressione Ctrl + V para colar.
Se você ainda está trabalhando no projeto e quer mantê-lo consistente entre as duas formas, em seguida, criar um
TFrame
e projetar seu layout barra de ferramentas lá. Em seguida, coloque uma instância dessa estrutura em ambas as suas formas. Alterações no design do quadro será refletida nos formulários.Trabalhando com quadros na ajuda.
-
Certificar-se de ambos os conjuntos de botões estão habilitados consistentemente
Criar um módulo de dados. Colocar um
TActionList
nele. Adicionar uma ação para que para cada botão no formulário principal. manipuladores de eventos atribuir a eventosOnUpdate
das ações. Neles, definir as acções propriedadesEnabled
. Finalmente, atribuir propriedadeAction
de cada botão para se referir ao objeto ação correspondente. Os botões automaticamente se ativada e desativada com as ações. Sem temporizador necessário.Além disso, você pode lidar com eventos
OnExecute
das ações, também. Limpar a propriedadeOnClick
de cada botão e mover o códigoOnClick
do botão no manipuladorOnExecute
da ação correspondente. Ele será automaticamente chamado quando você clica no botão, mesmo que a propriedadeOnClick
está vazio.Quando você atribui a
Caption
ouHint
propriedade de umTAction
, as propriedades correspondentes de quaisquer controles associados também mudam. O mesmo vale para as imagens, se o controle suporta-los. As ações podem ser atribuídas a itens de menu também.Usando listas de ação na ajuda.
-
Agindo como uma barra de ferramentas
Basta usar
TToolbar
. Isso é o que é para.Ou, uma vez que você está acostumado a ações, colocar um
TActionManager
em seu projeto e usá-lo comTActionToolbar
eTActionMainMenuBar
. Consulte Organizar ações para barras de ferramentas e menus na ajuda.
Outras dicas
são os botões ligados a ações? Se assim for, você pode usar o evento OnUpdate do TActionList para especificar o que deve e não deve ser habilitado. Se não, ele não é muito trabalho para converter a usar ações.
Se você percorrer esse caminho para converter a usar um ActionList, considere colocar o ActionList em um datamodule onde diferentes unidades e formas poderia referenciá-lo.
Você pode usar ClipBoard Objeto Para copiar o seu Painel.
Clipboard.SetComponent (Panel1);
Clipboard.GetComponent (Form2, GroupBox1);