» Управление монитором Borland Delphi. . . Блог программистов


Блог программистов






20072 Мар

Управление монитором

Для начала узнаем, с какой видеокартой мы работаем:

procedure TForm1.Button1Click(Sender: TObject);
var
lpDisplayDevice: TDisplayDevice;
dwFlags: DWORD;
cc: DWORD;
begin
Memo1.Clear;
lpDisplayDevice.cb := sizeof(lpDisplayDevice);
dwFlags := 0;
cc := 0;
while EnumDisplayDevices(nil, cc, lpDisplayDevice, dwFlags) do
begin
Inc(cc);
Memo1.lines.add(lpDisplayDevice.DeviceString);
end;
end;

Теперь разместим на форме ListBox и Button. В обработчике создания формы пишем:

procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
DevMode: TDevMode;
begin
i:=0;
while EnumDisplaySettings(nil,i,DevMode) do
begin
with Devmode do
ListBox1.Items.Add(Format('%dx%d %d Colors',
[dmPelsWidth,dmPelsHeight,1 shl dmBitsperPel]));
Inc(i);
end;
end;

Вы увидите все возможные комбинации разрешений и цветов, которые поддерживает дисплей. Теперь пишем в нажатии на кнопку:

procedure TForm1.Button1Click(Sender: TObject);
var
DevMode: TDeviceMode;
liRetValue: Longint;
begin
if EnumDisplaySettings(nil,Listbox1.ItemIndex,Devmode) then
liRetValue := ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);
SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0);
end;

function ChangeDisplaySettings(var lpDevMode: TDeviceMode; dwFlags: DWORD): Longint; stdcall;

Параметры:
lpDevMode Структура с описанием видеорежима, на который мы хотим переключиться.
dwFlags Определяет как будет изменен видеорежим.
0 — Немедленное изменение видеорежима. Установка данного флага возвращает в видеорежим по умолчанию, установленному в реестре, если он был изменен с применением флага CDS_FULLSCREEN, при этом первый параметр функции должен быть nil и флаги равны 0.
CDS_UPDATEREGISTRY — Видеорежим будет изменен немедленно и информация записана в реестр в пользовательский профиль.
CDS_TEST — Запрос теста видеорежима средствами Windows
CDS_FULLSCREEN — Установка видеорежима временна.
CDS_GLOBAL — Видеорежим будет изменен для всех пользователей данной машины. Иначе видеорежим меняется только для текущего пользователя. Используется вместе с флагом CDS_UPDATEREGISTRY.
CDS_SET_PRIMARY — Видеорежим становится первичным.
CDS_RESET — Параметры видеорежима будут изменены, даже если совпадают с текущими.
CDS_NORESET — Изменения будут записаны в реестр, но не вступят в силу. Используется с флагом CDS_UPDATEREGISTRY
Возвращаемое значение:
DISP_CHANGE_SUCCESSFUL Изменения прошли успешно.
DISP_CHANGE_RESTART Необходима перезагрузка для вступления изменений в силу
DISP_CHANGE_BADFLAGS Передан неверный набор флагов
DISP_CHANGE_BADPARAM Неверные параметры.
DISP_CHANGE_FAILED Драйвер видеоустройства не смог установить режим
DISP_CHANGE_BADMODE Видеорежим не поддерживается
DISP_CHANGE_NOTUPDATED Windows NT/2000: Ошибка записи в реестр

После этого Вам достаточно выбрать в ListBox нужную комбинацию и изменить разрешение нажатием на Button.

Внимание:
Не рекомендуется устанавливать значение видео-режима, который не присутствует в списке доступных. Это может привести к мерцанию экрана либо вообще к исчезновению изображения.
Многие адаптеры требуют перезагрузку компьютера при смене разрешения.
SendMessage используется для оповещения всех окна о смене видеорежима.

При изменениях видеорежима генерируется сообщение WM_DISPLAYCHANGE. Необходимо создать обработчик данного сообщения в вашем приложении.

private
procedure WMDisplayChange(var message:TMessage); message WM_DISPLAYCHANGE;
//...

procedure TForm1.WMDisplayChange(var message: TMessage);
begin
ShowMessage('Какие-то параметры дисплея изменили!');
inherited;
end;

Комментарии

  1. UnwizeTew
    11 июня, 2008 | 21:18

    То, что будет сказано, во многом применимо ко всякой любовной связи, будь вам девятнадцать или 90. Но когда вы впервые влюбляетесь в молодого мужчину 18—30 лет, помните о том, что он только что вынырнул из мира, где царит дух соперничества и рассказывают небылицы друзьям о своих сексуальных победах и опытах. Немалая часть мужской личности основывается на скользком склоне сексуального успеха. Мужчины достигают своего сексуального пика в районе 20 лет — в отличие от женщин, которые, вероятно, более восприимчивы и сексуально отзывчивы в возрасте примерно 30 лет. Грандиозное восьмикратное повышение уровня половых гормонов в возрасте 13— 14 лет означает, что ваш возлюбленный думает теперь о сексе ежедневно. Но у этого есть три стороны. Во-первых, он мечтает о любовной близости с вами. Во-вторых, о том же он думает и в отношении почти всякой другой женщины. В-третьих, он враль по природе — жаждет поразить равным образом и сверстников, и партнерш рассказами, демонстрирующими его мужественность. Так что любовная близ
    ость с ним в этом возрасте требует умения твердо отделять лес от деревьев и об-ман от реальности. Не обойтись без многократных физических поощрений — так что приготовьтесь проводить немало часов в обнаженном виде.
    Не забывайте, что до тех пор, пока мужчина не «проделал все» хотя бы однажды, он, скорее всего, будет оставаться в некотором роде созерцателем своего собственного наслаждения. Имеется в виду, что он будет пребывать как бы вне испытываемого, не будет расслаблен как нужно, а его мозг будет работать с задержкой, не поспевая за переживаниями. Он также может делать вид, что уже знает, что делает, а при этом отчаянно копировать ваши действия, пытаясь судорожно догадаться, чего вы хотите.
    Когда ваш возлюбленный настолько неопытен, требуется поощрение. Это не значит, что вы должны мириться с бесчувственностью. Но если он делает вид, что знает ваше тело лучше, чем вы, или обращается с вами так же грубо, как обращался бы с собой, или пытается водрузить свои ноги поверх ваших, когда следовало бы принять менее амбициозную позу, направляйте его. Выражайте свое желание в виде побуждений: «Мне нравится, когда ты делаешь X» — вместо «Не так, глупенький!» Если наступает утрата эрекции или преждевременный оргазм, не делайте из этого драму и не превращайте это в повод для выяснения отношений. Просто продолжайте целоваться. Почти наверняка никаких физических проблем у него нет, потому лучше всего перенесите ласки на другие части тела, пока вы не испытаете удовлетворения. У молодых мужчин эрекция способна восстанавливаться очень быстро.