Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#1: 2004-09-11 02:19:02 ЛС | профиль | цитата
Для одной операции пришлось сделать 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
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2004-09-11 17:35:56 ЛС | профиль | цитата
Предложенный способ оригинален, но слишком громозский. Проблему исправил немного по другому.

Не знаю чем вам помешал существующий способ запуска окон при введение метода doFlashXXX, но когда я вставлял аналогичный метод в MainForm там все работало отлично. Правда мигание Caption потом убрал.
карма: 27
0
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2004-09-11 17:36:35 ЛС | профиль | цитата
Патч, исправляющий запуск окон
http//hiasm.spb.ru/path.rar
карма: 27
0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2004-09-11 23:33:16 ЛС | профиль | цитата
Оказалось, что после этого нововведения начинаются глюки с дочерними формами. Короче я все вернул назад. По поводу RBTRAY могу заметить, что её алготритм реализован не верно раз она не может работь со всеми окнами(всего-то требуется найти окно со стилем WS_EX_APPWINDOW и свернуть его).
карма: 27
0
Ответов: 9906
Рейтинг: 351
#5: 2004-09-12 01:15:21 ЛС | профиль | цитата
И все стало в полном соответствии с сообщением т.Сухова
Проверял на Fifteen.sha
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#6: 2004-09-12 01:35:10 ЛС | профиль | цитата
Скорей всего это разница в ОС. Проверю, тогда скажу точнее..
карма: 27
0
Гость
Ответов: 17029
Рейтинг: 0
#7: 2004-09-12 03:41:44 ЛС | профиль | цитата
Спор по поводу того, кому должен принадлежать значек в панели задач не имеет смысла. Это очевидно.

1) У всех приложений, например мелкософтных дефолных виндовых, это так. Решать, заводить ли себе значек там, должно каждое отдельное окно само. Короче, статистика. Я не могу утверждать, что такие глюки плодят только борландовские визуальные компиляторы, но пока знаю только его. Причем тех, кто ручками не поправил ситуацию с тем, что существует невидимое основное окно.

2) Вот еще наглядный пример (ReGet, Дистпетчер задач, WinAmp и т.п., сидящие обычно в трее). Приложение в обычном состоянии не имеет значка в панели задач (т.к. висит в трее), но как только открывается любое окно настроек, то именно это настроечное окно и создает значек. Или вот Word, IE, Opera (не в режиме MDI) - процесс один, а окон много.
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2004-09-12 14:40:54 ЛС | профиль | цитата
Я бы еще поспорил кто должен висеть в панели задач, но проблема - то вовсе не в этом. Поскольку центральной библиотекой в HiAsm является KOL, где как и в Borland главным окном является невидимый Applet, то придется сильно попотеть, чтобы переделать все так, как вы этого хотите. Простая подмена кнопки Applet'a на кнопку главной формы оказалась не лучшим решением, а тратить время на его поиск я не собираюсь. Так что если сделаете все как надо - тогда поменяю.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#9: 2004-09-13 15:06:36 ЛС | профиль | цитата
"Dilma" писал(а):
Скорей всего это разница в ОС. Проверю, тогда скажу точнее..

Возникло уточнение. Стоит EXE-шник - это означает не реагирует на пользователя. А фишки-то растосовал. А при этом запущен HiAsm и как раз на этом проекте. Переключаю проект в HiAsm - и все работает (после перезапуска EXE-шника)!

Так что, возможно, так и было задумано.
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2004-09-13 23:14:50 ЛС | профиль | цитата
За последние 3 дня я 5 раз менял код формы. так что выложу новую версию тогда продолжим тесты.
карма: 27
0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)