1 unit ATTabs_Picture; 2 3 {$ifdef fpc} 4 {$mode objfpc}{$H+} 5 {$endif} 6 7 interface 8 9 uses 10 Classes, SysUtils, 11 {$ifndef fpc} 12 PngImage, 13 {$endif} 14 Graphics; 15 16 type 17 TPngPic = 18 {$ifdef fpc} 19 TPortableNetworkGraphic; 20 {$else} 21 TPngImage; 22 {$endif} 23 24 type 25 { TATTabsPicture } 26 27 TATTabsPicture = class 28 private 29 FPic: TPngPic; 30 FFileName: string; 31 FWidth: integer; 32 FHeight: integer; 33 public 34 constructor Create; 35 destructor Destroy; override; 36 procedure LoadFromFile(const AFileName: string); 37 procedure LoadFromPicture(APic: TPngPic); 38 property Width: integer read FWidth; 39 property Height: integer read FHeight; 40 procedure Draw(C: TCanvas; X, Y: integer); 41 procedure DrawSized(C: TCanvas; X, Y, AWidth: integer); 42 end; 43 44 implementation 45 46 { TATTabsPicture } 47 48 constructor TATTabsPicture.Create; 49 begin 50 FPic:= TPngPic.Create; 51 end; 52 53 destructor TATTabsPicture.Destroy; 54 begin 55 FreeAndNil(FPic); 56 inherited; 57 end; 58 59 procedure TATTabsPicture.LoadFromFile(const AFileName: string); 60 begin 61 if not FileExists(AFileName) then exit; 62 FFileName:= AFileName; 63 FPic.LoadFromFile(AFileName); 64 FPic.Transparent:= true; 65 FWidth:= FPic.Width; 66 FHeight:= FPic.Height; 67 end; 68 69 procedure TATTabsPicture.LoadFromPicture(APic: TPngPic); 70 begin 71 FFileName:= ''; 72 FPic.Assign(APic); 73 FPic.Transparent:= true; 74 FWidth:= FPic.Width; 75 FHeight:= FPic.Height; 76 end; 77 78 procedure TATTabsPicture.Draw(C: TCanvas; X, Y: integer); 79 begin 80 C.Draw(X, Y, FPic); 81 end; 82 83 procedure TATTabsPicture.DrawSized(C: TCanvas; X, Y, AWidth: integer); 84 var 85 NDiv, NMod, i: integer; 86 begin 87 NDiv:= AWidth div FWidth; 88 NMod:= AWidth mod FWidth; 89 90 for i:= 0 to NDiv-1 do 91 C.Draw(X+i*FWidth, Y, FPic); 92 93 if NMod>0 then 94 C.StretchDraw( 95 Rect(X+NDiv*FWidth, Y, X+AWidth, Y+FHeight), 96 FPic); 97 end; 98 99 end. 100 101