Problema com a adição de gráficos para TLabel
-
02-07-2019 - |
Pergunta
Eu estou tentando criar com Delphi um componente herdado do TLabel, com alguns gráficos personalizados adicionados a ele em TLabel.Paint. Quero que os gráficos para estar no lado esquerdo do texto, então eu cancelou GetClientRect:
function TMyComponent.GetClientRect: TRect;
begin
result := inherited GetClientRect;
result.Left := 20;
end;
Esta solução tem grande problema que eu gostaria de resolver: Não é possível clicar em "área de gráficos" o do controle, apenas a área da etiqueta. Se a legenda é uma string vazia, não é possível selecionar o componente no designer de clicando em tudo. Alguma idéia?
Solução
Na primeira desculpa-me para o meu mau Inglês.
Eu acho que não é uma boa idéia Alterar o ClientRect do componente. Esta propriedade / informação é usada por muitos métodos e procedimentos internos no componente e você pode mudar o functionemnt / operação do componente.
Eu acho que você pode mudar o ponto de escrever o texto (20 pixels no processo DoDrawText -in exemplo-) ea podem responder componente em eventos na área gráfica.
procedure TGrlabel.DoDrawText(var Rect: TRect; Flags: Integer);
begin
Rect.Left := 20;
inherited;
end;
procedure TGrlabel.Paint;
begin
inherited;
Canvas.Brush.Color := clRed;
Canvas.Pen.Color := clRed;
Canvas.pen.Width := 3;
Canvas.MoveTo(5,5);
Canvas.LineTo(15,8);
end;
Outras dicas
Que métodos / funcionalidade que você está recebendo a partir de TLabel que você precisa deste componente para fazer?
Você, talvez, ser uma melhor um descendente de (digamos, TImage) e desenhe seu texto como parte de seu método de pintura?
Se ele realmente tem que ser um descendente TLabel (com tudo o que isso implica), então eu acho que você vai ser preso com este problema de tempo de design, como não TLabel tem esse problema de qualquer maneira quando a legenda está vazio?
Eu vou estar interessado em outras respostas que você começa! : -)