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

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

Ищу подходящий компонент: матрица, квадраты [D7]


whoim ©   (2012-01-26 19:39:00) 

Нужен компонент, представляющий визуально из себя матрицу некоего размера. Ячейки - квадратные. От них нужно только уметь менять цвет и реагировать на клик, также нужно уметь обращаться к ним по индексу (создавать массив данных исходя и цвета ячейки). Например, белый=0, зеленый=1. Меняем цвет по клику мыши, например, обработав его программно. Как проще? Генерировать TImage?


whoim   (2012-01-26 21:23:00) [1]

так работает)
procedure TForm1.DrawGrid1Click(Sender: TObject);
begin
data[DrawGrid1.Row, DrawGrid1.Col] := NOT data[DrawGrid1.Row, DrawGrid1.Col];
DrawGrid1.Repaint;
Memo1.Lines.Add(IntToStr(DrawGrid1.Col)+'/'+IntToStr(DrawGrid1.Row)+'='+BoolToStr(data[DrawGrid1.Row, DrawGrid1.Col]));
end;

procedure TForm1.FormResize(Sender: TObject);
begin
DrawGrid1.DefaultColWidth := round((DrawGrid1.Width - 70) / DrawGrid1.ColCount);
DrawGrid1.DefaultRowHeight := round((DrawGrid1.Height - 30) / DrawGrid1.RowCount);
end;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
//Íàðèñóåì çàãîëîâîêè ñòðîê è ñòîëáöîâ
with Sender as TDrawGrid, Canvas do
 begin
 if (ARow = 0) and (ACol 0) then
   TextRect(Rect, Rect.Left+1, Rect.Top, 'C'+IntToStr(ACol));
 if (ACol = 0) and (ARow 0) then
   TextRect(Rect, Rect.Left+1, Rect.Top, 'A'+IntToStr(ARow));
end;
//îòîáðàçèì ìàññèâ íóæíûì öâåòîì
if (ACol 0) and (ARow 0) then
 begin
 if data[ARow, ACol]
   then
   DrawGrid1.Canvas.Brush.Color:=clGreen
   else
   DrawGrid1.Canvas.Brush.Color:=clYellow;

 DrawGrid1.Canvas.FillRect(DrawGrid1.CellRect(ACol, ARow));
 end;
end;


Dimka Maslov   (2012-01-26 21:20:00) [2]


>
> Жирно как-то.

Если кнопки без handle, то не жирно.


whoim   (2012-01-26 21:17:00) [3]

Нашел ошибку )


whoim   (2012-01-26 21:16:00) [4]

Огромное спасибо! Задавал вопрос пока ставился дельфи, лет пять уже его не трогал ))

Заюзал TDrawGrid, начал писать. Возникли вопросы ))
Я храню нужное мне состояние в массиве
var
 Form1: TForm1;
 data: Array[1..16,1..48] of Boolean;


По клику мыши изменяю его
procedure TForm1.DrawGrid1Click(Sender: TObject);
begin
data[DrawGrid1.Row, DrawGrid1.Col] := NOT data[DrawGrid1.Row, DrawGrid1.Col];
Memo1.Lines.Add(IntToStr(DrawGrid1.Col)+'/'+IntToStr(DrawGrid1.Row)+'='+BoolToStr(data[DrawGrid1.Row, DrawGrid1.Col]));
end;


И хочу отрисовывать все ячейки
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
//Нарисем заголовоки строк и столбцов
with Sender as TDrawGrid, Canvas do
 begin
 if (ARow = 0) and (ACol <> 0) then
   TextRect(Rect, Rect.Left+1, Rect.Top, 'C'+IntToStr(ACol));
 if (ACol = 0) and (ARow <> 0) then
   TextRect(Rect, Rect.Left+1, Rect.Top, 'A'+IntToStr(ARow));
end;
//отобразим массив нужным цветом
if data[DrawGrid1.Row, DrawGrid1.Col]
 then
 DrawGrid1.Canvas.Brush.Color:=clGreen
 else
 DrawGrid1.Canvas.Brush.Color:=clYellow;

DrawGrid1.Canvas.FillRect(DrawGrid1 .CellRect(DrawGrid1.Col,DrawGrid1.Row));
end;


Однако пристарте формы отрисовывается только ячейка [1,1] и при кликанье - только фокусная, остальные становятся белыми. Как мне правильно отрисовывать все ячейки?


Inovet   (2012-01-26 19:52:00) [5]

> [3] Dimka Maslov ©   (26.01.12 19:46)
> Кнопок на форму накидать?

Жирно как-то.


Dimka Maslov   (2012-01-26 19:46:00) [6]

Кнопок на форму накидать?


Inovet   (2012-01-26 19:43:00) [7]

Так нарисуй сетку по массиву в OnPaint хоть прямо на канве формы, лови клики, сохраняй изменения в массив.


Ega23   (2012-01-26 19:42:00) [8]

1. TDrawGrid
2. TStringGrid
3. TPaintBox

Я бы (возможно!) выбрал третье, с полностью своей отрисовкой.


Наверх

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