Вот такое дело.
создаю компонент, который создает надписи к фото.
Использую TGraphicControl как родителя.
Рисую все с помощью Canvas.
Т.е.
--
Canvas.StretchDraw(GetRect,FPicture.Graphic);
--
Canvas.TextOut(FPosX,FPosY,FText);
--
и т.д.
Вопрос, как мне потом сохранить содержимое этого самого канваса.
Пробую уже в программе достучаться до этого свойства, а онон не доступно. Пробую публиковать так:
public
property Canvas: TCanvas read GetCanvas;
private
function GetCanvas: TCanvas;
а вот что в теле писать, никак не укладывается. Помогите плиз.
на последок исходный код компонента:
unit TextImage;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Graphics, Forms, Dialogs;
type
TTextImage = class(TGraphicControl)
private
FPicture : TPicture;
FFont :TFont;
FStretch : Boolean;
FText: string;
FPosX : Integer;
FPosY : Integer;
procedure SetPicture(Value: TPicture);
procedure SetStretch(Value: boolean);
procedure SetFont(const Value: TFont);
procedure SetText(value: String);
procedure SetPosX(Value: integer);
procedure SetPosY(Value: integer);
function GetCanvas: TCanvas;
procedure PictureChanged(Sender: TObject);
protected
procedure Paint; override;
function GetRect: TRect;
procedure DrawText();
public
constructor Create(AOwner: TComponent); override;
property Canvas: TCanvas read GetCanvas;
published
property Picture: TPicture read FPicture write SetPicture;
property Font: TFont read FFont write SetFont;
property Stretch: Boolean read FStretch write SetStretch default true;
property Text: String read FText write SetText;
property PosX:integer read FPosX write SetPosX default 0;
property PosY:integer read FPosY write SetPosY default 0;
end;
procedure Register;
implementation
function TTextImage.GetCanvas: TCanvas;
begin
end;
constructor TTextImage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FPicture := TPicture.Create;
FPicture.OnChange := PictureChanged;
FFont := TFont.Create;
end;
procedure TTextImage.PictureChanged(Sender: TObject);
begin
Canvas.StretchDraw(GetRect,FPicture.Graphic);
end;
function TTextImage.GetRect :TRect;
begin
if (FStretch) then
Result := ClientRect
else
Result := Rect(0, 0, FPicture.Width, FPicture.Height);
end;
procedure TTextImage.SetStretch(Value: boolean);
begin
FStretch := Value;
Repaint;
end;
procedure TTextImage.Paint;
begin
if csDesigning in ComponentState then
with inherited Canvas do
begin
Pen.Style := psDash;
Brush.Style := bsClear;
Rectangle(0, 0, Width, Height);
end;
with inherited Canvas do
begin
StretchDraw(GetRect, FPicture.Graphic);
Font := FFont;
TextOut(FPosX,FPosY,FText);
end;
end;
procedure TTextImage.SetPicture(Value: TPicture);
begin
FPicture.Assign(Value);
end;
procedure TTextImage.SetText(Value : String);
begin
FText := value;
DrawText();
end;
procedure TTextImage.SetPosX(Value : integer);
begin
FPosX := value;
DrawText();
end;
procedure TTextImage.SetPosY(Value : integer);
begin
FPosY := value;
DrawText();
end;
procedure TTextImage.SetFont(const Value: TFont);
begin
FFont.Assign(Value);
DrawText();
end;
procedure TTextImage.DrawText();
begin
Canvas.Font := FFont;
Canvas.Brush.Style := bsClear;
Canvas.TextOut(FPosX,FPosY,FText);
Refresh;
end;
procedure Register;
begin
RegisterComponents('Standard', [TTextImage]);
end;
end.