Ein Hintergrund-Maler-Klasse


Haben Sie sich jemals gewünscht, um eine Bitmap gekachelt zu zeichnen? zentriert? gestreckt? Verwenden Sie diese Klasse
Hier ist eine Klasse, die fand ich schon vor langer Zeit von einer dieser Speicher Quellen, unterlag ihr einzige Zweck ist es, den Hintergrund eines Fensters mit einem bestimmten Bild zu zeichnen (Sie können ihre Verwendung durch Erweitern Tgraphic Nachkommen wie Tjpegpicture, JPeg in der Uses-Clausel; hinzufügen TGifImage, fügen Sie Anders Melanders Gif; etc.)
Einheit Bgpaint;
Schnittstelle
verwendet
Windows, Grafik, Klassen;
Typ
TTileBackStyle = (TbsNone, TbsPicCenter, TbsPicClip, TbsPicFit, TbsPicHeigth,
TbsPicStretch, TbsPicTile, TbsPicWidth);
TTileBack = Class (TPersistent)
Private
FPicture: TPicture;
FStyle: TTileBackStyle;
FOnChange: TNotifyEvent;
Verfahren SetStyle (const Value: TTileBackStyle);
Procedure SetOnChange (const Value: TNotifyEvent);
Procedure SetPicture (const Value: TPicture);
öffentliche
Konstruktor erstellen;
Destruktor Destroy; außer Kraft setzen;
Prozedur Assign(Source: TPersistent); außer Kraft setzen;
Empty-Funktion: Boolean;
Verfahren Draw (const Leinwand: TCanvas; const ARect: TRect);
OnChange Eigenschaft: TNotifyEvent lesen FOnChange schreiben SetOnChange;
veröffentlicht
Eigenschaft Bild: TPicture lesen FPicture schreiben SetPicture;
Eigenschaft Style: TTileBackStyle lesen FStyle schreiben SetStyle Standard TbsNone;
Ende;
Umsetzung
{TTileBack}
Prozedur TTileBack.Assign(Source: TPersistent);
beginnen
Wenn TTileBack dann ist
mit TTileBack(Source)-do
beginnen
Self.FStyle: = Stil;
Self.Picture:= Bild;
Ende
sonst
vererbt
Ende;
Konstruktor TTileBack.Create;
beginnen
FPicture: = TPicture.Create;
FStyle: = TbsNone;
Ende;
Destruktor TTileBack.Destroy;
beginnen
FPicture.Free;
geerbte Destroy;
Ende;
Procedure TTileBack.Draw (const Leinwand: TCanvas; const ARect: TRect);
var
Dest: TRect;
XPos, YPos, RWidth, RHeight: Integer;
PicRatio, ImageRatio: Double;
beginnen
Wenn leer, dann Ausfahrt;
RWidth: = ARect.Right - ARect.Left;
RHeight: = ARect.Bottom - ARect.Top;
XPos: = 0;
YPos: = 0;
RS Style von
TbsNone: Ausfahrt;
TbsPicClip:
Canvas.Draw (ARect.Left, ARect.Top, Picture.Graphic);
TbsPicCenter:
beginnen
XPos: = ARect.Left + (RWidth - Picture.Width) Div 2;
YPos: = ARect.Top + (RHeight - Picture.Height)div 2;
Canvas.Draw (XPos, YPos, Picture.Graphic);
Ende;
TbsPicFit:
beginnen
Wenn (FPicture.Width > 0) und (FPicture.Height > 0) dann
beginnen
PicRatio: = Picture.Height / Picture.Width;
ImageRatio: = RHeight / RWidth;
Wenn PicRatio > ImageRatio dann
beginnen
XPos: = Trunc(RHeight / PicRatio);
YPos: = RHeight;
Ende
sonst
beginnen
XPos: = RWidth;
YPos: = Trunc (RWidth * PicRatio);
Ende;
Ende;
Dest: = Rect (0,0, XPos, YPos);
OffsetRect (Dest, ARect.Left, ARect.Top);
Canvas.StretchDraw (Dest, Picture.Graphic);
Ende;
TbsPicHeigth:
beginnen
XPos: = Trunc (FPic Ture. Breite * (RHeight / Picture.Height));

YPos: = RHeight;
Dest: = Rect (0, 0, XPos, YPos);
OffsetRect (Dest, ARect.Left, ARect.Top);
Canvas.StretchDraw (Dest, FPicture.Graphic);
Ende;
TbsPicStretch:
Canvas.StretchDraw (ARect, Picture.Graphic);
TbsPicTile:
beginnen
XPos: = ARect.Left;
zwar XPos < ARect.Right tun
beginnen
YPos: = ARect.Top;
zwar YPos < ARect.Bottom tun
beginnen
Canvas.Draw (XPos, Ypos, Picture.Graphic);
YPos: = YPos + FPicture.Height;
Ende;
XPos: = XPos + Picture.Width;
Ende;
Ende;
TbsPicWidth:
beginnen
XPos: = RWidth;
YPos: = Trunc (RWidth * (Picture.Height/Picture.Width));
Dest: = Rect (0,0, XPos, YPos);
OffsetRect (Dest, ARect.Left, ARect.Top);
Canvas.StretchDraw (Dest, Picture.Graphic);
Ende;
Ende;
Ende;
Funktion TTileBack.Empty: Boolean;
beginnen
Ergebnis: = (Style = TbsNone) oder
((Stil in [TbsPicClip, TbsPicFit, TbsPicHeigth, TbsPicStretch, TbsPicTile, TbsPicWidth]) und
((Picture = Nil) oder (Picture.Graphic = null) oder (Picture.Graphic.Empty)))
Ende;
Procedure TTileBack.SetOnChange (const Value: TNotifyEvent);
beginnen
FOnChange: = Value;
FPicture.OnChange: = Value;
Ende;
Procedure TTileBack.SetPicture (const Value: TPicture);
beginnen
FPicture.Assign (Wert);
Ende;
Procedure TTileBack.SetStyle (const Value: TTileBackStyle);
beginnen
Wenn dann FStyle <> Wert
beginnen
FStyle: = Value;
Wenn Assigned(FOnChange) dann
FOnChange(Self);
Ende;
Ende;
Ende.
Hier ist eine schnelle und schmutzige Beispiel seiner Nutzung und Befugnisse:

Einheit bgpaintex1;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Graphics, Steuerelemente, Formulare, Dialoge,
ExtCtrls, BgPaint, StdCtrls, JPeg;
Typ
TForm1 = class(TForm)
Image1: TImage;
ComboBox1: ComboBox den;
Button1: TButton;
OpenDialog1: TOpenDialog;
Prozedur FormCreate(Sender: TObject);
Prozedur FormPaint(Sender: TObject);
Prozedur ComboBox1Change(Sender: TObject);
Prozedur Button1Click(Sender: TObject);
Private
{Private Deklarationen}
öffentliche
{Public Deklarationen}
aBG: TTileBack;
Ende;
var
Form1: TForm1;
Umsetzung
TypInfo verwendet;
{$R *. DFM}
Prozedur TForm1.FormCreate(Sender: TObject);
Var i: TTileBackStyle;
beginnen
aBG: = TTileBack.Create;
aBG.Picture: = Image1.Picture;
aBG.Style: = TbsPicFit;
für i: = TbsNone TbsPicWidth do
beginnen
ComboBox1.Items.AddObject(GetEnumName(TypeInfo(TTileBackStyle), Integer(i)), TObject(i));
Ende;
Ende;
Prozedur TForm1.FormPaint(Sender: TObject);
beginnen
aBG.Draw (Leinwand, ClientRect);
Ende;
Prozedur TForm1.ComboBox1Change(Sender: TObject);
beginnen
aBG.Style: = TTileBackStyle(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
Ungültig wird;
Ende;
Prozedur TForm1.Button1Click(Sender: TObject);
beginnen
Wenn OpenDialog1.Execute dann
beginnen
Image1.Picture.LoadFromFile(OpenDialog1.filename);
aBG.Picture: = Image1.Picture;
Ungültig wird;
Ende;
Ende;
Ende.









Ein Hintergrund-Maler-Klasse


Ein Hintergrund-Maler-Klasse : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Haben Sie sich jemals gewünscht, um eine Bitmap gekachelt zu zeichnen? zentriert? gestreckt? Verwenden Sie diese Klasse
Hier ist eine Klasse, die fand ich schon vor langer Zeit von einer dieser Speicher Quellen, unterlag ihr einzige Zweck ist es, den Hintergrund eines Fensters mit einem bestimmten Bild zu zeichnen (Sie können ihre Verwendung durch Erweitern Tgraphic Nachkommen wie Tjpegpicture, JPeg in der Uses-Clausel; hinzufügen TGifImage, fügen Sie Anders Melanders Gif; etc.)
Einheit Bgpaint;
Schnittstelle
verwendet
Windows, Grafik, Klassen;
Typ
TTileBackStyle = (TbsNone, TbsPicCenter, TbsPicClip, TbsPicFit, TbsPicHeigth,
TbsPicStretch, TbsPicTile, TbsPicWidth);
TTileBack = Class (TPersistent)
Private
FPicture: TPicture;
FStyle: TTileBackStyle;
FOnChange: TNotifyEvent;
Verfahren SetStyle (const Value: TTileBackStyle);
Procedure SetOnChange (const Value: TNotifyEvent);
Procedure SetPicture (const Value: TPicture);
öffentliche
Konstruktor erstellen;
Destruktor Destroy; außer Kraft setzen;
Prozedur Assign(Source: TPersistent); außer Kraft setzen;
Empty-Funktion: Boolean;
Verfahren Draw (const Leinwand: TCanvas; const ARect: TRect);
OnChange Eigenschaft: TNotifyEvent lesen FOnChange schreiben SetOnChange;
veröffentlicht
Eigenschaft Bild: TPicture lesen FPicture schreiben SetPicture;
Eigenschaft Style: TTileBackStyle lesen FStyle schreiben SetStyle Standard TbsNone;
Ende;
Umsetzung
{TTileBack}
Prozedur TTileBack.Assign(Source: TPersistent);
beginnen
Wenn TTileBack dann ist
mit TTileBack(Source)-do
beginnen
Self.FStyle: = Stil;
Self.Picture:= Bild;
Ende
sonst
vererbt
Ende;
Konstruktor TTileBack.Create;
beginnen
FPicture: = TPicture.Create;
FStyle: = TbsNone;
Ende;
Destruktor TTileBack.Destroy;
beginnen
FPicture.Free;
geerbte Destroy;
Ende;
Procedure TTileBack.Draw (const Leinwand: TCanvas; const ARect: TRect);
var
Dest: TRect;
XPos, YPos, RWidth, RHeight: Integer;
PicRatio, ImageRatio: Double;
beginnen
Wenn leer, dann Ausfahrt;
RWidth: = ARect.Right - ARect.Left;
RHeight: = ARect.Bottom - ARect.Top;
XPos: = 0;
YPos: = 0;
RS Style von
TbsNone: Ausfahrt;
TbsPicClip:
Canvas.Draw (ARect.Left, ARect.Top, Picture.Graphic);
TbsPicCenter:
beginnen
XPos: = ARect.Left + (RWidth - Picture.Width) Div 2;
YPos: = ARect.Top + (RHeight - Picture.Height)div 2;
Canvas.Draw (XPos, YPos, Picture.Graphic);
Ende;
TbsPicFit:
beginnen
Wenn (FPicture.Width > 0) und (FPicture.Height > 0) dann
beginnen
PicRatio: = Picture.Height / Picture.Width;
ImageRatio: = RHeight / RWidth;
Wenn PicRatio > ImageRatio dann
beginnen
XPos: = Trunc(RHeight / PicRatio);
YPos: = RHeight;
Ende
sonst
beginnen
XPos: = RWidth;
YPos: = Trunc (RWidth * PicRatio);
Ende;
Ende;
Dest: = Rect (0,0, XPos, YPos);
OffsetRect (Dest, ARect.Left, ARect.Top);
Canvas.StretchDraw (Dest, Picture.Graphic);
Ende;
TbsPicHeigth:
beginnen
XPos: = Trunc (FPic Ture. Breite * (RHeight / Picture.Height));

YPos: = RHeight;
Dest: = Rect (0, 0, XPos, YPos);
OffsetRect (Dest, ARect.Left, ARect.Top);
Canvas.StretchDraw (Dest, FPicture.Graphic);
Ende;
TbsPicStretch:
Canvas.StretchDraw (ARect, Picture.Graphic);
TbsPicTile:
beginnen
XPos: = ARect.Left;
zwar XPos < ARect.Right tun
beginnen
YPos: = ARect.Top;
zwar YPos < ARect.Bottom tun
beginnen
Canvas.Draw (XPos, Ypos, Picture.Graphic);
YPos: = YPos + FPicture.Height;
Ende;
XPos: = XPos + Picture.Width;
Ende;
Ende;
TbsPicWidth:
beginnen
XPos: = RWidth;
YPos: = Trunc (RWidth * (Picture.Height/Picture.Width));
Dest: = Rect (0,0, XPos, YPos);
OffsetRect (Dest, ARect.Left, ARect.Top);
Canvas.StretchDraw (Dest, Picture.Graphic);
Ende;
Ende;
Ende;
Funktion TTileBack.Empty: Boolean;
beginnen
Ergebnis: = (Style = TbsNone) oder
((Stil in [TbsPicClip, TbsPicFit, TbsPicHeigth, TbsPicStretch, TbsPicTile, TbsPicWidth]) und
((Picture = Nil) oder (Picture.Graphic = null) oder (Picture.Graphic.Empty)))
Ende;
Procedure TTileBack.SetOnChange (const Value: TNotifyEvent);
beginnen
FOnChange: = Value;
FPicture.OnChange: = Value;
Ende;
Procedure TTileBack.SetPicture (const Value: TPicture);
beginnen
FPicture.Assign (Wert);
Ende;
Procedure TTileBack.SetStyle (const Value: TTileBackStyle);
beginnen
Wenn dann FStyle <> Wert
beginnen
FStyle: = Value;
Wenn Assigned(FOnChange) dann
FOnChange(Self);
Ende;
Ende;
Ende.
Hier ist eine schnelle und schmutzige Beispiel seiner Nutzung und Befugnisse:

Einheit bgpaintex1;
Schnittstelle
verwendet
Windows, Nachrichten, SysUtils, Klassen, Graphics, Steuerelemente, Formulare, Dialoge,
ExtCtrls, BgPaint, StdCtrls, JPeg;
Typ
TForm1 = class(TForm)
Image1: TImage;
ComboBox1: ComboBox den;
Button1: TButton;
OpenDialog1: TOpenDialog;
Prozedur FormCreate(Sender: TObject);
Prozedur FormPaint(Sender: TObject);
Prozedur ComboBox1Change(Sender: TObject);
Prozedur Button1Click(Sender: TObject);
Private
{Private Deklarationen}
öffentliche
{Public Deklarationen}
aBG: TTileBack;
Ende;
var
Form1: TForm1;
Umsetzung
TypInfo verwendet;
{$R *. DFM}
Prozedur TForm1.FormCreate(Sender: TObject);
Var i: TTileBackStyle;
beginnen
aBG: = TTileBack.Create;
aBG.Picture: = Image1.Picture;
aBG.Style: = TbsPicFit;
für i: = TbsNone TbsPicWidth do
beginnen
ComboBox1.Items.AddObject(GetEnumName(TypeInfo(TTileBackStyle), Integer(i)), TObject(i));
Ende;
Ende;
Prozedur TForm1.FormPaint(Sender: TObject);
beginnen
aBG.Draw (Leinwand, ClientRect);
Ende;
Prozedur TForm1.ComboBox1Change(Sender: TObject);
beginnen
aBG.Style: = TTileBackStyle(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
Ungültig wird;
Ende;
Prozedur TForm1.Button1Click(Sender: TObject);
beginnen
Wenn OpenDialog1.Execute dann
beginnen
Image1.Picture.LoadFromFile(OpenDialog1.filename);
aBG.Picture: = Image1.Picture;
Ungültig wird;
Ende;
Ende;
Ende.


Ein Hintergrund-Maler-Klasse

Ein Hintergrund-Maler-Klasse : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Ein Hintergrund-Maler-Klasse
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung