Для одной операции пришлось сделать 2 метода из-за кривости запуска окон:
*doFlashCaption=мигает заголовком окна. Идентификатор окна берется из потока или Handle|1|
*doFlashWindow=мигает заголовком этой формы в панели задач|1|
Первое, если передать свой handle, будет мигать только заголовком окна (панель задач без изменений). Вторая не принимает параметов, зато мигает собственной строкой в панели задач. И все из-за того, что строка в панели задач принадлежит не окну формы, а окну главного приложения (Applet.Handle).
Исправить ситуацию нужно так. При запуске приложения нужно скрывать главное окно:
SetWindowLong(Application->Handle, GWL_EXSTYLE, GetWindowLong(Application->Handle, GWL_EXSTYLE) | WS_EX_TOOLWINDOW);
SetWindowLong(Application->Handle, GWL_EXSTYLE, GetWindowLong(Application->Handle, GWL_EXSTYLE) & (0xFFFFFFFF^WS_EX_APPWINDOW));
Application->ShowMainForm = false;
Application->MainForm->Visible = false;
А с главной формой наоборот:
SetWindowLong(Form1->Handle, GWL_EXSTYLE, GetWindowLong(Form1->Handle, GWL_EXSTYLE) | WS_EX_APPWINDOW);
SetWindowLong(Form1->Handle, GWL_EXSTYLE, GetWindowLong(Form1->Handle, GWL_EXSTYLE) & (0xFFFFFFFF^WS_EX_TOOLWINDOW));
Тогда значек в панели задач будет от формы, а не от главного окна. И глюк исчезнет. Так же нужно пропатчить и сам редактор (старые версии редактора работали нормально). Дело в том, что пока не сделать, как написано выше, то создается проблема для утилиты RBTRAY. Она позволяет по клику мыши правой кнопкой на окне минимизации любого окна убрать его в трей. Нормальные окна, у который значек в панели задач совпадает с видимым окном, отлично убираются в трей. А хиасм и его приложения из-за описанной ситуации со значками в трей не убираются. Это не удобно. ВСЕ приложения, кроме Borland'овских, работают нормально. Я уже это писал ранее, может стоит сделать нормально?
http://php.spb.ru/1/hiasm/hiasm_wintool.zip
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
|
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Предложенный способ оригинален, но слишком громозский. Проблему исправил немного по другому.
Не знаю чем вам помешал существующий способ запуска окон при введение метода doFlashXXX, но когда я вставлял аналогичный метод в MainForm там все работало отлично. Правда мигание Caption потом убрал. |
|||
карма: 27 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Патч, исправляющий запуск окон
http//hiasm.spb.ru/path.rar |
|||
карма: 27 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Оказалось, что после этого нововведения начинаются глюки с дочерними формами. Короче я все вернул назад. По поводу RBTRAY могу заметить, что её алготритм реализован не верно раз она не может работь со всеми окнами(всего-то требуется найти окно со стилем WS_EX_APPWINDOW и свернуть его).
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Скорей всего это разница в ОС. Проверю, тогда скажу точнее..
|
|||
карма: 27 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Спор по поводу того, кому должен принадлежать значек в панели задач не имеет смысла. Это очевидно.
1) У всех приложений, например мелкософтных дефолных виндовых, это так. Решать, заводить ли себе значек там, должно каждое отдельное окно само. Короче, статистика. Я не могу утверждать, что такие глюки плодят только борландовские визуальные компиляторы, но пока знаю только его. Причем тех, кто ручками не поправил ситуацию с тем, что существует невидимое основное окно. 2) Вот еще наглядный пример (ReGet, Дистпетчер задач, WinAmp и т.п., сидящие обычно в трее). Приложение в обычном состоянии не имеет значка в панели задач (т.к. висит в трее), но как только открывается любое окно настроек, то именно это настроечное окно и создает значек. Или вот Word, IE, Opera (не в режиме MDI) - процесс один, а окон много. |
|||
карма: 0 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
Я бы еще поспорил кто должен висеть в панели задач, но проблема - то вовсе не в этом. Поскольку центральной библиотекой в HiAsm является KOL, где как и в Borland главным окном является невидимый Applet, то придется сильно попотеть, чтобы переделать все так, как вы этого хотите. Простая подмена кнопки Applet'a на кнопку главной формы оказалась не лучшим решением, а тратить время на его поиск я не собираюсь. Так что если сделаете все как надо - тогда поменяю.
|
|||
карма: 27 |
|
Ответов: 9906
Рейтинг: 351
|
|||
"Dilma" писал(а): Скорей всего это разница в ОС. Проверю, тогда скажу точнее..Возникло уточнение. Стоит EXE-шник - это означает не реагирует на пользователя. А фишки-то растосовал. А при этом запущен HiAsm и как раз на этом проекте. Переключаю проект в HiAsm - и все работает (после перезапуска EXE-шника)! Так что, возможно, так и было задумано. |
|||
карма: 9 |
|
Администрация
Ответов: 15295
Рейтинг: 1519
|
|||
За последние 3 дня я 5 раз менял код формы. так что выложу новую версию тогда продолжим тесты.
|
|||
карма: 27 |
|
10