![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с отрисовкой текста на TImage
denkop © (2011-09-23 14:53:00)Нужен компонент, который будет рисовать произвольный текст на загруженную картинку в TImage. Набросал код, но работает он неправильно. Компонент уходит в бесконечное перерисовывание.. Подскажите пож, что не так делаю. Вот код:
unit uLabeledImage;
interface
uses ExtCtrls, Graphics, Classes;
type
TLabeledImage = class(TImage)
private
FLabelFont: TFont;
FLabelOffsetX, FLabelOffsetY: integer;
FLabelCaption: string;
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property LabelFont: TFont read FLabelFont write FLabelFont;
property LabelCaption: string read FLabelCaption write FLabelCaption;
property LabelOffsetX: integer read FLabelOffsetX write FLabelOffsetX;
property LabelOffsetY: integer read FLabelOffsetY write FLabelOffsetY;
end;
procedure Register;
implementation
uses Windows, UxTheme;
procedure Register;
begin
RegisterComponents('test', [TLabeledImage]);
end;
constructor TLabeledImage.Create(AOwner: TComponent);
begin
inherited;
FLabelFont:=TFont.Create;
end;
destructor TLabeledImage.Destroy;
begin
FLabelFont.Free;
inherited;
end;
procedure TLabeledImage.Paint;
begin
Picture.Bitmap.Canvas.Font.Assign(FLabelFont);
Picture.Bitmap.Canvas.TextOut(FLabelOffsetX, LabelOffsetY, FLabelCaption);
inherited;
end;
end.
reonid (2011-09-29 11:55:00) [1]Можно рисовать на унаследованном от TGraphicControl канвасе.
THackGraphicControl(Self).Canvas
Dimka Maslov (2011-09-23 22:14:00) [2]Поверх TImage кидается TLabel c прозрачным фоном.
Омлет (2011-09-23 15:54:00) [3]К тому же, текст у тебя выводится на оригинальном изображении, т.е. изменить его уже нельзя будет.
Омлет (2011-09-23 15:51:00) [4]При событии Picture.OnChange происходит перерисовка, в которой ты опять, рекурсивно вызываешь Picture.OnChange.
Использовать за основу TImage - плохая идея. Лучше взять TGraphicControl, к примеру, и вручную контролировать отрисовку компонента.