Um controle de botão e substituição subjacente do TBitmap que lida adequadamente com a transparência PNG sem escrever código de pré-mistura

TSpeedButtons do @Delphi 2010 não parecia realmente suportar a transparência PNG corretamente, porque a propriedade Glyph usa um TBitmap internamente, e o TBitmap é para bitmaps e não suporta a transparência PNG corretamente, e o TSpeedButton.Glyph não pode suportar a transparência.update: Mas o problema real era que eu tinha algumas coisas externas (componentes do Developer Express) que estavam tornando o suporte PNG do delphi não-funcional, TImage por outro lado, enquanto ainda TPicture e pode suportar PNG, também foi afetado por isso Bug expresso do desenvolvedor.

Uma pergunta já foi feita sobreAqu, e a resposta mostra como usar a pré-mistura para que a transparência não se transforme em pixels pretos. Quero saber se existe outro controle de botão que usará PNGs misturados com alfa carregados no momento do design e que não converte os recursos PNG em formato BMP descartando o canal alfa e causando a borda preta mostrada aqui.

Em resumo, esse controle não usaria o TBitmap e não usaria o recurso de transparência da chave de cores que é tudo o que o TBitmap possu

Para repetir, não estou perguntando como resolver o problema do preto ao redor do exterior enquanto ainda estiver usando a funcionalidade VCL desatualizada baseada em TBitmap / TSpeedButton, porque falta a funcionalidade de transparência PNG moderna, estou perguntando sobre substituí-la com outra coisa que "simplesmente funciona".

Como uma desvantagem secundária, converter um arquivo .png pequeno em um recurso de bitmap .DFM está basicamente desperdiçando espaço e tornando meu formulário .DFM muito grande. O armazenamento nativo do formato de arquivo .png no .dfm deve reduzir os formulários resultante

Atualizar PngComponents parece que eles devem funcionar, mas eu tenho umInvalid Graphic format erro quando tento carregar um png no botão de velocidade Png. Observe que o componente da lista de imagens Png não apresenta esses problemas. Parece que a cxLibrary (um pacote expresso para desenvolvedores) está quebrando as coisas. Depois de remover todas as coisas expressas pelo desenvolvedor, esse problema desaparece. Portanto, embora eu tenha selecionado Pngcomponents como resposta, se você tiver coisas para o Devx instaladas, use os botões delas e não pngcomponents.

questionAnswers(3)

yourAnswerToTheQuestion