Форум: "Основная";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
ВнизКнопки на панели задач Найти похожие ветки
← →
Kukolev © (2010-06-18 09:08) [0]Здравствуйте, уважаемые. Срочно нужна Ваша помощь по следующей проблеме: в моей программе, написанной на Delphi 7 проявляется глюк - в ходе выполнения долгой операции на панели задач внезапно появляется новая кнопка моего приложения! При этом число таких ни чем не ограничено - пользователи выявляли до пяти штук! Если необходимо, то могу выложить скрины. Прошу помощи, т.к. отчаялся избавиться от данной ошибки.
← →
KilkennyCat © (2010-06-18 09:39) [1]да, давай скрины. Тут куча экстрасенсов, по фотке исходники угадывают.
← →
Anatoly Podgoretsky © (2010-06-18 10:17) [2]Отключи screen saver
← →
Kukolev © (2010-06-18 12:30) [3]Про скрины я от отчаяния. По поводу screen saver - нет его. По поводу исходников - все выложить не могу, т.к. приложение насчитывает ~300000 строк кода, 200 форм.
Интересует механизм создания кнопок на панели задач и советы тех, кто с этим сталкивался. Буду рад любой полезной информации
← →
0x00FF00 (2010-06-18 13:04) [4]> в ходе выполнения долгой операции
Попробуем протелепатировать.
Наверняка есть какая-то "неучтённая" форма, которая на экране не отображается, но имеет нужные атрибуты для появления на панели задач.
Локализовать проблему, имхо, можно модулем того потока, из которого Вы выполняете эту "долгую операцию", и исходящими зависимостями из него.
Вообще говоря, причин могут быть тысячи, причём самые экстравагантные.
Мне как-то встречался гениальный код, где главное окно во время операции на массиве при любом щелчке по ней внезапно исчезала с экрана. Трассировка дизассемблером показала, что длина массива была рассчитана неверно, и в итоге последний элемент оказывался записанным в переменные X и Y, по которым рассчитывалась позиция окна, а мышеклик инициировал ресайз.
← →
KilkennyCat © (2010-06-18 13:05) [5]
> Интересует механизм создания кнопок на панели задач
Application.MainFormOnTaskbar := True;
← →
0x00FF00 (2010-06-18 13:05) [6]
> по ней
по "клиентской" части окна, имеется в виду.
← →
Игорь Шевченко © (2010-06-18 13:16) [7]причина одна - где-то меняется Application или Application.Handle или форма создается от неведомого Owner|Parent
← →
Kukolev © (2010-06-18 17:27) [8]Обычно косяк проявляется таким образом:
1. Создается форма MyForm := TMyForm.Create(Self)
2. MyForm.Show
3. Начало выполнения длительного SQL запроса или другой длительной операции
4. Появление лишней кнопки (!!!)
5. Окончание длительной операции
6. MyForm.Close;
7. Кнопка остается на панели задач.
Самое страшное, что кнопка появляется не всегда - характер появления случаен.
← →
~AQUARIUS~ © (2010-06-18 20:14) [9]Посмотрите здесь: http://www.transl-gunsmoker.ru/2008/12/blog-post_08.html
Может, скорее найдете ответ на свой вопрос сами, чем все будут здесь угадывать
← →
DVM © (2010-06-18 20:47) [10]Вообще, странно, что MS не проверяет периодически соответствие кнопок живым окнам. Все разговоры про то, что это сделано из экономии ресурсов имхо может и имели смысл во времена 386 компьютеров и 4 мб оперативной памяти, но сейчас...Хотя сейчас может и уже проверяет.
У гансмокера неправильно кстати сказано:
> Фильтрация окон, которые являются "таскбаро-непригодными",
> происходит внутри USER32, которая уведомляет панель задач
> (или любого, кто установил хук WH_SHELL) с помощью уведомлений
> HSHELL_* только об окнах, которые изменили своё состояние
> и являются "пригодными для панели задач". Таким образом,
> код панели задач может быть выгружен в файл подкачки, если
> для него нет никакой работы.
Это не совсем так, не все окна для которых пришло уведомление появляются в панели задач.
← →
Kukolev © (2010-06-22 08:34) [11]Появилась новая особенность - одна из лишних кнопок задач соответствует главной форме приложения - имеет такой-же Caption. Как программа может создавать новую кнопку для главной формы? Ведь эта кнопка изначально генерится при старте программы?
← →
~AQUARIUS~ © (2010-06-22 10:28) [12]Очевидно по ссылке вы не были. Кнопки делает не программа, кнопки делает Панель задач. Если ваше окно становится "пододящим" для кнопки - она сделает кнопку; когда оно становится "неподходящим" - убирает. Если ваше окно было "подходящим" но в силу каких-то обстоятельств оно стало "неподходящим" неправильно, кнопка так и останется "висеть". Gunsmoker пишет, в каких случаях окно становится "кнопочным"; вам нужно почитать и разобраться - самому - потому что без кода вам никто ничего не сможет сказать
← →
Омлет © (2010-06-22 12:07) [13]> Gunsmoker пишет
Gunsmoker переводит )
← →
~AQUARIUS~ © (2010-06-22 13:12) [14]Считайте опечатка :D Но вообще он еще и пишет, это в данном случае перевод
← →
Kukolev © (2010-06-23 16:01) [15]Зметил еще одну ошибку - еще интереснее - аналогичная ситуация возникла у самой IDE Delphi! После нескольких часов работы над проектом появилась вторая кнопка Delphi, левый клик по которой ничего не дает, но если кликнуть правой кнопкой и в меню выбрать "Закрыть", то тут-же закрывается и Delphi и обе кнопки. Подскажите, что делать и куда копать?
← →
~AQUARIUS~ © (2010-06-23 16:03) [16]
> Подскажите, что делать
Менять Windows
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.12.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c