Проблема с добавлением графики в TLabel

Я пытаюсь создать в Delphi компонент, унаследованный от TLabel, с добавлением некоторой пользовательской графики в TLabel.Paint. Я хочу, чтобы графика была на левой стороне текста, поэтому я переопределил GetClientRect:

function TMyComponent.GetClientRect: TRect;
begin
  result := inherited GetClientRect;
  result.Left := 20;
end;

Это решение имеет серьезную проблему, которую я хотел бы решить: невозможно щелкнуть "графическую область" элемента управления, только область метки. Если заголовок является пустой строкой, невозможно выбрать компонент в конструкторе, щелкнув по нему вообще. Есть идеи?

2 ответа

Решение

Сначала извините за мой плохой английский.
Я думаю, что это не очень хорошая идея Изменить ClientRect компонента. Это свойство / информация используется для многих внутренних методов и процедур в компоненте, и вы можете изменить функцию / работу компонента.

Я думаю, что вы можете изменить точку для записи текста (20 пикселей в процедуре DoDrawText - в примере -), и компонент может реагировать на события в графической области.

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;

Какие методы / функциональные возможности вы получаете от TLabel, для чего вам нужен этот компонент?

Возможно, вам лучше сделать потомок (скажем, TImage) и нарисовать свой текст как часть этого метода рисования?

Если это действительно должен быть потомок TLabel (со всем, что это влечет за собой), то я думаю, что вы застрянете с этой проблемой времени разработки, так как у TLabel все равно не будет этой проблемы, когда заголовок пуст?

Мне будут интересны другие ответы, которые вы получите!:-)

Другие вопросы по тегам