Site icon Обучение программированию с нуля

Delphi. Панель Additional. Компонент DrawGrid.

Компонент «DrawGrid» расположен на вкладке «Additional».

Этот компонент в основном подобен компоненту «StringGrid». Однако компонент « StringGrid » в иерархии компонентов является производным от «DrawGrid», добавляя к нему свойства «Cells» «Cols» «Rows» и «Objects».

Пример использования компонента DrawGrid

В качестве примера использования компонента создадим «DrawGrid» с тремя столбцами и четырьмя строками, закрасив фиксированные столбец и строку:

Подготовим шесть картинок (например, с именами 1.bmp, 2.bmp и т. д.), разместив их в папке с программой.

Настройку сетки будем осуществлять в обработчике события формы (установим высоту рядов в 60 пикселей):

procedure TForm1.FormCreate(Sender: Tobject);
var i:integer;
begin
for i:=1 to 3 do
self.DrawGrid1.RowHeights[i]:=60;
end;

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

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TgridDrawState);
var b:tbitmap; n:integer;
begin
b:= tbitmap.Create;//создаем компонент битмап
n:=ACol*10+ Arow;//создаём уникальное число, соответствующее координате ячейки (сочетанию номера ряда и колонки)
case n of
11:b.LoadFromFile(‘1.bmp’);//загружаем первую картинку в битмап
12:b.LoadFromFile(‘2.bmp’);//загружаем вторую картинку
13:b.LoadFromFile(‘3.bmp’);// …
21:b.LoadFromFile(‘4.bmp’);
22:b.LoadFromFile(‘5.bmp’);
23:b.LoadFromFile(‘6.bmp’);
end;

DrawGrid1.Canvas.StretchDraw(Rect,b);//в обработчик передаётся прямоугольник «Rect», координаты которого соответствуют текущей ячейке с номером [ACol, Arow]. Метод «StretchDraw» отрисовывает картинку, содержащуюся в битмапе «b», вписывая её в прямоугольник «Rect».

end;

Тогда после запуска программы получим:

Разместим на форме компоненте «Image».

Напишем код, позволяющий отображать в компоненте «Image» расположенную в ячейке картинку при клике мышью пе ячейке.

Для этого создадим обработчик события «onMouseDown» (это событие взято для примера. Можно было бы использовать и событие «onSelectCell»).

Код программы.

procedure TForm1.DrawGrid1MouseDown(Sender: TObject; Button: TmouseButton;
Shift: TShiftState; X, Y: Integer);
var col,row,n :integer; b:tbitmap; r:trect; //дополнительные переменные
begin

b:= tbitmap.Create;//создаём битмап
DrawGrid1.MouseToCell(x,y,col,row);//используем метод, позволяющий по координатам клика мыши определить номер ячейки [col,row]
n:=Col*10+ Row;
case n of
11:b.LoadFromFile(‘1.bmp’);
12:b.LoadFromFile(‘2.bmp’);
13:b.LoadFromFile(‘3.bmp’);
21:b.LoadFromFile(‘4.bmp’);
22:b.LoadFromFile(‘5.bmp’);
23:b.LoadFromFile(‘6.bmp’);
end;

Image1.Width:=b.Width;//задаём ширину для «Image1», равную ширине битмапа
Image1.Height:=b.Height;//аналогично по высоте

Image1.Canvas.Draw(0,0,b);//отрисовываем картинку на канве «Image1»
end;

Посмотрим в коротком видео, что у нас получилось:

https://programlife.ru/wp-content/uploads/2021/08/Video-03-08-2021-094947.mp4

Замечание. Иногда полезной оказывается функция, возвращающая объект типа » TRect » по номеру ячейки
[ ACol, ARow ]:

function CellRect (ACol, ARow: Longint): TRect;

***

Просмотреть запись