| 
| 
 | Вопрос # 4 928/ вопрос решён / | 
 |  Доброго времени суток, уважаемые эксперты!
 Вопрос несерьезный типа уже с жиру бесюсь :-)
 Есть у меня 2 нормально работающие ( мои! ) программы, сейчас хочу сделать над ними вроде оболочки : вызвал ее, на ней 2 ( пока 2 ) кнопки вызова рабочих программ, каждая после отработки по "крестику" не просто убирается восвояси, а вызывает на смену оболочку.
 Можно, кончно, слить 2 проги в одну, к ним прицепить модальную управляющую форму, но этого пока еще не умею.
 Есть еще мысль: все-таки сделать одну программу, при вызове по умолчанию устанавливается первый режим ( для определенности - загрузка ), после отработки по нажатию кнопки убираются контролы этой программы ( общие для обеих остаются ) и выставляются контролы другой, т.е. она уже настроена на выгрузку.
 Кодить не надо, просто пунктиром - путь решения.
 
|  |   Вопрос задал: Толяныч (статус: 4-ый класс)Вопрос отправлен: 18 января 2011, 00:16
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, Толяныч!Есть очень простой и интеллигентный путь решения проблемы. Состоит он в использовании пары CreateProcess и WaitForSingleObject.
 Для начала медитируем над этой страницей http://www.latiumsoftware.com/en/delphi/00003.php
 Суть простая - вначале запускаем нужную программу через CreateProcess, а потом ждем с помощью WaitForSingleObject ждем завершения процесса, можно и в отдельном потоке. Пока процесс запущен, программу-запускалку можно свернуть.
 Эта пара функций хороша тем, можно не просто запустить процесс, а передать ему параметры, сформировать "правильное окружение". А также подождать указанное время (то есть, например 10 минут и потом завершить работу вызванного приложения).
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 18 января 2011, 10:50
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо, Вадим, хоть это пока и трудновато для моих пока не_слишком_дельфи_ориентированных мозгов, буду пробовать |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 19 января 2011, 09:55; участников в обсуждении: 4. 
|   | min@y™ (статус: Доктор наук), 18 января 2011, 08:15 [#1]: Цитата (Толяныч): каждая после отработки по "крестику" не просто убирается восвояси, а вызывает на смену оболочку. Эту фразу я не понял.
 Дальше не читал.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | mirt.steelwater (статус: Посетитель), 18 января 2011, 09:51 [#2]:нужно в каждой программе твоей по событию OnCloseQuery находить дискриптор окна оболочки и выставлять его поверх всех окон, можешь послать окну оболочки событие в асинхронном режиме, которое обработчик окна оболочки будет интерпретировать как скрыть или показать первую группу контролов или вторую. этот вариант экономичен, но архитектурно неверен. теоретически исполняемы программы ничего не должны знать о запускающей их оболочке, поэтому лучше всего тебе в главном цикле программы-оболочки (или по таймеру) искать дискриптор окна подконтрольного приложения и в зависимости от этого выполнять те или иные действия
 Ⓐ свобода сопротивление солидарность |  
|   | Толяныч (статус: 4-ый класс), 18 января 2011, 12:20 [#3]:mirt.steelwater:  Буду пробовать. Такой вариант (вроде такого) я сам продумывал. В таком случае и программа-оболочка не нужна : на главной форме помещаю _все_ контролы, но по умолчанию Enabled только для первой группы и, конечно, общие для обоих. Ну и кнопки переключения, конечно. А по нажатию "Варианнт 2" - все наоборот. Для случая группы из многих программ это, наверное, не очень, но для двух - вполне. min@y™: Зря Вы так нас, чайников... Я понимаю, stason вывел Вас из равновесия, ну да леший с ним. Я имел в виду : нормально программа по "крестику" закрывает главную форму и убирается из списка задач, а тут мне надо было, чтобы она передавала управление оболочке. Другие меня поняли, значит, все не так уж совсем запущено.
 |  
|   | Адмирал (статус: Посетитель), 18 января 2011, 12:47 [#4]:леший не со мной |  
|   | mirt.steelwater (статус: Посетитель), 19 января 2011, 09:55 [#5]:он от тебя убежал Ⓐ свобода сопротивление солидарность |  25 января 2011, 20:50: Статус вопроса изменён на решённый (изменил автор вопроса — Толяныч) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |