Разместите нашу кнопку!

Новые статьи:

Programming articles

Создание сайтов на шаблонах

Множество вариантов работы с графикой на канве

Шифруем файл с помощью другого файла

Перехват API функций - Основы

Как сделать действительно хороший сайт

Создание почтового клиента в Delphi 7

Применение паскаля для решения геометрических задач

Управление windows с помощью Delphi

Создание wap сайта

Операционная система unix, термины и понятия

SQL враг или друг

Возникновение и первая редакция ОС UNIX

Оптимизация проекта в Delphi

Ресурсы, зачем нужны ресурсы

Термины программистов 20 века

Советы по созданию собственного сайта с нуля

Шифруем файл с помощью пароля

Фракталы - геометрия природы

Crypt - Delphi программа для шифрования

Рассылка, зачем она нужна и как ее организовать?

Учебник по C++ для начинающих программистов

Уроки для изучения ассемблера

Загадочный тип PCHAR

Средства по созданию сайтов

Операторы преобразования классов is и as

Borland Developer studio 2006. Всё в одном

Создание базы данных в Delphi, без сторонних БД


Software engineering articles



Монитор.

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

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;

Параметры:

  1. lpDevMode Структура с описанием видеорежима, на который мы хотим переключиться.
  2. 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
  1. Возвращаемое значение:
    • 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;



Новая коллекция изделий, серьги высокого качества.