Delphi 7 - как создать компонент с текстом в центре изображения
У меня проблема с созданием компонента. Я хочу иметь изображение и простой ярлык в центре этого изображения. Это должен быть компонент, потому что я буду создавать его динамически из кода. Как это сделать? Я не знаю, как объединить два компонента в один.
1 ответ
Если вы хотите реализовать его как собственный компонент, самым быстрым способом может быть наследование от TImage, который будет предлагать все свойства, необходимые для изображений, и переопределить метод Paint, получая доступ к холсту предка, это не создаст никаких шансов на растровом изображении., Короткий пример не имеет отношения к Stretch, вам придется реализовать его самостоятельно.
unit CaptionImage;
interface
uses Windows, Classes, Controls, ExtCtrls, Graphics, PNGIMage, jpeg;
type
// maybe we want to do some more action on the Canvas without manipulation the Bitmap
TOnAfterpaintEvent = Procedure(Sender: TObject; Canvas: TCanvas) of object;
TGraphicControl = Class(Controls.TGraphicControl) // make canvas accessable
public
Property Canvas;
End;
TCaptionImage = Class(ExtCtrls.TImage)
private
ICanvas: TCanvas;
FOnAfterPaint: TOnAfterpaintEvent;
function GetFont: TFont;
published
public
procedure Paint; override;
published
Property OnAfterPaint: TOnAfterpaintEvent Read FOnAfterPaint Write FOnAfterPaint;
Property Caption;
Property Font: TFont read GetFont;
End;
implementation
function TCaptionImage.GetFont: TFont;
begin
Result := TGraphicControl(Self).Canvas.Font;
end;
procedure TCaptionImage.Paint;
var
s: String;
r: TRect;
begin
inherited;
r := ClientRect;
s := Caption;
ICanvas := TGraphicControl(Self).Canvas;
ICanvas.Brush.Style := bsClear;
ICanvas.Textrect(r, s, [tfVerticalCenter, tfCenter, tfSingleLine]);
if Assigned(FOnAfterPaint) then
FOnAfterPaint(Self, ICanvas);
end;
end.
пример использования будет:
procedure TForm5.Button1Click(Sender: TObject);
begin
With TCaptionImage.Create(self) do
begin
Parent := self;
AutoSize := true;
Font.Color := clBlue;
Font.Size := 20;
Picture.LoadFromFile('C:\temp\Bild 1.png');
Caption := 'Test';
end;
end;