Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
//&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
15-1326538361
xayam
2012-01-14 14:52
2012.06.03
База данных совместимости чернил/картриджей/принтеров


15-1328455559
uzer
2012-02-05 19:25
2012.06.03
Вопрос по N-кодеру/валкодеру и программы к нему


2-1327905510
Nikitos
2012-01-30 10:38
2012.06.03
Как вставить картинку в reportf?


15-1328291750
Dimka Maslov
2012-02-03 21:55
2012.06.03
Про синхронизацию


2-1327579533
TiBog
2012-01-26 16:05
2012.06.03
выскакиващие подсказки по значению точки в графике tchart





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский