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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2011, 19:17   #1
Death_moroZ
 
Регистрация: 28.09.2010
Сообщений: 9
По умолчанию StringGrid проблема

Здравствуйте у меня проблема с компонентом StringGrid

Я пишу программу напоминалку и чтобы было удобно храню все данные в этом компоненте, через него же я и проверяю наступило ли событие:

Код:
procedure TForm1.tmr1Timer(Sender: TObject);
var
  tp,td:string;
  i,j,temp:Integer;
begin
  tp:=TimeToStr(Time);
  td:=DateToStr(Date);
  for i:=0 to index-1 do
  if (strngrd1.Cells[1,i]=tp) and (strngrd1.Cells[2,i]=td) then 
  begin
      ShowMessage(strngrd1.Cells[3,i]);
  end;
end;
По клику на строку мне надо подставить 4 поля над строками в Гриде И внести туда значения ячеек для редактирования задания:

Код:
procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (gdFocused in State) then
  begin
    dtp3.Date:=StrToDate(strngrd1.Cells[1,ARow]);
    dtp4.Date:=StrToDate(strngrd1.Cells[2,ARow]);
  end;
end;
Но получается что таймер тоже кликает а цифры (номер строки) нет и получается программа пытается ничему подставить ячейки и занести информацию в них из ничего, что приводит к ошибкам.
Есть ли способ обойти это?

Последний раз редактировалось Death_moroZ; 19.01.2011 в 23:32.
Death_moroZ вне форума Ответить с цитированием
Старый 19.01.2011, 21:48   #2
Vervolf
Пользователь
 
Аватар для Vervolf
 
Регистрация: 14.01.2011
Сообщений: 97
По умолчанию

ну, на время ввода данных, отключай таймер просто.. после ввода -включай.
Vervolf вне форума Ответить с цитированием
Старый 19.01.2011, 23:28   #3
Death_moroZ
 
Регистрация: 28.09.2010
Сообщений: 9
По умолчанию

Ну дак проблема не во время ввода, всегда, ведь таймер как бы кликает по гриду, а во время клика мы узнаём строку которую мы редактировали, и получается фигня

Последний раз редактировалось Death_moroZ; 19.01.2011 в 23:29. Причина: Дописал
Death_moroZ вне форума Ответить с цитированием
Старый 20.01.2011, 10:33   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

интересный вопрос а зачем во время рисования
Код:
procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
вы считываете текущую ячейку во внешнюю (по отношению к данной процедуре).
Код:
begin
  if (gdFocused in State) then
  begin
    dtp3.Date:=StrToDate(strngrd1.Cells[1,ARow]);
    dtp4.Date:=StrToDate(strngrd1.Cells[2,ARow]);
  end;
кажется наконец-то понял!
Цитата:
По клику на строку мне надо подставить 4 поля над строками в Гриде
для этого есть и другие события окромя OnDrawCell. OnDblClick к примеру.

Цитата:
Но получается что таймер тоже кликает а цифры (номер строки)
Он не кликает он записывает туда новые данные а программа честно пытается их вывести(нарисовать). при рисовании неизбежно (OnDrawCell)
Цитата:
программа пытается ничему подставить ячейки и занести информацию в них из ничего, что приводит к ошибкам.
А вы не думая тащите эти данные в поля редактирования.(OnDrawCell).
Цитата:
Есть ли способ обойти это?
Смотри выше (есть и другие события).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.01.2011 в 10:49.
evg_m вне форума Ответить с цитированием
Старый 20.01.2011, 13:07   #5
Death_moroZ
 
Регистрация: 28.09.2010
Сообщений: 9
По умолчанию

Ы я нуб как в OnDblClick ARow? И так далее
Death_moroZ вне форума Ответить с цитированием
Старый 20.01.2011, 14:49   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
  focusrow, focuscol: integer;
begin
  focusrow:=StringGrid1.Row;
  focuscol:=StringGrid1.Col;
  showmeesage(StringGrid1.Cells[focusrow, focuscol]);
end;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.01.2011, 19:43   #7
Death_moroZ
 
Регистрация: 28.09.2010
Сообщений: 9
По умолчанию

Спасибо помогло
Death_moroZ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с StringGrid HixoH Общие вопросы C/C++ 1 14.12.2010 19:13
Проблема с шириной столбцов в StringGrid Риндера Компоненты Delphi 13 09.11.2010 18:11
Проблема в STRINGGRID !!! WeRsUs Помощь студентам 4 28.10.2010 21:35
проблема в StringGrid kta87 Общие вопросы Delphi 3 12.06.2010 14:42
Проблема выделения ячейки в StringGrid Velh Компоненты Delphi 5 23.10.2009 00:20