Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1313045575
delpfir
2011-08-11 10:52
2011.12.11
DataSet+DLL+Connection


15-1313664786
Юрий Зотов
2011-08-18 14:53
2011.12.11
К знатокам регулярных выражений


2-1314799215
Васюня
2011-08-31 18:00
2011.12.11
Пожлуйста, как нати все файлы в папке!


15-1314177562
P
2011-08-24 13:19
2011.12.11
Состояние/позиция окна в Windows 7


3-1268482847
Grab3
2010-03-13 15:20
2011.12.11
Не применяются изменения в таблице InterBase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский