Delphi - Рисование на холсте выбранной ячейки в сетке строк - возможно?

Я хочу рисовать на холсте ячейки в сетке строк. Это будет поверх изображения, предварительно загруженного в сетку строк.

What I ' ve got

В настоящее время вместо рисования поверх изображения я загружаю второе прозрачное изображение и затем рисую поверх ячейки. Это код, который я использую, и он работает.

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);

Это сработало с экстента, он нарисовал изображение в ячейке, однако изображение имело непрозрачный фон / холст, поэтому ячейка была белой с кружком на ней, изображение под ней не было видно. Я провел небольшое исследование, но не смог найти способ сделать холст изображения прозрачным. Джош

7
задан Josh Slade 5 March 2011 в 14:22
поделиться