Solved

drawgrid component

Posted on 2001-06-27
5
234 Views
Last Modified: 2010-04-04
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
Comment
Question by:mathes
5 Comments
 

Author Comment

by:mathes
ID: 6232977
Of course I could use 64 Timage coponents, butthis approach is neither elegant nor efficient. I feel there should be something better...
0
 
LVL 3

Expert Comment

by:nnbbb09
ID: 6233203
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
 
LVL 3

Expert Comment

by:nnbbb09
ID: 6233243
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
 
LVL 5

Expert Comment

by:alanwhincup
ID: 6233254
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
 
LVL 9

Accepted Solution

by:
ITugay earned 100 total points
ID: 6234222
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

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now