![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Есть две формы: Form1 и Form2.
На второй форме есть Label. (Label.Caption := 'бла-бла-бла';) <-- Это важно! После запуска приложения обе формы скрываются: // ShowWindow(Form1.Handle, SW_HIDE); // ShowWindow(Form2.Handle, SW_HIDE); // ShowWindow(Application.Handle, SW_HIDE); затем показываем вторую форму, делаем задержку в 5 сек и скрываем её: // ShowWindow(Form2.Handle, SW_SHOW); // Sleep(5000); // ShowWindow(Form2.Handle, SW_HIDE); выводится форма с надписью ''бла-бла-бла', всё как надо, НО Но проделывая тоже самое второй раз - НИКАКОЙ НАДПИСИ НЕТ!!! Форма выводится, но она пустая! Т.е. написав вот так: // ShowWindow(Form2.Handle, SW_SHOW); // Sleep(5000); // ShowWindow(Form2.Handle, SW_HIDE); // Sleep(5000); // ShowWindow(Form2.Handle, SW_SHOW); // Sleep(5000); // ShowWindow(Form2.Handle, SW_HIDE); Первый раз вылезет форма с надписью 'бла-бла-бла', а второй раз без надписи! Вопрос: почему это происходит? И как сделать так, чтобы и второй раз была видна надпись? |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
в виде кода давай.
выкладывай проект народ посмотрит, а гадать что ты написал .... -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Вставь Application.ProcessMessages перед каждым Sleep(5000);
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Нужная процедура в конце прикрепленного файла.
Присоединённый файл ( Кол-во скачиваний: 3 )
client.pas 4,28 Kb |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
должно помочь.
после входа в процедуру останавливай таймер, а то если процесс длительный глюки могут полезть. а при выходе снова запускай. Это сообщение отредактировал(а) drkot - 3.7.2006, 19:28 -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Вот и программа целиком..
Только не стоит запускать её из-под Delphi, после запуска она блокирует клавиатуру. Чтобы её закрыть нужно завершить через Диспетчер задач процесс: service.exe Это сообщение отредактировал(а) Dr3d - 3.7.2006, 19:44 Присоединённый файл ( Кол-во скачиваний: 6 )
client.rar 9,78 Kb |
|||
|
||||
| Dr3d |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Application.ProcessMessages стоит при активации Form1, но не помогает, а останавливая таймер, форма вообще не закрывается... да и в случае ошибки в процедуре таймер не запустится. |
||||
|
|||||
| Max111 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 18.1.2006 Репутация: нет Всего: нет |
Доброе утро,
В справке написано The Sleep function suspends the execution of the current thread for a specified interval. Если у Вас интервал для Timer2 меньше чем 5000 то непонятно вообще как это у вас работает. Я бы сделал несколько проще вызов Form1.show внутри метода Show включить таймер с интервалом в 5000 при истечении таймера Form1.close |
|||
|
||||
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Один хрен второй раз надписи не видно. |
|||
|
||||
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Интервал для второго таймера я поставил маленький, чтобы долго не ждать.
Но даже если поставить как надо, на 60 сек, то результат тотже самый. |
|||
|
||||
| drkot |
|
||||||||||||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
разберем ситуацию. касаюсь только алгоритмичномти. Реализации кода не касаюсь.
интервал вызова процедуры 1000мс.
начали
вот и первый бок.
ждем 5000мс за это время процедура будет вызвана еще 4 раза и в каждой вновь вызваной процедуре произойдет showwindow неудивитьльно что виснет.
тоже самое
может format проще будет использовать?
таймер обнозначно останавливать при входе и заново запускать при выходе. Сейчас это напоминает попытку пролезть по тунелю через работающий вентилятор. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
||||||||||||
|
|||||||||||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
немного вдогонку:
"рабочий алгоритм можно сделать быстрым, а быстрый рабочим нет" (да простят меня коллеги если процетировал неправильно) так вот: сначало надо получить рабочий алгоритм, а уж потом на него фенички навешивать, а у тебя сплошные фенички и работать не хочет. Так и не понял зачем управление блокировать?
этож как ты мучишся -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Не, я не мучаюсь, я запускаю эту програмку на удаленном ПК. И как ты наверное заметил, это клиентская часть, сервер стоит на моем компе, и чтоб закрыть клиента я всего лишь посылаю 'exit'.
Клаву блокирую потому, что это программа для нашего комп клуба. И программа в целом работает нормально, проблемы возникают только со второй формой. Я уже там конечно намудрил, она раньше не зависала (Timer2.Interval := 60000). Вся проблема и заключается в том, что я отображаю эту форму чтобы показать первый раз пользователю, что у него осталось 5 минут, а второй раз 1 минута, но появляясь второй раз на ней нет надписи. Вот. З.Ы. Как юзать Format? |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: 5 Всего: 8 |
F1 Ситуация: бегаеш к примеру монстеров стреляеш, и тут хрясь игра сворачивается А уверен что твоя форма прорверся наружу при активированом DirectX и сколько по времени она это делает? как писал ранее . если коснутся то показ и скрытие формы реализовано неверно нестоит вобще зомораживать слипами основной поток (да еще и на 5 с). Лучше уж так: показал форму запустил таймер отсчет закончился, форму скрыл форму, выключил таймер зачем долго висеть в одной процедуре (еслиб это отдельные потоки были то еще понятно) а так поток один (оболочка) вот он бедняга и не прорисовывает. (кста можно пытаться принудительно обновлять) И немного по стилистике: видны попытки использования API функций напрямую, но непонятно зачем? Все что использовал в делфе уже прописано в системных юнитах, место не экономится, читаемость падает. Я не против API только если это надо. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
Согласен, что красиво писать я еще не умею, но мне главное чтоб работало!
Сейчас все работает, делаю обновление формы (Form2.Refresh;) и Label показывается. Тут слабал небольшой примерчик по этому поводу, кому интересно, глянте. Присоединённый файл ( Кол-во скачиваний: 1 )
Temp.rar 9,78 Kb |
|||
|
||||
| Dr3d |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.7.2006 Репутация: нет Всего: нет |
А вот и нет Только что проверил на Варике и на Контре проверил, никто не свернулся, только вот это окошко слишком быстро мигнуло, даже не видно что там написано Я так думаю туда нужно целый цикл с перерисовкой дабавить. Будет выглядеть как в Асталависте. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |