|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
Nicholas |
|
|||
Опытный Профиль Группа: Участник Сообщений: 436 Регистрация: 30.9.2004 Репутация: нет Всего: 0 |
При старте приложения производиться поиск окна и если приложение уже запущено и свернуто, оно разворачивается и показывается вот таким кодом:
Окно разворачивает и показывается, НО после это кнопка свернуть нажимается но не срабатывает, а вот если нажать кнопку развернуть и после этого нажать кнопку свернуть, тгда сворачивается. В чем может быть проблема??? |
|||
|
||||
Piter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 24.8.2008 Репутация: нет Всего: нет |
Для иллюстрации проблемы и ее решения провел эксперимент. Приложение с двумя формами. На форме две пары кнопок. В первой группе выполняется «сворачивание» и «восстановление» второй формы средствами Delphi. Во второй – средствами WinAPI. Все просто. Для контроля состояния второго окна проверяю ее свойство Visible.
Имеем: • при использовании средств Delphi проблем нет. Окно сворачивается, и свойство Visible становится False. При восстановлении становится True. И при этом окно закрывается нажатием на кнопку заголовка формы «закрыть». Ничего особенного не заметил – все «штатно». • при использовании средств WinAPI, действительно, возникают проблемы. При восстановлении окна его свойство Visible остается False. Правда повторное сворачивание кнопкой из заголовка формы «свернуть» происходит и свойство Visible становится False. Восстановление окна приводит к его отображению, однако свойство Visible продолжает оставаться False. И закрыть окно нажатием на кнопку заголовка формы «закрыть» не получается. Ответ напрашивается сом собой. Без особых изысков это выглядит так: «отработав» функции WinAPI никак не меняют значения свойств формы приложения Delphi. Подобно сам наблюдал на заре программирования с системой DOS, когда переходил в графический режим средствами BIOSа, а работать пытался графическими средствами PASCAL. «Графическая подсистема» PASCAL просто «считала» что работа проходит в текстовом режиме и «сообщала об ошибках этапа исполнения. Наоборот (инициализация средствами PASCAL, а работы средствами BIOSа) все работало нормально. Как решить проблему? Здесь есть варианты. Например, работать едиными средствами. Это или только средствами Delphi, или только WinAPI. Можно находить "ссылка на окно" средствами WinAPI, а дальше применять «инструменты» Delphi. Но зачем это в данном случае, если есть, например, Form2.Show или Form2.ShowModal? Возможно, может возникнуть необходимость использовать нереализованные в «используемой» версии Delphi возможности операционной системы? Это, да. Но тогда, на мой взгляд, следует более внимательно контролировать свои действия и учитывать изменения «состояния» форм и менять, если есть такие, соответствующие свойства у формы Delphi приложения. В данном случае восстанавливаем форму средствами WinAPI, тогда и меняем соответствующие свойства это формы (Visible, а может быть нужно и ActiveControl у главной формы). Результаты «легкого» поиска (работа с окнами Delphi с использованием API) в сети: http://web.znu.edu.ua/lab/studres/OGLbyDelphi/main1.htm - это «Работа с окнами в DELPHI с использованием API» http://parsers.info/2009/04/rabotaem-s-okn...hi-api-chast-1/ - это «Работаем с окнами и объектами. Delphi. Api. Часть 1» Разумеется - это не академическое и не всеобъемлющее исследование. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Piter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 24.8.2008 Репутация: нет Всего: нет |
Для иллюстрации проблемы и ее решения провел эксперимент. Приложение с двумя формами. На форме две пары кнопок. В первой группе выполняется «сворачивание» и «восстановление» второй формы средствами Delphi. Во второй – средствами WinAPI. Все просто. Для контроля состояния второго окна проверяю ее свойство Visible.
Имеем: • при использовании средств Delphi проблем нет. Окно сворачивается, и свойство Visible становится False. При восстановлении становится True. И при этом окно закрывается нажатием на кнопку заголовка формы «закрыть». Ничего особенного не заметил – все «штатно». • при использовании средств WinAPI, действительно, возникают проблемы. При восстановлении окна его свойство Visible остается False. Правда повторное сворачивание кнопкой из заголовка формы «свернуть» происходит и свойство Visible становится False. Восстановление окна приводит к его отображению, однако свойство Visible продолжает оставаться False. И закрыть окно нажатием на кнопку заголовка формы «закрыть» не получается. Ответ напрашивается сом собой. Без особых изысков это выглядит так: «отработав» функции WinAPI никак не меняют значения свойств формы приложения Delphi. Подобно сам наблюдал на заре программирования с системой DOS, когда переходил в графический режим средствами BIOSа, а работать пытался графическими средствами PASCAL. «Графическая подсистема» PASCAL просто «считала» что работа проходит в текстовом режиме и «сообщала об ошибках этапа исполнения. Наоборот (инициализация средствами PASCAL, а работы средствами BIOSа) все работало нормально. Как решить проблему? Здесь есть варианты. Например, работать едиными средствами. Это или только средствами Delphi, или только WinAPI. Можно находить "ссылка на окно" средствами WinAPI, а дальше применять «инструменты» Delphi. Но зачем это в данном случае, если есть, например, Form2.Show или Form2.ShowModal? Возможно, может возникнуть необходимость использовать нереализованные в «используемой» версии Delphi возможности операционной системы? Это, да. Но тогда, на мой взгляд, следует более внимательно контролировать свои действия и учитывать изменения «состояния» форм и менять, если есть такие, соответствующие свойства у формы Delphi приложения. В данном случае восстанавливаем форму средствами WinAPI, тогда и меняем соответствующие свойства это формы (Visible, а может быть нужно и ActiveControl у главной формы). Результаты «легкого» поиска (работа с окнами Delphi с использованием API) в сети: http://web.znu.edu.ua/lab/studres/OGLbyDelphi/main1.htm - это «Работа с окнами в DELPHI с использованием API» http://parsers.info/2009/04/rabotaem-s-okn...hi-api-chast-1/ - это «Работаем с окнами и объектами. Delphi. Api. Часть 1» Разумеется - это не академическое и не всеобъемлющее исследование. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Piter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 24.8.2008 Репутация: нет Всего: нет |
Для иллюстрации проблемы и ее решения провел эксперимент. Приложение с двумя формами. На форме две пары кнопок. В первой группе выполняется «сворачивание» и «восстановление» второй формы средствами Delphi. Во второй – средствами WinAPI. Все просто. Для контроля состояния второго окна проверяю ее свойство Visible.
Имеем: • при использовании средств Delphi проблем нет. Окно сворачивается, и свойство Visible становится False. При восстановлении становится True. И при этом окно закрывается нажатием на кнопку заголовка формы «закрыть». Ничего особенного не заметил – все «штатно». • при использовании средств WinAPI, действительно, возникают проблемы. При восстановлении окна его свойство Visible остается False. Правда повторное сворачивание кнопкой из заголовка формы «свернуть» происходит и свойство Visible становится False. Восстановление окна приводит к его отображению, однако свойство Visible продолжает оставаться False. И закрыть окно нажатием на кнопку заголовка формы «закрыть» не получается. Ответ напрашивается сом собой. Без особых изысков это выглядит так: «отработав» функции WinAPI никак не меняют значения свойств формы приложения Delphi. Подобно сам наблюдал на заре программирования с системой DOS, когда переходил в графический режим средствами BIOSа, а работать пытался графическими средствами PASCAL. «Графическая подсистема» PASCAL просто «считала» что работа проходит в текстовом режиме и «сообщала об ошибках этапа исполнения. Наоборот (инициализация средствами PASCAL, а работы средствами BIOSа) все работало нормально. Как решить проблему? Здесь есть варианты. Например, работать едиными средствами. Это или только средствами Delphi, или только WinAPI. Можно находить "ссылка на окно" средствами WinAPI, а дальше применять «инструменты» Delphi. Но зачем это в данном случае, если есть, например, Form2.Show или Form2.ShowModal? Возможно, может возникнуть необходимость использовать нереализованные в «используемой» версии Delphi возможности операционной системы? Это, да. Но тогда, на мой взгляд, следует более внимательно контролировать свои действия и учитывать изменения «состояния» форм и менять, если есть такие, соответствующие свойства у формы Delphi приложения. В данном случае восстанавливаем форму средствами WinAPI, тогда и меняем соответствующие свойства это формы (Visible, а может быть нужно и ActiveControl у главной формы). Результаты «легкого» поиска (работа с окнами Delphi с использованием API) в сети: http://web.znu.edu.ua/lab/studres/OGLbyDelphi/main1.htm - это «Работа с окнами в DELPHI с использованием API» http://parsers.info/2009/04/rabotaem-s-okn...hi-api-chast-1/ - это «Работаем с окнами и объектами. Delphi. Api. Часть 1» Разумеется - это не академическое и не всеобъемлющее исследование. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Piter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 24.8.2008 Репутация: нет Всего: нет |
Для иллюстрации проблемы и ее решения провел эксперимент. Приложение с двумя формами. На форме две пары кнопок. В первой группе выполняется «сворачивание» и «восстановление» второй формы средствами Delphi. Во второй – средствами WinAPI. Все просто. Для контроля состояния второго окна проверяю ее свойство Visible.
Имеем: • при использовании средств Delphi проблем нет. Окно сворачивается, и свойство Visible становится False. При восстановлении становится True. И при этом окно закрывается нажатием на кнопку заголовка формы «закрыть». Ничего особенного не заметил – все «штатно». • при использовании средств WinAPI, действительно, возникают проблемы. При восстановлении окна его свойство Visible остается False. Правда повторное сворачивание кнопкой из заголовка формы «свернуть» происходит и свойство Visible становится False. Восстановление окна приводит к его отображению, однако свойство Visible продолжает оставаться False. И закрыть окно нажатием на кнопку заголовка формы «закрыть» не получается. Ответ напрашивается сом собой. Без особых изысков это выглядит так: «отработав» функции WinAPI никак не меняют значения свойств формы приложения Delphi. Подобно сам наблюдал на заре программирования с системой DOS, когда переходил в графический режим средствами BIOSа, а работать пытался графическими средствами PASCAL. «Графическая подсистема» PASCAL просто «считала» что работа проходит в текстовом режиме и «сообщала об ошибках этапа исполнения. Наоборот (инициализация средствами PASCAL, а работы средствами BIOSа) все работало нормально. Как решить проблему? Здесь есть варианты. Например, работать едиными средствами. Это или только средствами Delphi, или только WinAPI. Можно находить "ссылка на окно" средствами WinAPI, а дальше применять «инструменты» Delphi. Но зачем это в данном случае, если есть, например, Form2.Show или Form2.ShowModal? Возможно, может возникнуть необходимость использовать нереализованные в «используемой» версии Delphi возможности операционной системы? Это, да. Но тогда, на мой взгляд, следует более внимательно контролировать свои действия и учитывать изменения «состояния» форм и менять, если есть такие, соответствующие свойства у формы Delphi приложения. В данном случае восстанавливаем форму средствами WinAPI, тогда и меняем соответствующие свойства это формы (Visible, а может быть нужно и ActiveControl у главной формы). Результаты «легкого» поиска (работа с окнами Delphi с использованием API) в сети: http://web.znu.edu.ua/lab/studres/OGLbyDelphi/main1.htm - это «Работа с окнами в DELPHI с использованием API» http://parsers.info/2009/04/rabotaem-s-okn...hi-api-chast-1/ - это «Работаем с окнами и объектами. Delphi. Api. Часть 1» Разумеется - это не академическое и не всеобъемлющее исследование. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Piter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 0 Регистрация: 24.8.2008 Репутация: нет Всего: нет |
Для иллюстрации проблемы и ее решения провел эксперимент. Приложение с двумя формами. На форме две пары кнопок. В первой группе выполняется «сворачивание» и «восстановление» второй формы средствами Delphi. Во второй – средствами WinAPI. Все просто. Для контроля состояния второго окна проверяю ее свойство Visible.
Имеем: • при использовании средств Delphi проблем нет. Окно сворачивается, и свойство Visible становится False. При восстановлении становится True. И при этом окно закрывается нажатием на кнопку заголовка формы «закрыть». Ничего особенного не заметил – все «штатно». • при использовании средств WinAPI, действительно, возникают проблемы. При восстановлении окна его свойство Visible остается False. Правда повторное сворачивание кнопкой из заголовка формы «свернуть» происходит и свойство Visible становится False. Восстановление окна приводит к его отображению, однако свойство Visible продолжает оставаться False. И закрыть окно нажатием на кнопку заголовка формы «закрыть» не получается. Ответ напрашивается сом собой. Без особых изысков это выглядит так: «отработав» функции WinAPI никак не меняют значения свойств формы приложения Delphi. Подобно сам наблюдал на заре программирования с системой DOS, когда переходил в графический режим средствами BIOSа, а работать пытался графическими средствами PASCAL. «Графическая подсистема» PASCAL просто «считала» что работа проходит в текстовом режиме и «сообщала об ошибках этапа исполнения. Наоборот (инициализация средствами PASCAL, а работы средствами BIOSа) все работало нормально. Как решить проблему? Здесь есть варианты. Например, работать едиными средствами. Это или только средствами Delphi, или только WinAPI. Можно находить "ссылка на окно" средствами WinAPI, а дальше применять «инструменты» Delphi. Но зачем это в данном случае, если есть, например, Form2.Show или Form2.ShowModal? Возможно, может возникнуть необходимость использовать нереализованные в «используемой» версии Delphi возможности операционной системы? Это, да. Но тогда, на мой взгляд, следует более внимательно контролировать свои действия и учитывать изменения «состояния» форм и менять, если есть такие, соответствующие свойства у формы Delphi приложения. В данном случае восстанавливаем форму средствами WinAPI, тогда и меняем соответствующие свойства это формы (Visible, а может быть нужно и ActiveControl у главной формы). Результаты «легкого» поиска (работа с окнами Delphi с использованием API) в сети: http://web.znu.edu.ua/lab/studres/OGLbyDelphi/main1.htm - это «Работа с окнами в DELPHI с использованием API» http://parsers.info/2009/04/rabotaem-s-okn...hi-api-chast-1/ - это «Работаем с окнами и объектами. Delphi. Api. Часть 1» Разумеется - это не академическое и не всеобъемлющее исследование. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Nicholas |
|
|||
Опытный Профиль Группа: Участник Сообщений: 436 Регистрация: 30.9.2004 Репутация: нет Всего: 0 |
Piter, show и showmodal не помогут т.к. работа идет с чужим приложением - первая копия программы.
Не нашел другого способа восстановить все флаги после развертывания окна процедурой ShowWindow, кроме как кинуть на форму ApplicationEvents и добавить вот такой код:
естественно приложение теперь видит что окно развернуто и спокойно дает свернуть его по кнопке... |
|||
|
||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |