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

Вниз

Отловить изменение числа мониторов. Проблема.   Найти похожие ветки 

 
DVM ©   (2006-12-27 16:12) [0]

Требуется отловить изменение числа мониторов. Если я делаю это примерно так:

procedure WMDisplayChange(var Message: TWMDisplayChange); message WM_DISPLAYCHANGE;

procedure TfrmMain.WMDisplayChange(var Message: TWMDisplayChange);
var
 h: THandle;
begin
 inherited;
 UpdateMonitorsList;
end;

то на момент прихода сообщения количество мониторов в Screen.Monitors не соответствует действительности. И разрешения мониторов тоже.

Как победить?


 
umbra ©   (2006-12-27 16:39) [1]

а почему WM_DISPLAYCHANGE должно свидетельствовать об изменении кол-ва мониторов?


 
DVM ©   (2006-12-27 16:41) [2]


> umbra ©   (27.12.06 16:39) [1]

Потому что оно приходит при изменении числа мониторов.

Если оно не свидетельствует об изменении числа мониторов почему в момент его прихода свойства Width и Height у каждого из мониторов в Screen.Monitors содержат полный бред.


 
umbra ©   (2006-12-27 16:49) [3]

в сдк написано, что оно приходит при изменении разрешения экрана. может это как-то и связано с кол-вом мониторов, но эта связь неочевидна


 
DVM ©   (2006-12-27 17:01) [4]

Еще окну приходит WM_SETTINGCHANGE но если я читаю Screen.Monitors по его приходу, то и число мониторов там неправильное и разрешения их тоже неправильные.


 
DVM ©   (2006-12-27 17:07) [5]

Что интересно, при создании новой формы объект Screen явно перечитывает список мониторов и их параметры. Если же форм не создается, то изменение количества мониторов не влияет на объект Screen.


 
umbra ©   (2006-12-27 17:23) [6]

так почему бы не проверять этот список, по таймеру, например?


 
clickmaker ©   (2006-12-27 17:28) [7]

может поотлавливать WM_DEVMODECHANGE или WM_DEVICECHANGE?


 
DVM ©   (2006-12-27 17:42) [8]


> umbra ©   (27.12.06 17:23) [6]

В том то и дело по таймеру не получается. Если в приложении не создаются / удаляются новые формы список мониторов объект Screen не обновляет.

Вообще в модуле Forms объект Screen вызывает функцию EnumDisplayMonitors() только один раз - при своем создании.

Че то я так и не понял почему список мониторов обновляется при создании новой формы.


 
DVM ©   (2006-12-27 17:50) [9]

У TScreen есть такое:

function TScreen.GetMonitorCount: Integer;
begin
 if FMonitors.Count = 0 then
   Result := GetSystemMetrics(SM_CMONITORS)
 else
   Result := FMonitors.Count;
end;

Глупость какая то. При создании он считывает количество мониторов и в дальнейшем перечитывает их количество только если его счетчик = 0.


 
DVM ©   (2006-12-27 18:05) [10]


> umbra ©   (27.12.06 17:23) [6]


> так почему бы не проверять этот список, по таймеру, например?

Если Вы имеете ввиду перечитывать по таймеру не список Screen.Monitors а с пом EnumDisplayMonitors() тогда все ок. И даже не по таймеру а в обработчике WM_SETTINGCHANGE.

Screen.Monitors - никуда не годится.



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

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

Наверх





Память: 0.46 MB
Время: 0.049 c
15-1170150334
legat
2007-01-30 12:45
2007.02.18
Ручная вставка в TDBGridEh


8-1145444606
hosco
2006-04-19 15:03
2007.02.18
Информация о видео-файле


2-1170176286
NikNet
2007-01-30 19:58
2007.02.18
Мне нужно получить строку анализа от SQL от компонента ADOQuery


4-1159539919
Dmitry_177
2006-09-29 18:25
2007.02.18
Кнопка на API


15-1169567048
Kerk
2007-01-23 18:44
2007.02.18
Отстрел собак





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