Проблема с добавлением графики в TLabel - PullRequest
2 голосов
/ 25 сентября 2008

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

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

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

Ответы [ 2 ]

4 голосов
/ 25 сентября 2008

Сначала простите за мой плохой английский.
Я думаю, что это не очень хорошая идея Изменить 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;
0 голосов
/ 25 сентября 2008

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

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

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

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

...