|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.05.2011, 09:46 | #1 |
Пользователь
Регистрация: 07.03.2011
Сообщений: 19
|
StringGrid(событие) + Array + Memo ?
Доброе время суток господа, нужна помощь.
Такая ситуация. Есть: 1) Динамический массив A1:array of array of integer; SetLength(A1,a+1,a+1); 2) Компонент Memo 3) компонент StringGrid Такая ситуация, нужно что бы при изменении данных StringGrid изменялся автоматически массив и все это автоматически менялось и в Memo без использования дополнительных кнопок. Я знаю как это сделать с дополнительной кнопкой, тоесть изменили StringGrid - нажали кнопку - изменился и массив и Мемо Я использую событие OnSetEditText procedure TForm2.StringGrid1SetEditText(Sende r: TObject; ACol, ARow: Integer; const Value: String); begin z:=stringgrid1.Cells[ACol,Arow]; // считывает значение ACol1:=StringGrid1.Col; // координаты ARow1:=StringGrid1.Row; tt:=1; // идентификатор для процедуры end; ------------------------------------------------------- Процедура которую вызывает кнопка procedure Q2; begin A2[ARow1][ACol1]:=strtoint(z); Form2.Memo1.Clear; for i:=0 to a do begin for j:=0 to a do Form2.memo1.Text:=Form2.memo1.text+ inttostr(A2[i][j])+' '; Form2.memo1.Text:=Form2.memo1.text+ #13#10; end; end; При попытки в событие OnSetEditText добавить ссылку на процедуру пишет ошибку.
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
|
03.05.2011, 11:35 | #2 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Воспроизведение ситуации, описанной автором ни к каким ошибкам не приводит.
Кнопка здесь тоже не нужна. Все выполняется так как и задумано: при вводе цифр в таблицу появляется текст в мемо, а массив заполняется значениями. Ссылка на процедуру Q2 в обработчике OnSetEditText тоже работает исправно. А что очень сложно написать какая ошибка и в какой момент происходит? "Гадайте люди, чего у меня твориться." |
03.05.2011, 12:13 | #3 |
Пользователь
Регистрация: 07.03.2011
Сообщений: 19
|
Это если процедуру Q2; втавить в событие, ошибку выдает при попытке редактировать ячейку
procedure TForm2.StringGrid1SetEditText(Sende r: TObject; ACol, ARow: Integer; const Value: String); begin z:=stringgrid1.Cells[ACol,Arow]; ACol1:=StringGrid1.Col; ARow1:=StringGrid1.Row; Q2; end; При проверке координат на вывод в Мемо ARow1, ACol1 и значения z все привльно выводит, но почему-то работать не хотит когда динамический массив в событие всовуем
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
Последний раз редактировалось Tenebor; 03.05.2011 в 12:27. |
03.05.2011, 12:29 | #4 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Процедура Q2 ни в чем не виновата.
А ошибка происходит при преобразовании числа в строку: Код:
И другой причины быть не может. Текст ошибки об это говорит недвусмысленно. Может в строку z пробел затесался, который не столь заметен. Последний раз редактировалось Прик; 03.05.2011 в 12:40. |
03.05.2011, 12:45 | #5 | |
Пользователь
Регистрация: 07.03.2011
Сообщений: 19
|
Цитата:
procedure Q2; begin //EE:=strtoint(z); Я проверил через другую переменную, Z непричем A2[ARow1][ACol1]:=strtoint(z); Form2.Memo1.Clear; for i:=0 to a do begin for j:=0 to a do Form2.memo1.Text:=Form2.memo1.text+ inttostr(A2[i][j])+' '; Form2.memo1.Text:=Form2.memo1.text+ #13#10; end; form2.memo1.Text:=form2.memo1.text+ #13#10+'***'+'A2= '+inttostr(ARow1)+' '+inttostr(ACol1)+' '; end; procedure TForm2.Button5Click(Sender: TObject); begin if tt=1 then Q2; memo1.Text:=memo1.text+z+' '+inttostr(ARow1)+'//'+inttostr(ACol1); tt:=0;end; procedure TForm2.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); begin z:=stringgrid1.Cells[ACol,Arow]; ACol1:=StringGrid1.Col; ARow1:=StringGrid1.Row; tt:=1; //Q2; ---- вот с этим ошибка идет end;
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
|
|
03.05.2011, 12:47 | #6 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Ну, хорошо, сбросьте сюда проект, посмотрят люди в чем проблема. У меня нет никаких ошибок.
|
03.05.2011, 12:57 | #7 |
Пользователь
Регистрация: 07.03.2011
Сообщений: 19
|
http://x.uch.net/dl.php?dl_id=17321&...484e09697940b9
редактировать StringGrid одним щелчком мышки масив запоняется цифрой 5 просто для просмотра роботы
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
|
03.05.2011, 13:13 | #8 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Надо просто проверить переменную z на "пустоту" и вызывать Q2 если в z не пустая строка:
Код:
|
03.05.2011, 13:24 | #9 |
Пользователь
Регистрация: 07.03.2011
Сообщений: 19
|
Точно, спасибо огромное, а можна в двух словах обьяснить зачем эта проверка, я понимаю что переменная не должна быть пустой, но она ведь и не пустая. Если бы гдето нормальное описание почитать об событиях
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
|
03.05.2011, 13:34 | #10 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
Когда в ячейке меняется изначальный 0 на другую цифру, то событие тоже срабатывает, но в этот момент другая вводимая цифра еще не "приехала" и значение в ячейке "пустая строка". Эту пустую строку мы и пытаемся преобразовать в число.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод из StringGrid в Memo | Grobovichok | Помощь студентам | 0 | 30.01.2011 14:37 |
memo в stringgrid | varelik | Общие вопросы Delphi | 1 | 04.05.2010 17:48 |
из Memo в StringGrid | Vladimir-888 | Общие вопросы Delphi | 3 | 17.04.2010 21:08 |
StringGrid и событие OnMouseMove | XTasy | Помощь студентам | 1 | 04.04.2009 16:02 |
C++ StringGrid событие "правый клик" | FW-TOT | Помощь студентам | 2 | 03.03.2009 19:17 |