Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.11;
Скачать: CL | DM;

Вниз

Кнопки на панели задач   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
2-1314338415
Gevs
2011-08-26 10:00
2011.12.11
Мышь


2-1314252863
санек
2011-08-25 10:14
2011.12.11
Выполнение команды в cmd


1-1276603042
AIV2104
2010-06-15 15:57
2011.12.11
DCPcrypt для Delphi 7 и 2009 не ставиться из-за rtl.bcp


2-1314277947
Scott Storch
2011-08-25 17:12
2011.12.11
Почему warning?


6-1247681286
_alex__
2009-07-15 22:08
2011.12.11
Взаимодействие со службой по TCP