Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 246
  • Last Modified:

drawgrid component

Hi experts,

I want to display 64 bitmaps in a 8x8 grid. Now I am searching for the right component. I am thinking of using a DrawGrid, but I am not sure if this is the right idea.

Unfortunately there is no valid statement like

drawgrid1.row1.col1.LoadFromFile:="c:\mybitmap1.bmp";
drawgrid1.row1.col2.LoadFromFile:="c:\mybitmap2.bmp";
....
drawgrid1.row8.col8.LoadFromFile:="c:\mybitmap64.bmp";


How would you solve this problem?



 
0
mathes
Asked:
mathes
1 Solution
 
mathesAuthor Commented:
Of course I could use 64 Timage coponents, butthis approach is neither elegant nor efficient. I feel there should be something better...
0
 
nnbbb09Commented:
Hello,

If your images are the same size then you could try storing them in an imagelist. Then in the OnDrawCell event you could calculate an index and draw the appropriate image on the drawgrid. eg :

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  intIndex:integer;
  bmpTemp:TBitmap;
begin

  intIndex := (ACol * 8) + ARow; // calculate an index
  bmpTemp:=TBitmap.Create;
  try
    imagelist1.getbitmap(intIndex,bmpTemp); // get bitmap from imagelist
    DrawGrid1.Canvas.StretchDraw(Rect,bmpTemp); // draw the bitmap to fill the contents of the cell
  finally
    bmpTemp.Free; // free up temporary bitmap afterwards
  end;
end;

To prevent stretching of the bitmaps just set the DefaultRowHeight and DefaultColumnWidth to the same dimensions of your bitmaps.

Hope this helps

Jo
0
 
nnbbb09Commented:
Hello again...

To make that event handler a bit more generic you should change the formula for the index to read   intIndex := (ACol * DrawGrid1.ColCount) + ARow;


Jo
0
 
alanwhincupCommented:
You could try this:

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Bmp : TBitmap;
begin
  Bmp := TBitmap.Create;
  Bmp.LoadFromFile('c:\mybitmap' + IntToStr(((ARow + 1) * (ACol + 1))) + '.bmp');
  DrawGrid1.Canvas.Draw(Rect.Left, Rect.Top, Bmp);
  Bmp.Free;
end;

Cheers,

Alan
0
 
ITugayCommented:
Hi mathes,

in addition, you can keep bitmaps in resource file and load images from there, then it will be always together with your project.

-----
Igor.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now