TRectangle Bitmap Instead Of TImage For Delphi XE5 Firemonkey On Android And IOS

Delphi XE5 Firemonkey Fast Rectangle BitmapI found this tip over on a Portuguese Delphi Forum and the idea is to use a TRectangle with a bitmap fill instead of a TImage. According to the forum poster a TRectangle is much much lighter resources wise than a TImage and you can accomplish almost the same thing with a TRectangle bitmap fill brush. The drawback to using a TRectangle is that there are only three different display options (wmTile, wmTileOriginal, and wmTileStretch). wmTile will tile the bitmap brush regardless the size of the TRectangle. wmTileOriginal will just show the bitmap once regardless of the TRectangle size. And finally wmTileStretch will stretch the bitmap to the height and width of the rectangle. TImage has a few other different settings for formatting the display of a bitmap but for most uses the TRectangle bitmap fill is probably enough. You could use this idea with the Progress Bar Asynchronous Image Loader instead of it’s current TImage to make it lighter. Here is some sample code that shows how to load a TRectangle Fill with a bitmap using code:

Head over and read the full forum post which also contains some other Firemonkey tips.

Have Delphi Firemonkey questions? Ask and get answers on StackOverflow.

3 Responses to TRectangle Bitmap Instead Of TImage For Delphi XE5 Firemonkey On Android And IOS

  1. Pingback: Ten Tips And Tricks For Building Games With Delphi XE5 And XE6 On Android And IOS | Delphi XE5 Firemonkey, Delphi Android, Delphi IOS

  2. LIONEL SIERO says:

    Your article is great, so i used a lot of TRectangle in my programs
    But now, width Upgrading to DELPHI XE8, i have some issue

    What do you thinks ?

    • Admin says:

      This is a workaround we used to address an issue like this. It backs up the image on the first paint and then loads it again in a timer. There has to be a better way? Whether it works or not in your instance I’m not sure:

      constructor TImageCacheLayout.Create(aOwner: TComponent);

      fImgIssueTimer := TTimer.create(nil);
      fImgIssueTimer.interval := 10;
      fImgIssueTimer.OnTimer := IssueTimerProc;


      procedure TImageCacheLayout.IssueTimerProc(Sender: TObject);
      fImgIssueTimer.enabled := False;

      procedure TImageCacheLayout.Paint;
      if fImgIssueTimer.enabled then
      fBitmapIssueStream := Tmemorystream.create;
      fBitmapIssueStream.position := 0;

Leave a Reply

Show Buttons
Hide Buttons
Read previous post:
Post And Handle Internal Messages With Delphi XE5 Firemonkey On Android And Windows

Fran├žois Piette has a code snippet up where he shows how to build an object messaging system for Windows and...