Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Вниз

Окна на desktop черепицей, если одно сделано на Delphi   Найти похожие ветки 

 
sman   (2007-10-18 12:51) [0]

Доброго времени всем!
Windows XP, Delphi 7 или Turbo Delphi Explorer (эффект проявляется при использовании любой из них)

На десктопе находятся два развернутых окна. Одно из них - окно программы, написанной на Delphi, другое - написанное на чем-нибудь другом, например, IExplorer.

Щелкаем правой кнопкой мыши на таскбаре, в меню выбираем "Окна слева направо" (или "Окна сверху вниз" - эффект аналогичный). В результате окна располагаются так, как будто их не два, а три, на месте третьего виден десктоп.
Поиск в интернете ничего не дал.

Я догадываюсь, что причина в том, что в Delphi на самом деле не одно окно а два (TApplication и TMainForm), но в какую сторону копать - может кто подскажет?
Заранее спасибо всем.


 
sman   (2007-10-18 13:48) [1]

Да, проблему озвучить забыл: как заставить программу, писанную на Delphi, правильно вести себя в этом случае?


 
vpbar ©   (2007-10-18 15:53) [2]

Хз. Как вариант перехват сообщений о смене размера окна посылаемых окну Application.Handle и передача их главному окну формы. Это если explorer-shell посылает такое сообщение.
Только нафик это надо. все равно  эта функция укладки окон в часто глючит и поэтому ей редко пользуются, имхо.


 
sman   (2007-10-18 16:11) [3]

Согласен, что надо перехватывать. Только скорее всего надо перехватывать подсчет shell"ом количества окон, тогда и размеры устанавливать не понадобится, если подсчет будет вестись верно.

Функция редко используемая, но некоторые пользователи спрашивают, почему такое поведение. Насчет ее глючности сказать ничего не могу, может это мнение сложилось как раз из-за такого поведения делфийских приложений?

В общем, наверно, в MSDN.
Спасибо.


 
Eraser ©   (2007-10-19 11:04) [4]


> sman   (18.10.07 12:51) 

в Delphi 2007 проблему вроде как решили, но криво. см. свойство TApplication.MainFormOnTaskbar.
Все бы хорошо, только тогда остальные формы становятся все время поверх главной.
есть и другой вариант решить проблему, только он громоздкий и на работе исходников нету.


 
passing by   (2007-10-20 12:38) [5]

Полностью решает указанную проблему вызов

   SetWindowLong(Application.Handle, GWL_EXSTYLE,
       GetWindowLong(Application.Handle, GWL_EXSTYLE) or ws_ex_toolwindow);

Возникает другая - окно главной формы после этого будет сворачивается не в таскбар, а на десктоп, но ему можно установить WS_EX_APPWINDOW или, м.б. TApplication.MainFormOnTaskbar? Скорее всего, придется ковыряться в оконной процедуре главной формы, слишком там у них все связано, у Application и MainForm



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.11.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.063 c
3-1183460384
Rule
2007-07-03 14:59
2007.11.11
Подскажите пожалуйста DAC компоненты под Delphi7 для доступа к MS


2-1192626983
Elec3C
2007-10-17 17:16
2007.11.11
Inc, Dec.


2-1192871298
sydenis
2007-10-20 13:08
2007.11.11
как удалить текст из файла?


2-1192454614
ANTPro
2007-10-15 17:23
2007.11.11
Выделение прозрачным прямоугольником


4-1175083353
Darth Avenger
2007-03-28 16:02
2007.11.11
Получить изображение с USB-камеры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский