Link to home
Start Free TrialLog in
Avatar of mathes
mathes

asked on

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?



 
Avatar of mathes
mathes

ASKER

Of course I could use 64 Timage coponents, butthis approach is neither elegant nor efficient. I feel there should be something better...
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
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
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
ASKER CERTIFIED SOLUTION
Avatar of Igor UL7AAjr
Igor UL7AAjr
Flag of Kazakhstan image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial