Зміна роздільної здатності екрану

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

роздільної

Мал. 2.8. Форма майбутньої програми

< Public declarations >Таким чином ми оголосили масив з 255 елементів типу TDevMode.

1. Пристрій, котрому треба перераховувати режими. Тут потрібно щось вказувати лише якщо у системі кілька моніторів. Якщо ви простий смертний і користуєтеся одним монітором, можна сміливо вказувати nil.

2. Тут вказується індекс режиму, який нам потрібний. У наведеному коді вказана змінна i, яка перед кожним викликом збільшуватиметься на 1, а значить ми будемо щоразу отримувати наступний за рахунком режим.

3. Змінна TDevMode типу, в яку потрібно записати параметри режиму. Сюди підставляється ще один елемент масиву.

Виклик функції відбувається між операторами while та do:

while EnumDisplaySettings(nil, i, Modes[i]) do Це означає, що поки результат виклику функції EnumDisplaySettings не стане помилкою, будуть виконуватись оператори циклу, розміщені між begin та end. У цьому циклі додається рядок до списку ListBox, у якому записані параметри знайденого режиму, та лічильник i збільшується на одиницю.

Коли додається новий елемент до списку ListBox, то як рядок передається така інформація:

Modes [i] .dmBitsPerPel – глибина (кількість біт на піксель) кольору знайденого режиму.

Modes[i].dmPelsWidth – ширина екрану.

Modes[i].dmPelsHeight – висота екрану.

Modes[i].dmDisplayFrequency - частота розгортки.

роздільної

Всі рядки розбиті на чотири колонки:

1. Глибина (кількість біт на піксель) кольору знайденого режиму.

2. Ширина екрана.

3. Висота екрана.

4. Частотарозгортки.

При натисканні кнопки Зміна режиму необхідно встановити виділений у списку режим. Для цього в обробнику натискання другої кнопки пишемо наступний код:

Властивість ListBoxl. itemlndex вказує на виділений елемент у списку. Це означає, що для того, щоб знайти потрібну структуру для виділеного

Елементи У Масиві Modes, треба записати Modes [ListBoxl. Itemlndex]. Все досить просто, тому що елементи в списку ListBoxi знаходяться в тому ж порядку, що й відповідні структури TDevMode у масиві Modes.

1. dm__bitsperpel - змінюватиметься кількість біт на піксель.

2. dmpelswidth - змінюватиметься ширина екрану.

3. dm_pelsheight - змінюватиметься висота екрану.

4. - змінюватиметься частота розгортки.

5. dm_displayflags – змінити прапори дисплея.

Якщо ви хочете змінити тільки глибину кольору, то як dmFields достатньо вказати тільки dmbitsperpel. Я змінюватиму все, тому перерахував усі прапори через оператор or, який об'єднує все в одне ціле.

Після заповнення цієї властивості можна викликати процедуру ChangeDisplaySettings. У неї два параметри:

1. Структура типу TDevMode.

2. Спосіб переходу.

Як спосіб переходу можна вказати одне з наступних значень:

1.0 - якщо просто поставити нуль, то роздільна здатність екрана зміниться динамічно.

2. cds_updateregistry - у цьому випадку роздільна здатність також зміниться динамічно, але з оновленням параметрів у реєстрі.

Деякі вважають, що якщо часто міняти роздільну здатність екрана, можна зіпсувати або спалити монітор. Так, це правильно, але тільки для старих моделей. Сучасні монітори захищені від такої примітивної атаки, тому зроблений на цьому ефекті вірус не завдасть великої шкоди.

здатності

Мал. 2.10. Побічний ефект зміни роздільної здатності екрану на менше

зміна

Мал. 2.11. Побічний ефект зміни роздільної здатності екрану на більше

На компакт-диску директорії \Приклади\Глава 2\Video Mode ви можете побачити приклад цієї програми.

На компакт-диску в директорії Mode можна побачити кольорові версії малюнків цього розділу.