Я хочу нарисовать на холсте ячейку в сетке строк.Это будет поверх изображения, предварительно загруженного в сетку строк.
То, что у меня есть
В настоящее время вместо рисования поверх изображения я загружаю второе прозрачное изображениеа затем рисовать на вершине клетки.Это код, который я использую, и он работает.
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);
Это сработалодействительно рисовал изображение в ячейке, однако изображение имело непрозрачный фон / холст, поэтому ячейка была белой с кружком на ней, изображение под ней не было видно.Я провел небольшое исследование, но не смог найти способ сделать холст изображения прозрачным.
Последнее, что я могу придумать, это написать алгоритм для определения местоположения верхней левой точки текущей точки.ячейку, а затем рисуем прямо на холст оттуда, но это может быть сложным и создавать проблемы при перерисовке строки.
Может кто-нибудь увидеть способ обойти мою проблему?
Заранее спасибо, Джош