Форум: "Начинающим";
Текущий архив: 2012.06.03;
Скачать: [xml.tar.bz2];
ВнизИщу подходящий компонент: матрица, квадраты Найти похожие ветки
← →
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
//Íàðèñóåì çàãîëîâîêè ñòðîê è ñòîëáöîâ
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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.06.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c