Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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™

min@y™ (статус: Доктор наук), 18 января 2011, 08:15 [#1]:

Цитата (Толяныч):

каждая после отработки по "крестику" не просто убирается восвояси, а вызывает на смену оболочку.

Эту фразу я не понял.
Дальше не читал.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mirt.steelwater

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

mirt.steelwater (статус: Посетитель), 19 января 2011, 09:55 [#5]:

он от тебя убежал
Ⓐ свобода сопротивление солидарность

25 января 2011, 20:50: Статус вопроса изменён на решённый (изменил автор вопроса — Толяныч)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:33
Выполнено за 0.02 сек.