![]() |
|
![]() ![]() ![]() |
|
docwar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 24.9.2006 Репутация: нет Всего: нет |
Привет! =)
У меня есть вот такой код:
Видно, что идет проверка: если сегодняшняя дата - дата из ДатаТаймПикера равна тексту из КомбоБокса и месяцы(сегодняшний и из ДТП) равны, то вызывается форма 3. Однако, нужно как-то сделать так, чтобы для одного j форма вызывалась один раз, т.е. один j - одно открытие формы. В моем коде вызов формы 3 будет идти бесконечно... Спасибо за внимание! Это сообщение отредактировал(а) docwar - 13.12.2006, 21:39 |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
А что вообще этот цикл делает?
В приведенном коде я не увидел собственно использования цикла... |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
Используй логический флаг. Если флаг false, то покажи форму и установи флаг в true. Следующий раз форма не отобразится.
|
|||
|
||||
codelord |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
docwar, как ты думаешь что получится у тебя если даты будут текущая 3,01,2007 и 31,12,2006 прошлая???
или хотя бы 1,12,2006 и 31,11,2006 ? в первом случае день -28 (д.б 3) месяц - 11 (д.б 1) и т.д. Или тебе так надо? по поводу вопроса, пробуем такое (опять таки если правильно понял). В Си есть такая штука static которая инициализируется один раз. вместо
такое
|
||||
|
|||||
docwar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 24.9.2006 Репутация: нет Всего: нет |
А как же for(j=1;...) Код обновлен - забыл в конце } поставить. =) anwe, можно примерчик? =) Работал с переменными, но получается, что для каждого j необходимо заводить новую переменную, что не понятно мне как осуществить, поскольку знаем только количество переменных. =) |
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 16 Всего: 39 |
static int Key = 1;
лучше объявить до начала цикла, т.е. после того как Key стал равен 0 условие выполняться не будет и соответственно форма вызываться тоже. |
|||
|
||||
docwar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 24.9.2006 Репутация: нет Всего: нет |
Вроде, все нормально должно быть. Ведь результат вычитания сравниваем с текстом КомбоБокса... По поводу вопроса этой темы: форма вызывается один раз, т.е. если одна из строк удовлетворяет условию Тек. дата-Данные из СГ=текст КомбоБокса, то форма вызывается один раз. НО! Она должна вызываться для всех строк, удовлетворяющих выше описанному условию... Как это проверил: ввел такие данные в таблицу: сегодняшняя дата, с.д.-1 день, с.д.-2 дня. В КомбоБокс ввел 1 день - вывелась форма. В КосбоБокс ввел 2 - ничего не произошло... |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Я просто не понял его (цикла) назначение: Ну бежим мы в цикле столько раз, сколько строчек в гриде, вызываем событие OnClick этого грида столько раз, сколько в нем строчек - это его основное назначение? Я просто не часто видел циклы, в которых ничего не зависит от переменной цикла. Обычно это какие-то математические итерационные вычисления - а тут явно логика, а переменная цикла нигде не участвует... Вот я и спросил, а что собственно этот цикл делает? Если нужно вызвать событие OnClick для каждой строчки грида - то тогда где смена строчки? А если только вызвать событие OnClick столько раз, сколько в гриде строчек, то тогда зачем дальше в цикле сравнение величин (которые по идее не меняются внутри цикла)... Или их меняет событие Onclick? |
|||
|
||||
docwar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 24.9.2006 Репутация: нет Всего: нет |
В цилке мы пробегаем по всем строкам и четвертому столбцу(третьему, если принимать во внимание нумерацию с 0) и вызываем метод StringGrid1Click, который копирует данные выделенной строки четвертого столбца в ДатаТаймПикер. А дальше просто вводим переменные DateDTPicker и DateDTPicker2, а потом проверка условия, которое уже расписывал...
=) |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Либо я просто не выспался, либо туплю, но в упор не вижу где меняется строка и берется 4-й столбец...
|
|||
|
||||
docwar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 24.9.2006 Репутация: нет Всего: нет |
нет. =) это я криво обьясняю. Мы выделяем все строки по очереди, а в ф. StringGrid1Click прописано, что текст из четвертого столбца выделенной строки копируется в ДатаТаймПикер. А строки меняются благодаря прибавлению значения j, максимальное число которого - количество строк СтрингГрида, начиная с первой(или второй, если считать по-человечески - с 1 =) ). |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Где меняется строка, я все равно не понял, но не суть.
Т.е. при наличии в гриде строки с необходимым условием (что-то там с датами) нам необходимо вывести форму на экран. Если форму необходимо вывести ДЛЯ КАЖДОГО СЛУЧАЯ СОВПАДЕНИЯ внутри цикла, то может проще вызвать ее методом ShowModal - форму вывели, сделали какое-то действие, закрыли, перешли к другой строчке Если форму необходимо вывести ПРИ ПЕРВОМ СОВПАДЕНИИ - то опять таки проще ее вывести модально, а потом выскочить из цикла - так как больше ее выводить не надо, использовав конструкция типа if (условие истино) { Form3->ShowModal(); break; } Если использовать такой код как есть - то первое же совпадение выведет форму на экран, и она там останется - так как метод Show сразу вернет управление в цикл, произойдет переход к другой строчке (а форма уже на экране) и при следующем совпадении условия - будет опять вызван метод Show (который ничего не сделает - форма уже на экране) и т.п. Я просто недопонимаю что нужно сделать, если в очередной строчке грида есть необходимые для выполнения условия данные - попросить у пользователя что-то сделать или вывести на экран информацию... |
|||
|
||||
docwar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 24.9.2006 Репутация: нет Всего: нет |
break не решает вопроса! =)
Попробую обьяснить еще подробнее - на примере. Сегодня 14.12.2006. В КомбоБоксе стоит 2. Если сегодняшняя дата - текст КомбоБокса == дате из ДатаТаймПикера, то выводим сообщение "Работает!". Этот этап я преодолел. А вот, если не закрывать приложение и в КомбоБокс ввести новое число, то сообщение уже не выводится, хотя подходящяя дата есть в ДатаТаймПикере(процесс занесения даты в ДТП основывается на "пробежке" по СтрингГриду). Как быть??? |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Можно посмотреть как реализован этот процесс? |
|||
|
||||
docwar |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 24.9.2006 Репутация: нет Всего: нет |
Конечно можно, только я не понимаю, чем вызван такой интерес, ведь это почти не имеет никакого отношения к моему вопросу... =)
Внимание! Немного изменил код: теперь даты не вычитаются, а складываются - исправляю последствия невнимательности. Выкладываю проектик, визуализирующий мой вопрос... Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |