Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по работе с DrawGrid


Cosinus ©   (2002-10-15 12:55:00) 

Я уже задавал этот вопрос, но возможно, я непонятно выразился. Не подскажите, как реализовать рисование в DrawGrid, где в качестве единичного пикселя выступает одна ячейка таблицы(с сохранением результатов,например, после прокрутки "туда-сюда")?
Заранее благодарен, Владислав.


reonid   (2002-10-15 14:12:00) [1]

unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids;

type
TForm1 = class(TForm)
SGrid: TStringGrid;
procedure SGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure SGridMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
procedure SwitchCell(ACol, ARow: Integer);
procedure ChangeSelection(Sel: TGridRect);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.SwitchCell(ACol, ARow: Integer);
begin
if SGrid.Cells[ACol, ARow] = "1" then
SGrid.Cells[ACol, ARow] := "0"
else
SGrid.Cells[ACol, ARow] := "1";
end;

procedure TForm1.ChangeSelection(Sel: TGridRect);
var i, j: Integer;
begin
for i := Sel.Left to Sel.Right do
for j := Sel.Top to Sel.Bottom do
SwitchCell(i, j);
end;

procedure TForm1.SGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with Sender as TStringGrid do
begin

if Cells[ACol, ARow] = "1" then
begin
if not (gdSelected in State) then
Canvas.Brush.Color := clRed
else
Canvas.Brush.Color := clSilver
end
else
begin
if not (gdSelected in State) then
Canvas.Brush.Color := clWhite
else
Canvas.Brush.Color := clMaroon
end;

Canvas.FillRect(Rect);
end;
end;

procedure TForm1.SGridMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with Sender as TStringGrid do
begin
ChangeSelection(Selection);
Selection := TGridRect(Rect(-1, -1, -1, -1));
end;
end;

end.


cosinus   (2002-10-15 13:24:00) [2]

>Best Before 2024
Спасибо, я читал...


Best Before 2024   (2002-10-15 13:23:00) [3]

Закрашивате их как хотите в событии TDrawGrid.OnDrawCell
(почитайте help, помогает)


cosinus   (2002-10-15 13:14:00) [4]

Постоянно Canvasить что ли?


cosinus   (2002-10-15 13:13:00) [5]

Насчет массива то понятно, это по-моему, решение, напрашивающееся само собой, а как их закрашивать то, чтобы они оставались на экране закрашенными, даже если я прокручу Scrool?


Best Before 2024   (2002-10-15 13:03:00) [6]

Завести массив по числу ячеек и в зависимости от Array[Row , Col]
закрашивать ячейки Grid"a в OnDrawCell


Наверх

Титульная страница Поиск, карта сайта Написать письмо