|

Delphi
Xakep, номер #044, стр. 044-058-2
Modes[i].dmBitsPerPel - глубина (количество бит на пиксель) цвета найденного режима.
Modes[i].dmPelsWidth - ширина экрана.
Modes[i].dmPelsHeight - высота экрана.
Modes[i].dmDisplayFrequency - частота развертки.
Проверим!!!
Можешь теперь запустить этот промежуточный вариант нашей проги и нажать на кнопку "Перечислить видеорежимы". Список ListBox должен заполниться строками, содержащими информацию о найденных видеорежимах (рисунок 2).
Все строки разбиты как бы на четыре колонки:
1. Глубина (количество бит на пиксель) цвета найденного режима.
2. Ширина экрана.
3. Высота экрана.
4. Частота развертки.
Смена видеорежима
По нажатию второй кнопки "Смена режима" мы должны установить выделенный в списке режим. Для этого по нажатию второй кнопки пишем следующий код:
procedure TForm1.Button2Click(Sender: TObject);
begin
Modes[ListBox1.ItemIndex].dmFields := DM_BITSPERPEL or
DM_PELSWIDTH or DM_PELSHEIGHT or
DM_DISPLAYFLAGS or DM_DISPLAYFREQUENCY;
ChangeDisplaySettings(Modes[ListBox1.ItemIndex], CDS_UPDATEREGISTRY);
end;
ListBox1.ItemIndex - указывает на выделенный элемент в списке. Это значит, что для того, чтобы найти нужную структуру для выделенного элемента, в массиве Modes надо записать Modes[ListBox1.ItemIndex]. Все достаточно просто, потому что элементы в списке ListBox1 находятся в том же порядке, что и соответствующие структуры TDevMode в массиве Modes.
Прежде чем менять видеорежим, надо в структуре Modes заполнить свойство dmFields, в котором указывается, что именно менять. Здесь ты можешь указать сочетание следующих флагов:
1. DM_BITSPERPEL - будет меняться количество бит на пиксель.
2. DM_PELSWIDTH - будет меняться ширина экрана.
3. DM_PELSHEIGHT - будет меняться высота экрана.
4. DM_DISPLAYFREQUENCY - будет меняться частота развертки.
5. DM_DISPLAYFLAGS - изменить флаги дисплея.
Если ты хочешь поменять только количество бит на пиксель (глубину цвета), то в свойство dmFields достаточно указать только DM_BITSPERPEL. Я буду менять все, поэтому перечислил все флаги через оператор "or", который объединяет все в одно целое.
После заполнения этого свойства можно вызывать процедуру ChangeDisplaySettings. У нее два параметра:
1. Структура типа TdevMode.
2. Флаги.
В качестве флага можно указать одно из следующих значений:
1. Ноль - если просто поставить ноль, то разрешение экрана изменится динамически.
2. CDS_UPDATEREGISTRY - в этом случае разрешение также изменится динамически, но с обновлением параметров в реестре.
3. CDS_TEST - если указать этот флаг, то произойдет только тест возможности переключения видеорежима. Реального переключения не будет.
Побочный эффект
Очень интересный эффект происходит при смене видеорежима, если указать в качестве флага 0. В этом случае режим меняется, но окна не реагируют на эту смену и остаются в том же положении. Посмотри на рисунок 3, на котором я сменил режим на меньший и при этом исчезла панель Windows с кнопкой "Пуск". Она просто не отреагировала на смену режима. На рисунке 4 показан экран, на котором я, наоборот, сменил режим на больший, и тут также панель не отреагировала и осталась на много выше нижней части экрана.
Назад на стр. 044-058-1 Содержание Вперед на стр. 044-058-3
|