|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Уважаемы коллеги! Имеется некоторая форма F1 на которой присутствует OleBoundControl1 в котором отображается набор данных D1. Поверх OleBoundControl1 положен ПРОЗРАЧНЫЙ Shape1, который отлавливает мышиный DblClick по OleBoundControl1. С помощью ShellExecute вызывается ассоциированное приложение к D1. Вопрос. Мне нужно после закрытия ассоциированного приложения к D1 выполнить программу P1. В какое событие формы F1 записать вызов P1. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 13:03 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Если сразу после открытия этого внешнего приложения можно получить идентификатор его окна hWnd и речь идет о VFP9, то читай описание BindEvent() и пример из проекта Solution.pjx - New in Visual FoxPro 9.0 \ Binding to Windows Message events ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 13:57 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Уважаемый ВладимирМ! Спасибо за ответ. Попробую им воспользоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 14:00 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Уважаемый ВладимирМ! Мне не хватает знаний воспользоваться Вашим советом ... Есть ли иные подходы? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 14:23 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
> Автор: UAP > Есть ли иные подходы? Не уверен что альтернативный подход лучше. Во первых почитай это , во вторых можно воспользоватся упомянутой в статье функцией ShellExecuteEx, в её структуре можно задать флаг указывающий вернуть hProccesID по которому просто ждем окончания процесса и что-то делаем Код: sql 1. 2. 3.
Но! остаются вопросы заданные в статье. Что делать в случае DDE или того-же ворда\ексела, которые закрывают документ, но не закрываются сами??? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 14:44 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
UAPЕсть ли иные подходы? В общем случае, в описанной постановке задача не имеет решения. Почему? Достаточно подробно описано в статье, ссылку на которую указал Игорь (первые несколько абзацев там можете пропустить). Однако возможно частное решение для конкретной задачи. Но для этого надо более подробно описать постановку задачи 1. Что отображается в OLE-объекте 2. Какое приложение запускается 3. Какая именно обработка требуется по закрытию этого приложения ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2012, 20:07 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Надо ждать завершения процесса. Тут я исходник класса-обертки давал. Использовать так: Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 06:54 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Dima TНадо ждать завершения процесса. Далеко не факт, что это вообще поможет. Автор ведь не говорит, о чем вообще идет речь. Например, если открыли документ Word, то что ждать будем? Закрытие одного экземпляра приложения или закрытие документа в приложении? Кроме того, закрытие приолжение "руками" может не означать закрытие процесса. Тогда ждать закрытия можно "до посинения". По ссылке приведенной Игорем это все как раз и описывается. Повторюсь, в общем случае - проблема решения не имеет. Нужно знать подробности. Ожидание завершения процесса - это один из частных способов решения. Но применим ли он в данном конкретном случае - не известно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 11:24 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Господа! Сейчас я опишу подробнее рассматриваемую задачу. На форме F1 имеется грид G1, в котором отображается таблица T1, в которой одно из полей содержит маршруты к разнообразным наборам данных. Перемещаясь по таблице, в OleBoundControl1 (на этой же форме F1) появляется изображение соответствующего набора данных. Мне нужно мышиным DblClick по OleBoundControl1 запустить по отношению к соответствующему файлу ассоциированное приложение для его редактирования. При этом, в таблице T1 автоматически появляется новая запись и создается копия (но с другим именем) файла "по которому" сделан DblClick, в "маршрутное" поле таблицы T1 записывается маршрут к копии, которая и будет редактироваться. Теперь самое главное. Когда пользователь завершит редактирование и сохранит результат в файл с уже указанным в таблице T1 именем и маршрутом, и закроет ассоциированное приложение, нужно, чтобы в OleBoundControl1 отобразился отредактированный файл. Вот именно это ОТОБРАЖЕНИЕ я элементарно могу сделать кнопкой, которую должен нажать пользователь закрыв ассоциированное приложение. А НУЖНО, ЧТОБЫ УКАЗАННАЯ КНОПКА "НАЖИМАЛАСЬ" АВТОМАТИЧЕСКИ, КАК ТОЛЬКО ЗАКРОЕТСЯ АССОЦИИРОВАННОЕ ПРИЛОЖЕНИЕ. Отсюда и вопрос - в какое событие формы F1 записать вызов P1. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 12:58 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
> Автор: UAP > одно из полей содержит маршруты к разнообразным наборам данных. Что такое маршрут и что такое набор данных(в каких файлах хранятся эти наборы) > Теперь самое главное. У меня сделанно так: пользователь нажимает кнопку открытия "приложения" к заявке, как правило это файл Ексела открывается форма в которой две кнопки - "Зафиксировать изменения" и "Не сохранять изменения", и открывается файл приложения пользователь что-то делает с файлом и если нужно, сохраняет свои изменения и закрывает файл, но не Ексел(там может быть много других документов открыто) после чего возвращается в программу и нажимает одну из кнопок. По сохранению - файл считывается с диска и перезаписывается в БД и удаляется с диска, по отмене - просто удаляется с диска Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 13:29 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Уважаемый Игорь Горбонос! Вы предлагаете решение "наоборот". Я его тоже знаю, оно эффективно, но "ошибочно". Ибо противоречит привычке пользователей сначала поработать, а сохранять потом. Помните плакат: "Поработал - убери рабочее место!" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 13:43 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Вам же уже неоднократно написали, что общего решения - не существует. Вы ответили на все вопросы, кроме тех, которые Вам задали. Ну, еще раз. Предположим, что в OLE отображаются данные из Excel. Пользователь открыл Excel и начал что-то там изменять. А теперь вопрос "на засыпку" - что является событием Excel, которое означает завершение редактирования? Закрытие Excel? Вовсе нет! В Вашем примере - это сохранение ранее открытого документа. Но ЭТО событие не имеет вообще никакого отношения к закрытию приложения Excel. Чтобы хоть что-то Вам посоветовать принципиально важно знать о каком именно ассоциированном приложении идет речь. Нет и не может быть общего решения для любых приложений. Возможны только частные решения для каких-то конкретных приложений. Но Вы можете с внешним приложением вообще не "заморачиваться", а просто "тупо" по таймеру, например, раз в несколько секунд, обновлять содержимое текущего OLE. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 13:56 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Уважаемый ВладимирМ! Всегда очень хочется найти ОБЩЕЕ решение. Думаю, это аналог ДЕДУКТИВНОГО метода известного персонажа. В моем случае, можно считать, что завершение редактирования это ЗАКРЫТИЕ ассоциированного приложения. Ассоциированным приложением может быть любое приложение, которое по умолчанию открывает файл с определенным расширением на данном компьютере. В моей таблице каждая запись может быть сопоставлена с одним файлом любого "открываемого" типа. В OleBoundControl1 я загружаю (чтобы их предварительно посмотреть) с помощью APPEND GENERAL файлы типа DOC, XLS, PDF и прочие, полные маршруты которых хранятся в T1. Таймер не совсем подходит, поскольку APPEND GENERAL отрабатывает довольно долго ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 14:22 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
ВладимирМНо Вы можете с внешним приложением вообще не "заморачиваться", а просто "тупо" по таймеру, например, раз в несколько секунд, обновлять содержимое текущего OLE. +1 только не совсем "тупо", а отслеживать дату-время изменения файла и обновлять при ее изменении, иначе тормоза будут если файл долго считывается. Можно отказаться от таймера и использовать WinAPI функцию FindFirstNotification() она заставляет ОС слать окну приложения сообщение при каждом изменении заданного файла(ов). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 14:23 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
> Автор: UAP > файлы типа DOC, XLS, PDF и прочие, полные маршруты которых хранятся в T1. Наконец-то! Для ворда и ексела можно держать ссылки на открытые инстансы и подписатся на получение событий(в хелпе был пример создания и использования такого класса) в данном случае нужно перехватывать событие закрытия книги или документа. Для PDF не знаю, мне не попадался. О других форматах ты ничего не говоришь :( Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 14:36 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
> Автор: Dima T > а отслеживать дату-время изменения файла и обновлять при ее изменении, > использовать WinAPI функцию FindFirstNotification() она заставляет ОС слать окну приложения сообщение при каждом > изменении заданного файла(ов). Не совсем подходит, у меня, например, привычка очень часто сохранятся при этом я продолжаю работать :) Нужен какой-то однозначный ответ что я закончил работу с файлом. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 14:37 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Уважаемый Игорь Горбонос! Форматы могут быть ЛЮБЫМИ (но ассоциированные приложения на данном компьютере ОБЯЗАТЕЛЬНО установлены). Именно так, хотя OLE не всегда может их "показать". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 14:49 |
|
Какое событие происходит при закрытии внешнего приложения?
|
|||
---|---|---|---|
#18+
Игорь Горбонос> Автор: Dima T > а отслеживать дату-время изменения файла и обновлять при ее изменении, > использовать WinAPI функцию FindFirstNotification() она заставляет ОС слать окну приложения сообщение при каждом > изменении заданного файла(ов). Не совсем подходит, у меня, например, привычка очень часто сохранятся при этом я продолжаю работать :) Нужен какой-то однозначный ответ что я закончил работу с файлом. Почему не подходит? ты же сохраняешься для того чтобы не потерять изменения. Небольшие издержки из-за того что файл закачается 10 раз (при каждом сохранении), а не один. Но в итоге у тебя будет загружен файл со всеми последними изменениями. Лично мне кажется что отслеживание изменений файла самый универсальный способ. Как вариант дополнительно можно проверять что файл закрыт, тогда промежуточные сохранения можно проигнорировать. Но некоторые проги не держат файл открытым, например паинт или блокнот. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2012, 15:13 |
|
|
start [/forum/topic.php?fid=41&msg=37750597&tid=1583734]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
61ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 156ms |
0 / 0 |