Potrzebny komponent TImageGrid

0

Siema.
Niestety jeszcze nie umiem pisać własnych komponentów więc proszę was o pomoc. Potrzebne mi coś co nazwałem TImageGrid, a to dlatego, że ma to być taki TStringGrid z tą różnicą, że komórki mają być typu TImage, a nie string. Taka siatka wielu obrazków zamiast dużej ilości Image-ów. Obrazki o specyficznych nazwach chcę ładować w pętli np tak:

for w:=0 to 16 do
 begin
 for k:=0 to 16 do
 siatka.Cells[k,w].Picture.LoadFromFile(inttostr(k)+'.'+inttostr(w)+'.bmp');
 end;

Tworzenie 256-u Image-ów (nawet dynamicznie) raczej nie wchodzi w grę.
Dla kogoś kto się na tym zna pewnie nie będzie wielkim problemem przerobienie w ten sposób TStringGrid-a. Z góry dzięki za pomoc.

0

A komponent TDrawGrid nie wystarczy?

0

A jak do tego załadować obrazki? Bo nie ma to czegoś takiego jak Cells[ACol:integer;ARow:integer]:TImage.

0

Coś takiego powinno wystarczyć

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; ARect: TRect; State: TGridDrawState);
var bmp:TBitmap;
begin
bmp:=TBitmap.Create;
ImageList1.GetBitmap(ARow, bmp);
DrawGrid1.Canvas.Draw(ARect.Left, ARect.Top, bmp);
bmp.Free;
end;
0

Dzięki, ale sorki, nie kumam. Jak w ten sposób do określonej komórki załadować określony plik bmp?

0
var Cells:array of array of integer;

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
    bmp:TBitmap;
begin
bmp:=TBitmap.Create;
SetLength(Cells, DrawGrid1.ColCount, DrawGrid1.RowCount);
for i:=0 to DrawGrid1.ColCount-1 do
  for j:=0 to DrawGrid1.RowCount-1 do
    begin
    bmp.LoadFromFile(inttostr(i)+'.'+inttostr(j)+'.bmp');
    Cells[i,j]:=ImageList1.AddMasked(bmp, clNone);
    end;
bmp.Free;
end;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; ARect: TRect; State: TGridDrawState);
var bmp:TBitmap;
begin
bmp:=TBitmap.Create;
ImageList1.GetBitmap(Cells[ACol, ARow], bmp);
DrawGrid1.Canvas.Draw(ARect.Left, ARect.Top, bmp);
bmp.Free;
end;

Pisane z głowy, ale ma szansę zadziałać.

0

Dzięki wielkie. Coś już działa. Obrazki są. Nie wiem czy o to mi chodziło, ale jakiś punkt zaczepienia jest. Thanx.

No niby jest OK, ale ja chyba jednak pomęczę jeszcze was o przerobienie tego TStringGrid-a bo, Szczawik, twój sposób jest trochę skomplikowany i dziwny (tak mi się zdaje). I z tego co rozumiem to obrazki są malowane na DrawGridzie podczas jego tworzenia (malowania się na formie). A co jak będę chciał jakiś obrazek zmienić, lub usunąć z pamięci i potem znów załadować (bo załadowanie 256-u obrazków na raz kazdy 300x300px zeżre cały mój RAM 128MB albo i jeszce więcej). I o to się rozchodzi.

0

Zawsze możesz ręcznie rysować wszystko po jakimś Canvas'ie. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1