Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.01.2011, 20:23
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
По умолчанию Помогите с stringgrid'ом

__кол-1___|___кол-2___|
____1,1___|____2,1_____|
____1,2___|____2,2_____|
____1,3___|____2,3_____|

Код:
if (1,2>1,1)and(1,2<2,1) then showmessage('dfgdegf');
if (1,3>1,2)and(1,3<2,2) then showmessage('dfgdegf');

и т.д.


ПОМОГИТЕ ПОЖАЛУЙСТА!!! Как это осуществить?
Ответить с цитированием
  #2  
Старый 05.01.2011, 20:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
if (StrToInt(StringGrid.Cells[1,2]) > StrToInt(StringGrid.Cells[1,1])) And
   (StrToInt(StringGrid.Cells[1,2]) < StrToInt(StringGrid.Cells[2,1]))
Then ShowMEssage('!!!');

второе усливие по аналогии.
Да, еще - если в ячейке будет значение, которое нельзя конвертировать в целое число, то будет ошибка.

А вообще, если таких сравнений очень много, то ужобнее будет сразу весь грид перевести в массив (отконвертировать) и уже работать с этим 2-мерным массивом.
Ответить с цитированием
  #3  
Старый 05.01.2011, 21:45
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
Печаль

Да)) В гриде много строк. Вот я делаю так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
BeginDate, EndDate: Tdatetime;
r: integer;

begin
for r:= 1 to StringGrid1.RowCount do
begin
if (stringgrid1.Cells[0, r]<>'')or(stringgrid1.Cells[1, r]<>'') then
  begin
  BeginDate:= StrToDate(Stringgrid1.Cells[0, r]);
  EndDate:= StrToDate(Stringgrid1.Cells[1, r]);

  if (StrToDate(StringGrid1.Cells[0,r+1])>BeginDate)and(StrToDate(StringGrid1.Cells[0,r+1])<EndDate) then
  showmessage(StringGrid1.Cells[0,r+1] + ' входит в период ' + ' от '+ DateToStr(BeginDate) + ' по ' + DateToStr(EndDate));

end;
end;
end;
Вроде всё работает, НО всё-же по окончанию выдает ощибку
Ответить с цитированием
  #4  
Старый 05.01.2011, 22:22
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
По умолчанию

ЧУВАКИ, ПОМОГИТЕ
Ответить с цитированием
  #5  
Старый 05.01.2011, 22:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

угу, ошибку выхода за границу списка (Index out of bounds).
Список начинается с 0 и идет до count-1. Цикл поправь.
Ответить с цитированием
  #6  
Старый 06.01.2011, 08:02
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
По умолчанию

Прабовал, не получаеться всё-равно, HELP!

Последний раз редактировалось vnutr, 06.01.2011 в 08:06.
Ответить с цитированием
  #7  
Старый 06.01.2011, 09:32
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

r+1 тоже не помешает на r заменить.

Присмотрелся, судя по алгоритму заменить не выйдет. Значит надо ловить конец списка. По типу:
Код:
if r = StringGrid1.RowCount- 1 then

Последний раз редактировалось TOJluK, 06.01.2011 в 09:35.
Ответить с цитированием
  #8  
Старый 06.01.2011, 11:46
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
По умолчанию

Т.е. Это где?
Ответить с цитированием
  #9  
Старый 06.01.2011, 17:04
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от vnutr
Т.е. Это где?
Где- то тут:

Код:
if r < StringGrid1.RowCount- 1 then
begin 
if  (StrToDate(StringGrid1.Cells[0,r+1])>BeginDate)and(StrToDate(StringGrid1.Cells[0,r+1])<EndDate) then
  showmessage(StringGrid1.Cells[0,r+1] + ' входит в период ' + ' от '+ DateToStr(BeginDate) + ' по ' + DateToStr(EndDate));
end
else
  ShowMessage('Конец списка');
Ответить с цитированием
  #10  
Старый 06.01.2011, 17:09
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
По умолчанию

TOJluK не работает всё равно
Я поместил это условее в мой цикл после ввода дат. И та же ошибка. Может я что-то не так делаю? Помоги, плизззз

Последний раз редактировалось vnutr, 06.01.2011 в 17:28.
Ответить с цитированием
  #11  
Старый 06.01.2011, 21:15
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
По умолчанию

ЛЛЛЛЮЮЮЮДДДДДДИИИИИИ!! Христом Богом прошу, кто-небудь мне поможет???
Ответить с цитированием
  #12  
Старый 08.01.2011, 19:38
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от vnutr
ЛЛЛЛЮЮЮЮДДДДДДИИИИИИ!! Христом Богом прошу, кто-небудь мне поможет???
Выложи исходник и входные данные- запустим (ну или процедуру которая сейчас имеется). Должно работать.
Ответить с цитированием
  #13  
Старый 08.01.2011, 21:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Так попробуйте:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
BeginDate, EndDate, WrkDate: TDate;
r: integer;

begin
for r:= 0 to StringGrid1.RowCount-2 do
begin
if (stringgrid1.Cells[0, r] <> '') and (stringgrid1.Cells[1, r] <> '') and (stringgrid1.Cells[0, r+1] <> '')
then begin
       BeginDate := StrToDate(Stringgrid1.Cells[0, r]);
       EndDate := StrToDate(Stringgrid1.Cells[1, r]);
       WrkDate := StrToDate(Stringgrid1.Cells[0, r+1]);
       if (WrkDate > BeginDate) and (WrkDate < EndDate) then
  showmessage(StringGrid1.Cells[0,r+1] + ' входит в период ' + ' от '+ DateToStr(BeginDate) + ' по ' + DateToStr(EndDate));
end;
end;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 10.01.2011, 13:39
vnutr vnutr вне форума
Прохожий
 
Регистрация: 05.01.2011
Сообщения: 14
Репутация: 10
По умолчанию

Всем ГРОМАДНОЕ спасибо. Заработало)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:08.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025