Вопрос

Я пытаюсь создать с помощью 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 все равно нет этой проблемы, когда заголовок пуст?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top