Проблема с добавлением графики в TLabel
-
02-07-2019 - |
Вопрос
Я пытаюсь создать с помощью Delphi компонент, унаследованный от TLabel, с добавлением к нему некоторой пользовательской графики в TLabel.Краски.Я хочу, чтобы графика была в левой части текста, поэтому я переопределил GetClientRect:
function TMyComponent.GetClientRect: TRect;
begin
result := inherited GetClientRect;
result.Left := 20;
end;
У этого решения есть серьезная проблема, которую я хотел бы решить:Невозможно нажать на "графическую область" элемента управления, только на область надписей.Если заголовок представляет собой пустую строку, то выбрать компонент в конструкторе, щелкнув по нему, вообще невозможно.Есть какие-нибудь идеи?
Решение
Сначала извините меня за мой плохой английский.
Я думаю, что это не очень хорошая идея Менять 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 все равно нет этой проблемы, когда заголовок пуст?
Мне будут интересны другие ответы, которые вы получите!:-)