http://www.netgocn.com Original
Todos os botões não têm cor em programas Windows padrão. Portanto, todos os componentes do botão fornecidos pela Delphi também não têm atributos de cores.
Aqui, forneço um método para fazer os botões de amônio com atributos de cores usando componentes personalizados. Altere a cor à vontade durante o estágio de design, assim como os componentes fornecidos pelo próprio Delphi (o código deste artigo é feito no Delphi 4.0).
primeiro passo
Abra o Delphi, selecione a opção de componente/novo componente do menu e preencha ou o suspensão manualmente na caixa suspensa do tipo ancestral da caixa de diálogo pop-up concluirá com base nisso. O restante do conteúdo da escrita na caixa de diálogo será preenchido como você quiser, mas você deve observar que o nome da classe não pode ser o mesmo que o nome da classe (incluindo o seu personalizado) e você também deve se lembrar de que é definido O local de instalação do componente (o conteúdo na caixa suspensa da página da paleta) e o local de armazenamento dos arquivos da unidade no disco (o conteúdo da caixa de edição do nome do arquivo da unidade), caso contrário, onde você o encontrará no futuro ?
Etapa 2
Depois de concluir o trabalho acima, pressione o botão OK abaixo e o Delphi gera automaticamente um código de componente básico para você. (Este artigo foi excluído apenas. Todos os comentários gerados automaticamente) devem ser salvos.
Etapa 3
Adicione nosso código na estrutura de código acima, é claro que este é o principal trabalho que queremos fazer.
1. Modifique a parte da definição do tipo de dados do arquivo de unidade gerado automaticamente por Delphi para:
tipo
Tbutton1 = classe (tbutton)
Privado
Fcolor: tcolor;
Fcanvas: tcanvas;
Isfocused: booleano;
procedimento setColor (valor: tcolor);
Procedimento CNDRAWITEM (VAR Mensagem: TWMDRAWITEM);
protegido
Procedimento CreateParams (Var Params: TCreateParams);
Procedimento setButtonStyle (Adefault: Boolean);
público
Construtor Create (Anowner: TComponent);
destruidor destruir;
publicado
Cor da propriedade: tcolor leia fcolor write setColor padrão clwhite;
fim;
ilustrar:
a.
b.
c. Faça da aula que eles não podem ser acessados lá fora.
2. O registro automático de processo da Delphi pode ignorá -lo. Após seu órgão de processo, adicionamos manualmente o seguinte código antes.
// *** Construtor ****************************************** ** **********
construtor tbutton1.create (awner: tComponent);
Começar
Criar Herited (AOWNER);
Fcanvas: = tcanvas.create;
Fcolor: = clwhite; // cor padrão
fim;
// *** destruidor ********************************************** ********
destruidor tbutton1.destroy;
Começar
Fcanvas.Free;
Destrução herdada;
fim;
// *** Para definir o estilo do botão, o botão deve ser redefinido como um botão autodidata ***********************
procedimento tbutton1.createParams (var params: tcreateParams);
Começar
CreateParams herdados (params);
com params do estilo: = estilo ou bs_ownerdraw;
fim;
// *** Método de escrita de atributos ******************************************** ********* *******
procedimento tbutton1.setColor (valor: tcolor);
Começar
Fcolor: = value;
Invalidar;
fim;
// *** Defina o status do botão ****************************************** ****** ****
procedimento tbutton1.setButtonStyle (Adefault: Boolean);
Começar
Se Adefault <> isfocused então
Começar
Isfocused: = Adefault;
Atualizar;
fim;
fim;
// *** Botão de desenho ******************************************* ******
procedimento tbutton1.cndrawItem (var mensagem: twmdrawItem);
var
ISDOWN, ISDEFAULT: booleano;
Arect: Trect;
Bandeiras: Longint;
DrawItemstruct: tdrawItemstruct;
WH: tsize;
Começar
DrawItemstruct: = message.DrawItemstruct^;
Fcanvas.Handle: = drawItemstruct.hdc;
Arect: = clientrect;
com drawitemstruct fazer
Começar
Isdown: = itemstate e ODS_SELECT <> 0;
IsDefault: = itemstate e ODS_FOCUS <> 0;
fim;
Sinalizadores: = dfcs_buttonpush ou dfcs_adjustrect;
se isown então sinalizadores: = sinalizadores ou dfcs_pushed;
Se drawitemstruct.itemstate e ODS_Disabled <> 0 então
Sinalizadores: = sinalizadores ou dfcs_inactive;
Se for focado ou isdefault, então
Começar
// desenhe o estado quando o botão ficar foco
Fcanvas.pen.color: = clwindowframe;
Fcanvas.pen.width: = 1;
Fcanvas.brush.style: = bsclear;
Fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
Infulteect (arect, -1, -1);
fim;
Fcanvas.pen.color: = clbtnshadow;
Fcanvas.pen.width: = 1;
Fcanvas.brush.color: = fcolor;
Se está redondo, então comece
// desenhe o status quando o botão for pressionado
Fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
Infulteect (arect, -1, -1);
fim mais
// desenhe um botão não pressionado
DrawFramEControl (drawitemstruct.hdc, arect, dfc_button, sinalizadores);
Fcanvas.fillrect (arect);
// Desenhe o conteúdo do texto da legenda
Fcanvas.font: = self.font;
Arect: = clientrect;
wh: = fcanvas.textextent (legenda);
Fcanvas.pen.width: = 1;
Fcanvas.brush.style: = bsclear;
Se não estiver ativado então
Comece // Quando o botão falhar, você deve desenhar o texto da legenda mais uma vez
Fcanvas.font.color: = clbtnhighlight;
Fcanvas.textout ((largura div 2)-(wh.cx div 2) +1,
(altura div 2)-(wh.cy div 2) +1,
Rubrica);
Fcanvas.font.color: = clbtnshadow;
fim;
Fcanvas.textout ((largura div 2)-(wh.cx div 2), (altura div 2)-(wh.cy div 2), legenda);
// desenha a linha pontilhada do quadro interno quando você obtém o foco
Se for focado e ISDefault, então
Começar
Arect: = clientrect;
Infulteect (arect, -4, -4);
Fcanvas.pen.color: = clwindowframe;
Fcanvas.brush.color: = fcolor;
DrawFocusRect (fcanvas.handle, arect);
fim;
Fcanvas.Handle: = 0;
fim;
//** O fim ******************************************** ******************
fim.
Etapa 4: Após a verificação, confirmando que o erro está correto, selecione a opção de componente/instalação do menu Delphi. componente.
Se você seguir este artigo completamente, depois de compilar e instalar corretamente, poderá encontrar um botão com o mesmo ícone que Tbutton na guia Amostras do rótulo do componente Delphi. Crie um novo projeto e coloque este botão que usamos no formulário. Que tal? Através de sua propriedade de cores, você define sua cor à vontade.
Finalmente, o método de desenho de botões neste artigo adota um método de desenho semelhante ao Tbutton da Delphi para obter uma aparência de ação semelhante à do botão Delphi. No entanto, se você quiser jogar, pode desenhar qualquer texto e gráficos na tela do FCanvas que deseja expressar sua personalidade.
Se você tiver alguma dúvida, envie uma carta ou deixe uma mensagem.
Bem -vindo a experimentar o software deste site: netgocn (rede)