Har du noen gang ønsket å male et bitmap flislagt? sentrert? strukket? bruke denne classHere er en klasse fant jeg for lenge siden fra en av de tapte til minne kilder, er dens eneste formål å male bakgrunnen av et vindu ved hjelp av et gitt bilde (du kan utvide bruken ved hjelp tgraphic etterkommere som tjpegpicture, legge JPeg i bruk klausulen, TGifImage, legger Anders Melanders gif, etc.) enhet bgpaint; interfaceuses Windows, grafikk, kurs -typen TTileBackStyle = (tbsNone, tbsPicCenter, tbsPicClip, tbsPicFit, tbsPicHeigth, tbsPicStretch, tbsPicTile, tbsPicWidth); TTileBack = klasse (TPersistent) private FPicture: tBildeinnstilling; FStyle: TTileBackStyle; FOnChange: TNotifyEvent; Prosedyren SetStyle (konst Verdi: TTileBackStyle); Prosedyren SetOnChange (konst Verdi: TNotifyEvent); Prosedyren SetPicture (konst Verdi: tBildeinnstilling); offentlig konstruktør Opprett; destructor Destroy; styre; Prosedyren tildele (Kilde: TPersistent); styre; funksjon Empty: Boolean; Prosedyren Draw (konst Lerret: TCanvas; konst ARect: TRect); Eiendommen OnChange: TNotifyEvent lese FOnChange skrive SetOnChange; publisert eiendom Bilde: tBildeinnstilling lese FPicture skrive SetPicture; Eiendommen Stil: TTileBackStyle lese FStyle skrive SetStyle standard tbsNone; enden, implementering {TTileBack} prosedyre TTileBack.Assign (Kilde: TPersistent); begynne dersom kilde TTileBack deretter med TTileBack (Kilde) gjør begynne Self.FStyle: = stil; Self.Picture: = Picture; ende annet inheritedend, konstruktør TTileBack.Create, begynner FPicture: = TPicture.Create; FStyle: = tbsNone; ende; destructor TTileBack.Destroy, begynner FPicture.Free; arvet Destroy; ende; prosedyre TTileBack.Draw (konst Lerret: TCanvas; konst ARect: TRect); Var Mål: TRect; XPOS, YPos, RWidth, RHeight: Integer; PicRatio, ImageRatio: Double, begynne hvis Tøm deretter Avslutt; RWidth: = ARect.Right - ARect.Left; RHeight: = ARect.Bottom- ARect.Top; XPOS: = 0; YPos: = 0; Ved Stil av tbsNone: Exit; tbsPicClip: Canvas.Draw (ARect.Left, ARect.Top, Picture.Graphic); tbsPicCenter: begynne XPOS: = ARect.Left + (RWidth - Picture.Width) div 2; YPos: = ARect.Top + (RHeight- Picture.Height) div 2; Canvas.Draw (XPOS, YPos, Picture.Graphic); slutt; tbsPicFit: begynne if (FPicture.Width > 0) og (FPicture.Height > 0), og start PicRatio: = Picture.Height /Picture.Width; ImageRatio: = RHeight /RWidth; hvis PicRatio > ImageRatio deretter begynne XPOS: = AVKORT (RHeight /PicRatio); YPos: = RHeight; ende ellers begynner XPOS: = RWidth; YPos: = AVKORT (RWidth * PicRatio); slutt; slutt; Mål: = Rect (0,0, XPOS, YPos); OffsetRect (Dest, ARect.Left, ARect.Top); Canvas.StretchDraw (Dest, Picture.Graphic); slutt; tbsPicHeigth: begynne XPOS: = AVKORT (FPicture.Width * (RHeight /Picture.Height)); YPos: = RHeight; Mål: = rect (0, 0, XPOS, YPos); OffsetRect (Dest, ARect.Left, ARect.Top); Canvas.StretchDraw (Dest, FPicture.Graphic); slutt; tbsPicStretch: Canvas.StretchDraw (ARect, Picture.Graphic); tbsPicTile: begynne XPOS: = ARect.Left; mens XPOS < ARect.Right ikke begynne YPos: = ARect.Top; mens YPos < ARect.Bottom gjøre begynne Canvas.Draw (XPOS, Ypos, Picture.Graphic); YPos: = YPos + FPicture.Height; slutt; XPOS: = XPOS + Picture.Width; slutt; slutt; tbsPicWidth: begynne XPOS: = RWidth; YPos: = AVKORT (RWidth * (Picture.Height /Picture.Width)); Mål: = Rect (0,0, XPOS, YPos); OffsetRect (Dest, ARect.Left, ARect.Top); Canvas.StretchDraw (Dest, Picture.Graphic); slutt; end, end, funksjon TTileBack.Empty: Boolean, begynner Resultat: = (Style = tbsNone) eller ((stil i [tbsPicClip, tbsPicFit, tbsPicHeigth, tbsPicStretch, tbsPicTile, tbsPicWidth]) og ((Picture = null) eller (Bilde. grafisk = null) eller (Picture.Graphic.Empty))) end; prosedyre TTileBack.SetOnChange (konst Verdi: TNotifyEvent), begynner FOnChange: = verdi; FPicture.OnChange: = verdi; ende; prosedyre TTileBack.SetPicture (konst Verdi: tBildeinnstilling), begynner FPicture.Assign (verdi); end; prosedyre TTileBack.SetStyle (konst Verdi: TTileBackStyle); begynne hvis FStyle < > Verdi deretter begynne FStyle: = verdi; hvis Assigned (FOnChange) så FOnChange (Selv); end, end, end.Here er en rask og skitne eksempel på bruken og krefter: enhet bgpaintex1; interfaceuses Windows, Meldinger, SysUtils, klasser, Grafikk, Kontroller, Skjemaer, dialoger, ExtCtrls, bgPaint, StdCtrls, JPEG -typen TForm1 = klasse (TForm) Bilde1: TImage; ComboBox1: TComboBox; Button1: TButton; OpenDialog1: TOpenDialog; Prosedyren FormCreate (Sender: TObject); Prosedyren FormPaint (Sender: TObject); Prosedyren ComboBox1Change (Sender: TObject); Prosedyren Button1Click (Sender: TObject); private {felleserklæringer} offentlige {offentlige erklæringer} ABG: TTileBack; enden, Var Form1: TForm1; implementationuses TypInfo, {$ R * .DFM} prosedyre TForm1.FormCreate (Sender: TObject); Var jeg: TTileBackStyle, begynner ABG: = TTileBack.Create; aBG.Picture: = Image1.Picture; aBG.Style: = tbsPicFit; for i: = tbsNone til tbsPicWidth ikke begynne ComboBox1.Items.AddObject (GetEnumName (TypeInfo (TTileBackStyle), Integer (i)), TObject (i)); end, end, prosedyre TForm1.FormPaint (Sender: TObject), begynner aBG.Draw (lerret, ClientRect); end; prosedyre TForm1.ComboBox1Change (Sender: TObject), begynner aBG.Style: = TTileBackStyle (ComboBox1.Items.Objects [ ,,,0],ComboBox1.ItemIndex]); Ugyldig; end; prosedyre TForm1.Button1Click (Sender: TObject); begynne hvis OpenDialog1.Execute deretter begynne Image1.Picture.LoadFromFile (OpenDialog1.FileName); aBG.Picture: = Image1.Picture; ugyldig; end, end,. slutten
En bakgrunn maleren class
Previous:Å gjøre en siste filene menu