Fórum Criação de Componente: Com Foco, mas sem seleção #196950
25/11/2003
0
Quero criar um componente, com praticamente as mesmas características do BitBt. Mas quero que o componente fique sem nenhum efeito 3d e sem aquele pontilhado contornando o componente quando o mesmo está com o foco. Mas o retalhe importante é que este componente tem que permitir ser selecionado com a tecla tab. Ao receber o foco a imagem vai mudar, igual como acontece quando passa o mouse em cima.
Raserafim
Curtir tópico
+ 0Posts
27/11/2003
Raserafim
Gostei + 0
27/11/2003
Beppe
Tem duas opções: subclasseamento ou herdar um novo controle. Herdar um novo controle é mais fácil.
type TButtonWithoutDots = class private procedure WMPaint(var Message: TWMPaint); WM_PAINT; end; procedure TButtonWithoutDots.WMPaint(var Message: TWMPaint); begin inherited; if Focused then begin Assert(Message.DC <> 0); DrawFocusRect(Message.DC, GetClientRect); end; end;
Gostei + 0
28/11/2003
Raserafim
Criei um novo componente herdando de TButton. Em sua declaração Private coloquei o procedimento:
procedure WMPaint(var Message: TWMPaint); Message WM_PAINT;
tive que acrescentar o Message antes do WM_Paint pois dava um erro ao compilar.
Utilizei o COde COmpletation (Ctrl + Shift + C) para criar o esqueleto do procedimento, então coloquei dentro:
inherited;
if Focused then
begin
Assert(Message.DC <> 0);
DrawFocusRect(Message.DC, GetClientRect);
Mas quando adiciono o componente e compilo o programa aparece um erro na classe EAssertionFailed e diz o número da linha do erro, que é a código:
Assert(Message.DC <> 0);
O que está faltando Ataliba?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)