Я хочу рисовать на холсте ячейки в сетке строк. Это будет поверх изображения, предварительно загруженного в сетку строк.
В настоящее время вместо рисования поверх изображения я загружаю второе прозрачное изображение и затем рисую поверх ячейки. Это код, который я использую, и он работает.
procedure TfrmCavern.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
index : integer;
I : integer;
begin
// Calculate the corresponding linear index
index := LinearIndexOf(ARow, ACol);
//Draw image referenced to cell
StringGrid.Canvas.StretchDraw(Rect, CellDetails[index].Images.Picture.Graphic);
//if player present draw corresponding player image
for I := 0 to frmWelcome.NoofPlayers - 1 do
begin
if index = Players[I].pIndex then StringGrid.Canvas.StretchDraw(Rect,Players[I].UserImage.Picture.Graphic);
end;
end;
end;
Сначала процедура рисует изображение, указанное в ячейке. Если присутствует «игрок», он вытянет фишку игрока сверху. Поскольку изображение «фигуры игрока» является прозрачным изображением .PNG, исходное изображение внизу все еще видно.
Недостатком этого метода является то, что «элемент игрока» находится в заданной позиции в пределах ячейка из-за постоянного изображения. Я хочу иметь возможность рисовать «фигуру игрока» в другом месте внутри ячейки в зависимости от того, какая ячейка выбрана. У меня около 200 ячеек, поэтому я не очень хочу вручную создавать столько изображений с разными позициями.
Я пробовал рисовать прямо на холсте строковой сетки в процедуре drawcell, но похоже, что это ссылается на всю строковую сетку, а не на текущую ячейку, которая была нарисована.
StringGrid.Canvas.ellipse(10,10,50,50);
Я смотрел, но не похоже чтобы иметь возможность ссылаться на холст текущей ячейки - я полагаю, его не существует?
Следующее, что я попробовал, было нарисовать временное изображение, а затем нарисовать изображение в ячейке.
TempImage.Canvas.Ellipse(10,10,50,50);
StringGrid.Canvas.StretchDraw(Rect, TempImage.Picture.Graphic);
Это сработало с экстента, он нарисовал изображение в ячейке, однако изображение имело непрозрачный фон / холст, поэтому ячейка была белой с кружком на ней, изображение под ней не было видно. Я провел небольшое исследование, но не смог найти способ сделать холст изображения прозрачным. Джош