Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.06.03;
Скачать: CL | DM;

Вниз

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

 
whoim ©   (2012-01-26 19:39) [0]

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


 
Ega23 ©   (2012-01-26 19:42) [1]

1. TDrawGrid
2. TStringGrid
3. TPaintBox

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


 
Inovet ©   (2012-01-26 19:43) [2]

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


 
Dimka Maslov ©   (2012-01-26 19:46) [3]

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


 
Inovet ©   (2012-01-26 19:52) [4]

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

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


 
whoim ©   (2012-01-26 21:16) [5]

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

Заюзал 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] и при кликанье - только фокусная, остальные становятся белыми. Как мне правильно отрисовывать все ячейки?


 
whoim ©   (2012-01-26 21:17) [6]

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


 
Dimka Maslov ©   (2012-01-26 21:20) [7]


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

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


 
whoim ©   (2012-01-26 21:23) [8]

так работает)
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
//&#205;&#224;&#240;&#232;&#241;&#243;&#229;&#236; &#231;&#224;&#227;&#238;&#235;&#238;&#226;&#238;&#234;&#232; &#241;&#242;&#240;&#238;&#234; &#232; &#241;&#242;&#238;&#235;&#225;&#246;&#238;&#226;
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;
//&#238;&#242;&#238;&#225;&#240;&#224;&#231;&#232;&#236; &#236;&#224;&#241;&#241;&#232;&#226; &#237;&#243;&#230;&#237;&#251;&#236; &#246;&#226;&#229;&#242;&#238;&#236;
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;



Страницы: 1 вся ветка

Текущий архив: 2012.06.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1327946153
Rorschach
2012-01-30 21:55
2012.06.03
Портирование С++ кода на Паскаль


15-1328292260
Антоха_М
2012-02-03 22:04
2012.06.03
Принцип работы БД


15-1328089911
QAZ
2012-02-01 13:51
2012.06.03
Поиск замена в Delphi7


15-1327609803
Юрий
2012-01-27 00:30
2012.06.03
С днем рождения ! 27 января 2012 пятница


15-1328041805
Юрий
2012-02-01 00:30
2012.06.03
С днем рождения ! 1 февраля 2012 среда