Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2011, 09:46   #1
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 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 добавить ссылку на процедуру пишет ошибку.
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
Tenebor вне форума Ответить с цитированием
Старый 03.05.2011, 11:35   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Воспроизведение ситуации, описанной автором ни к каким ошибкам не приводит.
Кнопка здесь тоже не нужна. Все выполняется так как и задумано:
при вводе цифр в таблицу появляется текст в мемо, а массив заполняется значениями. Ссылка на процедуру Q2 в обработчике OnSetEditText тоже работает исправно.

А что очень сложно написать какая ошибка и в какой момент происходит?
"Гадайте люди, чего у меня твориться."
Прик вне форума Ответить с цитированием
Старый 03.05.2011, 12:13   #3
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 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.
Tenebor вне форума Ответить с цитированием
Старый 03.05.2011, 12:29   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Процедура Q2 ни в чем не виновата.
А ошибка происходит при преобразовании числа в строку:
Код:
  A2[ARow1][ACol1]:=strtoint(z);
Это означает что в переменной z находится не целое число или есть еще символы кроме цифр и знаков '+' / '-'.
И другой причины быть не может. Текст ошибки об это говорит недвусмысленно. Может в строку z пробел затесался, который не столь заметен.

Последний раз редактировалось Прик; 03.05.2011 в 12:40.
Прик вне форума Ответить с цитированием
Старый 03.05.2011, 12:45   #5
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 07.03.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Это означает что в переменной z находится не целое число или есть еще символы кроме цифр и знаков '+' / '-'.
не может быть, через кнопку работает без ошибок


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;
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
Tenebor вне форума Ответить с цитированием
Старый 03.05.2011, 12:47   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Ну, хорошо, сбросьте сюда проект, посмотрят люди в чем проблема. У меня нет никаких ошибок.
Прик вне форума Ответить с цитированием
Старый 03.05.2011, 12:57   #7
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 07.03.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
сбросьте сюда проект, посмотрят люди в чем проблема
http://x.uch.net/dl.php?dl_id=17321&...484e09697940b9

редактировать StringGrid одним щелчком мышки
масив запоняется цифрой 5 просто для просмотра роботы
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
Tenebor вне форума Ответить с цитированием
Старый 03.05.2011, 13:13   #8
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Надо просто проверить переменную z на "пустоту" и вызывать Q2 если в z не пустая строка:
Код:
  ...
  tt:=1;
  if z <> '' then Q2;
end;
Прик вне форума Ответить с цитированием
Старый 03.05.2011, 13:24   #9
Tenebor
Пользователь
 
Аватар для Tenebor
 
Регистрация: 07.03.2011
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Надо просто проверить переменную z на "пустоту" и вызывать Q2 если в z не пустая строка:
Код:
  ...
  tt:=1;
  if z <> '' then Q2;
end;
Точно, спасибо огромное, а можна в двух словах обьяснить зачем эта проверка, я понимаю что переменная не должна быть пустой, но она ведь и не пустая. Если бы гдето нормальное описание почитать об событиях
Меня не интересует, почему «нет», меня интересует, что нужно сделать для того, чтобы было «да»!
Tenebor вне форума Ответить с цитированием
Старый 03.05.2011, 13:34   #10
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Когда в ячейке меняется изначальный 0 на другую цифру, то событие тоже срабатывает, но в этот момент другая вводимая цифра еще не "приехала" и значение в ячейке "пустая строка". Эту пустую строку мы и пытаемся преобразовать в число.
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод из 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