Проблема с добавлением графики в 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 все равно не будет этой проблемы, когда заголовок пуст?
Мне будут интересны другие ответы, которые вы получите!:-)