diff --git a/applications/draw_test/filecache.pas b/applications/draw_test/filecache.pas new file mode 100644 index 000000000..1e3f5ee5c --- /dev/null +++ b/applications/draw_test/filecache.pas @@ -0,0 +1,89 @@ +unit FileCache; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, Graphics; + +type + TFileCacheItem = record + start: longint; + length: longint; + number: integer; + end; + + { TFileCache } + + TFileCache = class + private + cache_stream: TFileStream; + FCount: integer; + FCacheList: array of TFileCacheItem; + public + constructor Create(AFileName: string); + destructor Destroy; override; + + property Count: integer read FCount; + function GetData(Number: integer; var Bitmap: TPortableNetworkGraphic): boolean; + procedure Add(Number: integer; Bitmap: TPortableNetworkGraphic); + procedure Clear; + end; + +implementation + +{ TFileCache } + +constructor TFileCache.Create(AFileName: string); +begin + FCount := 0; + cache_stream := TFileStream.Create(AFileName, fmCreate); +end; + +destructor TFileCache.Destroy; +begin + Clear; + cache_stream.Free; + + inherited Destroy; +end; + +function TFileCache.GetData(Number: integer; var Bitmap: TPortableNetworkGraphic): boolean; +var + i: integer; +begin + for i := 0 to FCount - 1 do + if FCacheList[i].number = Number then + begin + cache_stream.Position := FCacheList[i].start; + Bitmap.LoadFromStream(cache_stream, FCacheList[i].length); + end; +end; + +procedure TFileCache.Add(Number: integer; Bitmap: TPortableNetworkGraphic); +begin + if Bitmap = nil then + exit; + + Inc(FCount); + SetLength(FCacheList, FCount); + + FCacheList[FCount - 1].number := Number; + + //move to the end of the stream + cache_stream.Position := cache_stream.Size; + + FCacheList[FCount - 1].start := cache_stream.Position; + Bitmap.SaveToStream(cache_stream); + FCacheList[FCount - 1].length := cache_stream.Position - FCacheList[FCount - 1].start; +end; + +procedure TFileCache.Clear; +begin + FCount := 0; + SetLength(FCacheList, FCount); +end; + +end. + diff --git a/applications/draw_test/images/0001.png b/applications/draw_test/images/0001.png new file mode 100644 index 000000000..becdbdc77 Binary files /dev/null and b/applications/draw_test/images/0001.png differ diff --git a/applications/draw_test/images/0002.png b/applications/draw_test/images/0002.png new file mode 100644 index 000000000..d39c8449b Binary files /dev/null and b/applications/draw_test/images/0002.png differ diff --git a/applications/draw_test/images/0003.png b/applications/draw_test/images/0003.png new file mode 100644 index 000000000..840479a1f Binary files /dev/null and b/applications/draw_test/images/0003.png differ diff --git a/applications/draw_test/images/0004.png b/applications/draw_test/images/0004.png new file mode 100644 index 000000000..585b40790 Binary files /dev/null and b/applications/draw_test/images/0004.png differ diff --git a/applications/draw_test/images/0005.png b/applications/draw_test/images/0005.png new file mode 100644 index 000000000..e737e2009 Binary files /dev/null and b/applications/draw_test/images/0005.png differ diff --git a/applications/draw_test/images/0006.png b/applications/draw_test/images/0006.png new file mode 100644 index 000000000..1f4d798bd Binary files /dev/null and b/applications/draw_test/images/0006.png differ diff --git a/applications/draw_test/images/0007.png b/applications/draw_test/images/0007.png new file mode 100644 index 000000000..2356404d5 Binary files /dev/null and b/applications/draw_test/images/0007.png differ diff --git a/applications/draw_test/images/0008.png b/applications/draw_test/images/0008.png new file mode 100644 index 000000000..37ebecde4 Binary files /dev/null and b/applications/draw_test/images/0008.png differ diff --git a/applications/draw_test/images/0009.png b/applications/draw_test/images/0009.png new file mode 100644 index 000000000..dde096022 Binary files /dev/null and b/applications/draw_test/images/0009.png differ diff --git a/applications/draw_test/images/0010.png b/applications/draw_test/images/0010.png new file mode 100644 index 000000000..b95882f5c Binary files /dev/null and b/applications/draw_test/images/0010.png differ diff --git a/applications/draw_test/images/0011.png b/applications/draw_test/images/0011.png new file mode 100644 index 000000000..b66892244 Binary files /dev/null and b/applications/draw_test/images/0011.png differ diff --git a/applications/draw_test/images/0012.png b/applications/draw_test/images/0012.png new file mode 100644 index 000000000..08f99a8c6 Binary files /dev/null and b/applications/draw_test/images/0012.png differ diff --git a/applications/draw_test/images/0013.png b/applications/draw_test/images/0013.png new file mode 100644 index 000000000..bae2842c1 Binary files /dev/null and b/applications/draw_test/images/0013.png differ diff --git a/applications/draw_test/images/0014.png b/applications/draw_test/images/0014.png new file mode 100644 index 000000000..69765621f Binary files /dev/null and b/applications/draw_test/images/0014.png differ diff --git a/applications/draw_test/images/0015.png b/applications/draw_test/images/0015.png new file mode 100644 index 000000000..67f7046ea Binary files /dev/null and b/applications/draw_test/images/0015.png differ diff --git a/applications/draw_test/images/0016.png b/applications/draw_test/images/0016.png new file mode 100644 index 000000000..343899cc6 Binary files /dev/null and b/applications/draw_test/images/0016.png differ diff --git a/applications/draw_test/images/0017.png b/applications/draw_test/images/0017.png new file mode 100644 index 000000000..d1e9eb6e3 Binary files /dev/null and b/applications/draw_test/images/0017.png differ diff --git a/applications/draw_test/images/0018.png b/applications/draw_test/images/0018.png new file mode 100644 index 000000000..0f9e4c8a8 Binary files /dev/null and b/applications/draw_test/images/0018.png differ diff --git a/applications/draw_test/images/0019.png b/applications/draw_test/images/0019.png new file mode 100644 index 000000000..7134aabc4 Binary files /dev/null and b/applications/draw_test/images/0019.png differ diff --git a/applications/draw_test/images/0020.png b/applications/draw_test/images/0020.png new file mode 100644 index 000000000..27bd4605f Binary files /dev/null and b/applications/draw_test/images/0020.png differ diff --git a/applications/draw_test/images/0021.png b/applications/draw_test/images/0021.png new file mode 100644 index 000000000..cadc76211 Binary files /dev/null and b/applications/draw_test/images/0021.png differ diff --git a/applications/draw_test/images/0022.png b/applications/draw_test/images/0022.png new file mode 100644 index 000000000..2e946dfcf Binary files /dev/null and b/applications/draw_test/images/0022.png differ diff --git a/applications/draw_test/images/0023.png b/applications/draw_test/images/0023.png new file mode 100644 index 000000000..b9abf01da Binary files /dev/null and b/applications/draw_test/images/0023.png differ diff --git a/applications/draw_test/images_50/0001.png b/applications/draw_test/images_50/0001.png new file mode 100644 index 000000000..31df41aea Binary files /dev/null and b/applications/draw_test/images_50/0001.png differ diff --git a/applications/draw_test/images_50/0002.png b/applications/draw_test/images_50/0002.png new file mode 100644 index 000000000..35abb2d15 Binary files /dev/null and b/applications/draw_test/images_50/0002.png differ diff --git a/applications/draw_test/images_50/0003.png b/applications/draw_test/images_50/0003.png new file mode 100644 index 000000000..6ca4398bf Binary files /dev/null and b/applications/draw_test/images_50/0003.png differ diff --git a/applications/draw_test/images_50/0004.png b/applications/draw_test/images_50/0004.png new file mode 100644 index 000000000..72e2fddfc Binary files /dev/null and b/applications/draw_test/images_50/0004.png differ diff --git a/applications/draw_test/images_50/0005.png b/applications/draw_test/images_50/0005.png new file mode 100644 index 000000000..e274a0820 Binary files /dev/null and b/applications/draw_test/images_50/0005.png differ diff --git a/applications/draw_test/images_50/0006.png b/applications/draw_test/images_50/0006.png new file mode 100644 index 000000000..cec014017 Binary files /dev/null and b/applications/draw_test/images_50/0006.png differ diff --git a/applications/draw_test/images_50/0007.png b/applications/draw_test/images_50/0007.png new file mode 100644 index 000000000..b2e657aed Binary files /dev/null and b/applications/draw_test/images_50/0007.png differ diff --git a/applications/draw_test/images_50/0008.png b/applications/draw_test/images_50/0008.png new file mode 100644 index 000000000..820f6ae8f Binary files /dev/null and b/applications/draw_test/images_50/0008.png differ diff --git a/applications/draw_test/images_50/0009.png b/applications/draw_test/images_50/0009.png new file mode 100644 index 000000000..377cd421d Binary files /dev/null and b/applications/draw_test/images_50/0009.png differ diff --git a/applications/draw_test/images_50/0010.png b/applications/draw_test/images_50/0010.png new file mode 100644 index 000000000..ba6d59a11 Binary files /dev/null and b/applications/draw_test/images_50/0010.png differ diff --git a/applications/draw_test/images_50/0011.png b/applications/draw_test/images_50/0011.png new file mode 100644 index 000000000..0a95fa80f Binary files /dev/null and b/applications/draw_test/images_50/0011.png differ diff --git a/applications/draw_test/images_50/0012.png b/applications/draw_test/images_50/0012.png new file mode 100644 index 000000000..29f85010f Binary files /dev/null and b/applications/draw_test/images_50/0012.png differ diff --git a/applications/draw_test/images_50/0013.png b/applications/draw_test/images_50/0013.png new file mode 100644 index 000000000..bc7c73ceb Binary files /dev/null and b/applications/draw_test/images_50/0013.png differ diff --git a/applications/draw_test/images_50/0014.png b/applications/draw_test/images_50/0014.png new file mode 100644 index 000000000..ca88ee420 Binary files /dev/null and b/applications/draw_test/images_50/0014.png differ diff --git a/applications/draw_test/images_50/0015.png b/applications/draw_test/images_50/0015.png new file mode 100644 index 000000000..32909046a Binary files /dev/null and b/applications/draw_test/images_50/0015.png differ diff --git a/applications/draw_test/images_50/0016.png b/applications/draw_test/images_50/0016.png new file mode 100644 index 000000000..9fe694e81 Binary files /dev/null and b/applications/draw_test/images_50/0016.png differ diff --git a/applications/draw_test/images_50/0017.png b/applications/draw_test/images_50/0017.png new file mode 100644 index 000000000..e8563ca3e Binary files /dev/null and b/applications/draw_test/images_50/0017.png differ diff --git a/applications/draw_test/images_50/0018.png b/applications/draw_test/images_50/0018.png new file mode 100644 index 000000000..1b9d8c06b Binary files /dev/null and b/applications/draw_test/images_50/0018.png differ diff --git a/applications/draw_test/images_50/0019.png b/applications/draw_test/images_50/0019.png new file mode 100644 index 000000000..cfdc00b30 Binary files /dev/null and b/applications/draw_test/images_50/0019.png differ diff --git a/applications/draw_test/images_50/0020.png b/applications/draw_test/images_50/0020.png new file mode 100644 index 000000000..f69f9ef0f Binary files /dev/null and b/applications/draw_test/images_50/0020.png differ diff --git a/applications/draw_test/images_50/0021.png b/applications/draw_test/images_50/0021.png new file mode 100644 index 000000000..782ef5734 Binary files /dev/null and b/applications/draw_test/images_50/0021.png differ diff --git a/applications/draw_test/images_50/0022.png b/applications/draw_test/images_50/0022.png new file mode 100644 index 000000000..a674bacbb Binary files /dev/null and b/applications/draw_test/images_50/0022.png differ diff --git a/applications/draw_test/images_50/0023.png b/applications/draw_test/images_50/0023.png new file mode 100644 index 000000000..f9244b914 Binary files /dev/null and b/applications/draw_test/images_50/0023.png differ diff --git a/applications/draw_test/mydrawingcontrol.pas b/applications/draw_test/mydrawingcontrol.pas new file mode 100644 index 000000000..173941c21 --- /dev/null +++ b/applications/draw_test/mydrawingcontrol.pas @@ -0,0 +1,39 @@ +unit MyDrawingControl; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, Controls, Graphics, LCLType; + +type + + { TMyDrawingControl } + + TMyDrawingControl = class(TCustomControl) + private + FBitmap: TPortableNetworkGraphic; + public + property Bitmap: TPortableNetworkGraphic read FBitmap write FBitmap; + procedure EraseBackground(DC: HDC); override; + procedure Paint; override; + end; + +implementation + +procedure TMyDrawingControl.EraseBackground(DC: HDC); +begin + //Uncomment this to enable default background erasing + //inherited EraseBackground(DC); +end; + +procedure TMyDrawingControl.Paint; +begin + if Assigned(Bitmap) then + Canvas.Draw(0, 0, Bitmap); + + inherited Paint; +end; + +end. diff --git a/applications/draw_test/project1.ico b/applications/draw_test/project1.ico new file mode 100644 index 000000000..0341321b5 Binary files /dev/null and b/applications/draw_test/project1.ico differ diff --git a/applications/draw_test/project1.lpi b/applications/draw_test/project1.lpi new file mode 100644 index 000000000..2c68883ad --- /dev/null +++ b/applications/draw_test/project1.lpi @@ -0,0 +1,104 @@ + + + + + + + + + + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="1"> + <Item1 Name="Default" Default="True"/> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="1"> + <Item1> + <PackageName Value="LCL"/> + </Item1> + </RequiredPackages> + <Units Count="4"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + </Unit0> + <Unit1> + <Filename Value="unit1.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="Unit1"/> + </Unit1> + <Unit2> + <Filename Value="filecache.pas"/> + <IsPartOfProject Value="True"/> + <UnitName Value="FileCache"/> + </Unit2> + <Unit3> + <Filename Value="mydrawingcontrol.pas"/> + <IsPartOfProject Value="True"/> + <UnitName Value="MyDrawingControl"/> + </Unit3> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <OtherUnitFiles Value="..\.."/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <UseHeaptrc Value="True"/> + </Debugging> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/applications/draw_test/project1.lpr b/applications/draw_test/project1.lpr new file mode 100644 index 000000000..53e090307 --- /dev/null +++ b/applications/draw_test/project1.lpr @@ -0,0 +1,21 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, { this includes the LCL widgetset} + Forms, Unit1, MyDrawingControl, FileCache + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/applications/draw_test/project1.res b/applications/draw_test/project1.res new file mode 100644 index 000000000..7c6cf3e4b Binary files /dev/null and b/applications/draw_test/project1.res differ diff --git a/applications/draw_test/unit1.lfm b/applications/draw_test/unit1.lfm new file mode 100644 index 000000000..335d2e8b8 --- /dev/null +++ b/applications/draw_test/unit1.lfm @@ -0,0 +1,121 @@ +object Form1: TForm1 + Left = 342 + Height = 555 + Top = 135 + Width = 569 + Caption = 'Form1' + ClientHeight = 535 + ClientWidth = 569 + Menu = MainMenu1 + OnCreate = FormCreate + OnDestroy = FormDestroy + LCLVersion = '0.9.31' + object PageControl1: TPageControl + Left = 0 + Height = 535 + Top = 0 + Width = 362 + ActivePage = GraphicControlTabSheet + Align = alClient + TabIndex = 2 + TabOrder = 0 + object PaintBoxTabSheet: TTabSheet + Caption = 'TPaintBox' + ClientHeight = 509 + ClientWidth = 354 + object PaintBox1: TPaintBox + Left = 0 + Height = 509 + Top = 0 + Width = 354 + Align = alClient + OnPaint = PaintBox1Paint + end + end + object ImageTabSheet: TTabSheet + Caption = 'TImage' + ClientHeight = 509 + ClientWidth = 354 + object Image1: TImage + Left = 0 + Height = 509 + Top = 0 + Width = 354 + Align = alClient + end + end + object GraphicControlTabSheet: TTabSheet + Caption = 'TGraphicControl' + end + end + object ListView1: TListView + Left = 367 + Height = 535 + Top = 0 + Width = 202 + Align = alRight + Columns = < + item + Caption = 'Method' + Width = 100 + end + item + AutoSize = True + Caption = 'FPS' + Width = 98 + end> + TabOrder = 1 + ViewStyle = vsReport + end + object Splitter1: TSplitter + Left = 362 + Height = 535 + Top = 0 + Width = 5 + Align = alRight + ResizeAnchor = akRight + end + object MainMenu1: TMainMenu + left = 447 + top = 88 + object MenuItem1: TMenuItem + Caption = 'Cache' + object MenuItem9: TMenuItem + Caption = 'Use cache' + object mnuHD50: TMenuItem + Caption = '50% HD (940x540)' + Checked = True + RadioItem = True + OnClick = mnuHD50Click + end + object mnuHD: TMenuItem + Caption = 'HD (1920x1050)' + RadioItem = True + OnClick = mnuHDClick + end + end + end + object MenuItem2: TMenuItem + Caption = 'Run tests' + object mnuTPaintBox: TMenuItem + Caption = 'TPaintbox' + OnClick = mnuTPaintBoxClick + end + object mnuTImage: TMenuItem + Caption = 'TImage' + OnClick = mnuTImageClick + end + object mnuTGraphicControl: TMenuItem + Caption = 'TGraphicControl' + OnClick = mnuTGraphicControlClick + end + object MenuItem7: TMenuItem + Caption = '-' + end + object MenuItem5: TMenuItem + Caption = 'Run all' + OnClick = MenuItem5Click + end + end + end +end diff --git a/applications/draw_test/unit1.pas b/applications/draw_test/unit1.pas new file mode 100644 index 000000000..43f14dac0 --- /dev/null +++ b/applications/draw_test/unit1.pas @@ -0,0 +1,235 @@ +unit Unit1; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, + ExtCtrls, ComCtrls, Menus, FileCache, MyDrawingControl; + +type + + { TForm1 } + + TForm1 = class(TForm) + Image1: TImage; + ListView1: TListView; + MainMenu1: TMainMenu; + MenuItem1: TMenuItem; + mnuHD50: TMenuItem; + mnuHD: TMenuItem; + MenuItem2: TMenuItem; + mnuTPaintBox: TMenuItem; + mnuTImage: TMenuItem; + MenuItem5: TMenuItem; + mnuTGraphicControl: TMenuItem; + MenuItem7: TMenuItem; + MenuItem9: TMenuItem; + PageControl1: TPageControl; + PaintBox1: TPaintBox; + ImageTabSheet: TTabSheet; + PaintBoxTabSheet: TTabSheet; + Splitter1: TSplitter; + GraphicControlTabSheet: TTabSheet; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure MenuItem5Click(Sender: TObject); + procedure mnuHD50Click(Sender: TObject); + procedure mnuHDClick(Sender: TObject); + procedure mnuTGraphicControlClick(Sender: TObject); + procedure mnuTImageClick(Sender: TObject); + procedure mnuTPaintBoxClick(Sender: TObject); + procedure PaintBox1Paint(Sender: TObject); + private + { private declarations } + FileCache50: TFileCache; + FileCache100: TFileCache; + + img: TMyDrawingControl; + procedure AddTestToListBox(AName: string; FPS: double); + public + { public declarations } + end; + +var + Form1: TForm1; + png: TPortableNetworkGraphic; + +implementation + +{$R *.lfm} + +uses + GraphType; + +{ TForm1 } + +procedure TForm1.FormCreate(Sender: TObject); +var + i: integer; +begin + FileCache50 := TFileCache.Create('.\images50.cache'); + FileCache100 := TFileCache.Create('.\images100.cache'); + + png := TPortableNetworkGraphic.Create; + + //load all images to the caches + for i := 1 to 23 do + begin + png.LoadFromFile(Format('.\images\%.4d.png', [i])); + FileCache100.Add(i, png); + png.LoadFromFile(Format('.\images_50\%.4d.png', [i])); + FileCache50.Add(i, png); + end; + + //PaintBoxTabSheet.DoubleBuffered := True; + //ImageTabSheet.DoubleBuffered := True; + //GraphicControlTabSheet.DoubleBuffered := True; + + img := TMyDrawingControl.Create(nil); + img.Parent := GraphicControlTabSheet; + img.Align := alClient; +end; + +procedure TForm1.FormDestroy(Sender: TObject); +begin + FileCache50.Free; + FileCache100.Free; + + png.Free; + img.Free; +end; + +procedure TForm1.MenuItem5Click(Sender: TObject); +begin + mnuTPaintBoxClick(nil); + mnuTImageClick(nil); + mnuTGraphicControlClick(nil); +end; + +procedure TForm1.mnuHD50Click(Sender: TObject); +begin + mnuHD50.Checked := True; +end; + +procedure TForm1.mnuHDClick(Sender: TObject); +begin + mnuHD.Checked := True; +end; + +procedure TForm1.mnuTGraphicControlClick(Sender: TObject); +var + s: TDateTime; + i: integer; + j: integer; + f: boolean; +begin + PageControl1.ActivePage := GraphicControlTabSheet; + + s := Now; + for j := 1 to 10 do + for i := 1 to 23 do + begin + if mnuHD50.Checked then + f := FileCache50.GetData(i, png) + else + f := FileCache100.GetData(i, png); + + if f then + begin + img.Bitmap := png; + img.Invalidate; + Application.ProcessMessages; + end; + end; + + AddTestToListBox('TGraphicControl', 230 / ((Now - s) * 24 * 3600)); +end; + +procedure TForm1.mnuTImageClick(Sender: TObject); +var + s: TDateTime; + i: integer; + j: integer; + f: boolean; +begin + PageControl1.ActivePage := ImageTabSheet; + + s := Now; + for j := 1 to 10 do + for i := 1 to 23 do + begin + if mnuHD50.Checked then + f := FileCache50.GetData(i, png) + else + f := FileCache100.GetData(i, png); + + if f then + begin + Image1.Picture.Bitmap.LoadFromRawImage(png.RawImage, False); + Application.ProcessMessages; + end; + end; + + AddTestToListBox('TImage', 230 / ((Now - s) * 24 * 3600)); +end; + +procedure TForm1.mnuTPaintBoxClick(Sender: TObject); +var + s: TDateTime; + i: integer; + j: integer; + f: Boolean; +begin + PageControl1.ActivePage := PaintBoxTabSheet; + + s := Now; + for j := 1 to 10 do + for i := 1 to 23 do + begin + if mnuHD50.Checked then + f := FileCache50.GetData(i, png) + else + f := FileCache100.GetData(i, png); + + if f then + begin + PaintBox1.Invalidate; + Application.ProcessMessages; + end; + end; + + AddTestToListBox('TPaintBox', 230 / ((Now - s) * 24 * 3600)); +end; + +procedure TForm1.PaintBox1Paint(Sender: TObject); +begin + PaintBox1.Canvas.Draw(0, 0, png); +end; + +procedure TForm1.AddTestToListBox(AName: string; FPS: double); +var + i: integer; + found: boolean = False; +begin + //first check if test is already added earlier + for i := 0 to ListView1.Items.Count - 1 do + begin + if ListView1.Items[i].Caption = AName then + begin + found := True; + ListView1.Items[i].SubItems.Clear; + ListView1.Items[i].SubItems.Add(FloatToStr(FPS)); + end; + end; + + if not found then + with ListView1.Items.Add do + begin + Caption := AName; + SubItems.Add(FloatToStr(FPS)); + end; +end; + +end.