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?

Foi útil?

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! : -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top