10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
|
1 | |
Вывести окно с сообщением во время запуска приложения13.11.2010, 12:21. Показов 9920. Ответов 16
Метки нет (Все метки)
Подскажите если не влом. Сам что-то пока не догадался. В приложении в FormCreate запускается некий сравнительно длительный процесс и форма приложения не сразу появляется. Как бы мне перед самым запуском того процесса вывести на время окошко с сообщением, что идет запуск приложения, а потом уже, после появления главной формы, убрать это окошко? Спасибо.
0
|
13.11.2010, 12:21 | |
Ответы с готовыми решениями:
16
Из окна приложения в случае ошибки надо вызвать окно с сообщением о ней Вывести окно с сообщением После отображения списка загружаемых файлов всплывает окно "Восстановление запуска" с сообщением об ошибке Служба запуска приложения в определенное время |
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
|
|
13.11.2010, 12:36 | 2 |
AleksBak, ну что сложного, я лично тут уже раз 5 писал примеры... создаете новую форму, переносите из auto-create и в конструкторе главного окна создаете с помощью new эту форму... а в конце кода конструтора убиваете ее... что сложного-то?
1
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
|
13.11.2010, 13:03 [ТС] | 3 |
Да извините пожалуйста, что глупые вопросы задаю. Я просто с самого начала пошел по неверному пути и все пытался используя ShowMessage это сделать только убрать кнопку Ok в ней. И другие варианты пробывал(MessageBox и пр.), думал что нужен какой-то отдельный поток что ли и пр., но до такого способа как у Вас не догадался. Я теперь поищу информацию как создавать новую форму т.к. не делал этого до сих пор. Спасибо.
0
|
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
|
||||||||||||||||
13.11.2010, 16:21 | 4 | |||||||||||||||
в Unit1.h (или как он у тебя называется), в public
1
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
|
14.11.2010, 23:33 [ТС] | 5 |
Форму создал по способу Lelik-pahan, а по способу Lord_Voodoo так и не получилось(еще указывал в меню File->Use Unit... и там указывал чтобы мог обращаться к этой второй форме из основной). Если бы получилось по способу Lord_Voodoo, то было бы хорошо и смог бы легко добавить компонент TProgressBar например. По способу Lelik-pahan не получается добавить такой компонент в созданную форму. Помогите/проясните пожалуйста.
0
|
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
||||||
15.11.2010, 01:57 | 6 | |||||
AleksBak, добавьте в проект новую форму, настройте её как вам нужно, добавьте компоненты и т.д.
Дальше зайдите в опции проекта и уберите созданную форму из авто-создаваемых форм (Auto-created Forms, на форуме обсуждалось не раз). Дальше вы в праве создавать объекты описанного вами класса (вашей созданной формы). Создание такое, как выше написал Lelik-pahan, за исключением названия класса. Например:
1
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
||||||
15.11.2010, 11:08 [ТС] | 7 | |||||
MikeSoft, я сделал все как Вы написали, с Auto-created Forms разобрался и до этого, форма появляется, но почему-то курсор помещенный над ней превращается в часы(т.е. процессор загружен), а на самой форме ничего нет кроме заголовка и пустого окна - см. скриншот. Т.е. что я сделал(извиняюсь если уже надоел):
1. Создал новую форму(как Lord_Voodoo указал) - Form2. Добавил на нее кнопку, Label1. 2. Переместил ее из Auto-created в Available. 3. Не стал ничего добавлять в Unit1.h (закомментировал предыдущее от Lelik-pahan). 4. Написал след. код(на скриншоте тоже он виден):
0
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
||||||
15.11.2010, 18:49 [ТС] | 8 | |||||
Пояснение - если же оставить новую форму в Auto-Created, то она появляется вместе с главной(естественно поздно т.к. у главной в OnCreate идет длительный поиск устройства вначале) и причем в "нормальном" виде т.е. с кнопками и пр.. А если же убрать эту новую форму из Auto-Created, то как писал она появляется первой(теперь мы ее вначале создаем, а потом устройство ищем), но так и остается пустой и даже после того как появится главная форма.
Добавлено через 4 часа 54 минуты Компоненты вот так создаю и добавляю:
Добавлено через 55 минут Вроде получилось(так просто все оказалось и столько ненужных телодвижений было совершено). Еще как бы ненужные кликания по этой новой форме запретить бы т.к. и-за них выходит в заголовке формы строка типа "Не отвечает", но основное приложение все-таки запускается спустя положенное время(когда закончен поиск оборудования) и все потом нормально работает.
0
|
1702 / 898 / 207
Регистрация: 25.11.2009
Сообщений: 1,847
|
|||||||||||
15.11.2010, 19:27 | 9 | ||||||||||
попробуй так
В моём лузерском понимании, если мы создаём форму динамически:
А формы, добавленные в проект, но убранные из auto-created я всегда создавал так, как написал выше (взял этот код из учебника Культина, когда только знакомился с билдером, так им и пользуюсь) Ведь, как я понимаю, через new создаётся форма, никак не связанная с той, что была добавлена в проект...
0
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
||||||
15.11.2010, 19:34 [ТС] | 10 | |||||
Это тоже как вариант и проверял заменяет следующее:
0
|
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
|
15.11.2010, 21:03 | 11 |
Всё из-за того, что вы не разрешаете форме получать сообщения, пришедшие от системы.
Необходимо вызывать методы перерисовки или же использовать Application->ProcessMessages(); Чтобы уже раз и навсегда прояснить данный вопрос, сейчас напишу простенький проект и выложу его здесь...
0
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
||||||
15.11.2010, 21:57 [ТС] | 12 | |||||
Я уже это писал у себя - не помогло. Вот что я пишу(окончательный вариант) в OnCreate для Form1:
0
|
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
||||||||||||||||||||||||||
15.11.2010, 22:00 | 13 | |||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Итак...
Постановка задачи: Во время загрузки основной формы проекта показать дополнительную форму, отображающую состояние загрузки. Создаём новый VCL-проект, создаём ещё одну форму, которая должна отображать ход загрузки и связываем два юнита между собой (в первом юните - #include "Unit2.h", во втором - #include "Unit1.h"). Теперь необходимо убрать вторую форму из авто-создаваемых. Для этого переходим в "Project" -> "Options" -> "Forms" и убираем Form2 из колонки Auto-Created Forms в Available Forms. Т.к. по этому действию возникают вопросы, попробую его немного осветить. Данным действием мы запрещаем компилятору автоматически создавать объект описанного класса. То есть, добавляя к проекту новую форму, мы по сути добавляем описание нового класса, объект которого по-умолчанию автоматически создаётся вместе с главной формой. Убедится в этом можно заглянув в файл проекта и обратив внимание на строки:
В описании класса TForm1 нам необходимо добавить одну переменную, которая будет хранить в себе процент загрузки программы. Для этого переходим к заголовочному файлу Unit1.h и в область public добавляем переменную типа int:
Теперь перейдём ко второй форме. Подгоним её размер так, как угодно душе (мне захотелось увидеть форму размером 500х30) Установим BorderStyle в bsNone. Добавим на неё компоненты классов TProgressBar и TTimer. Объект ProgressBar1 "размажем" по всей форме, для этого выставим Align в alClient. Для объекта Timer1 обработаем событие OnTimer и запишем туда следующий код:
Нерадивый пользователь может попробовать закрыть эту форму посредством нажатия Alt+F4... Запретим ему эту возможность. Для этого обработаем событие OnCloseQuery для Form2:
Вернёмся к первой форме. Для того, чтобы показать ход выполнения нам необходим какой-нибудь длительный процесс. Самое простое, что можно придумать - это создать массив и заполнять его случайными значениями множество раз. В конструкторе класса TForm1 опишем процесс заполнения массива случайными числами. После чего, конструктор будет иметь следующий вид:
Для тех, у кого остались вопросы - прикладываю проект (созданный в RAD Studio XE). Скачать проект: LoadingProgress.rar С уважением, Михаил.
7
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
||||||
15.11.2010, 23:04 [ТС] | 14 | |||||
MikeSoft, честно, уже только за то что Вы столько написали и сделали Вам премию или что-то в этом роде нужно. Тут есть "Спасибо", но это так и непонятно. Я в долгу короче. Я собираюсь сейчас проверить. (если бы я знал, что так затянется, то не стал бы связываться, но это не подход и надо все додолбить)
Добавлено через 46 минут MikeSoft большое человеческое спасибо еще раз. Я прочитал, проверил. Некоторые вещи немного по-другому, но получается, что практически также я делал(под конец). Я решил проверить как будет работать Ваша вещь если в нее добавить код для поиска камеры. Оказалось, что точно также как и у меня. Для того чтобы проверить(если нужно измененный файл Вашего проекта помещу) достаточно проделать элементарные вещи - из вкладки Indy Clients помещаете на основную форму TIdHTTP. В нем, в Request пропишите любой IP(для локальных сетей и начинающийся с 192.ххх.ххх.ххх и при чем такой которого нет в сети - например 192.168.0.139) и такое запишите в конструкторе класса TForm1:
0
|
3953 / 1808 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
|
||||||
15.11.2010, 23:10 | 15 | |||||
AleksBak, никаких извинений не нужно. Я не защищал авторских прав на данный код.
Запускать проект не буду, т.к. ошибка очевидна. Вы не указали таймаут, в течении которого будут произведены попытки соединения, чтения.
1
|
10 / 10 / 4
Регистрация: 14.08.2010
Сообщений: 103
|
||||||
15.11.2010, 23:28 [ТС] | 16 | |||||
Не такой знаток я потому что, но это:
полностью, к своему стыду, согласен. С самого начала не так сделал. По другому нужно что-то сделать. Спасибо большое еще раз.
0
|
0 / 0 / 0
Регистрация: 28.10.2014
Сообщений: 46
|
|
20.04.2016, 20:59 | 17 |
MikeSoft, а можно тоже самое, только для Visual studio?
0
|
20.04.2016, 20:59 | |
20.04.2016, 20:59 | |
Помогаю со студенческими работами здесь
17
Вывести окно с сообщением после того как закончил вводить текст в Memo, который был выведен в RichEdit Как сохранить время запуска и выключения приложения в бд Окно программы меняет внешний вид после запуска приложения (ASP.NET) Программа для предотвращения запуска определенных процессов во время работы приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |