Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Screen, Список режимов 
:(
    Опции темы
DriveSoftware
Дата 11.9.2003, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 17.3.2003

Репутация: нет
Всего: 4



HI !

Каким образом можно получить список все доступных видео режимов (разрешение - цвет)?
PM MAIL WWW ICQ   Вверх
Akella
Дата 11.9.2003, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Кол-во цветов текущего режима
GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *
GetDeviceCaps(Form1.Canvas.Handle, PLANES)

Для получения общего количества битов, используемых для получения цвета используются следующие значения.
1 = 2 colors bpp
4 = 16 colors bpp
8 = 256 colors bpp
15 = 32768 colors (возвращает 16 на большинстве драйверов) bpp
16 = 65535 colors bpp
24 = 16,777,216 colors bpp
32 = 16,777,216 colors (то же, что и 24) bpp
Вы можете использовать:
NumberOfColors := (1 shl
(GetDeviceCaps(Form1.Canvas.Handle, BITSPIXEL) *
GetDeviceCaps(Form1.Canvas.Handle, PLANES));
для подсчета общего количества используемых цветов.
PM MAIL   Вверх
Akella
Дата 11.9.2003, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Можно поменять режимы дисплея:

Нужно использовать EnumDisplaySettings() для получения полного списка доступных режимов. Затем ChangeDisplaySettings() - для изменения текущего режима. Обрати внимание, что многие драверы не меняют режим без перезагрузки.

--------------------------------------------------------------------------------
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin;

type
PdmArray = ^TDmArray;
TDmArray = array[0..0] of TDeviceMode;

type
TForm1 = class(TForm)
Memo1: TMemo;
SpinEdit1: TSpinEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
lpDmArray : PDmArray;
NumModes : integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
i : integer; // auto-initialized to zero
MoreModes : bool;
dm : TDeviceMode;

begin
Memo1.Lines.Clear;
MoreModes := True;

while MoreModes do begin
MoreModes :=
EnumDisplaySettings(nil,
i,
dm);
Memo1.Lines.Add('Mode ' +
IntToStr(i) + ': ' +
IntToStr(dm.dmBitsPerPel) + ' Bits Per Pixel ' +
IntToStr(dm.dmPelsWidth) + ' x ' +
IntToStr(dm.dmPelsHeight));
Inc(i);
end;

NumModes := i;
SpinEdit1.MinValue := 0;
SpinEdit1.MaxValue := NumModes;

GetMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
FillChar(lpDmArray^, sizeof(TDeviceMode) * NumModes, #0);

{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$ENDIF}
for i := 0 to (NumModes - 1) do
EnumDisplaySettings(nil,
i,
lpDmArray[i]);
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ReturnVal : LongInt;
begin
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$ENDIF}
ReturnVal := ChangeDisplaySettings(lpDmArray[SpinEdit1.Value],
CDS_UPDATEREGISTRY);
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
with Memo1.Lines do begin
case ReturnVal of
DISP_CHANGE_SUCCESSFUL: Add('DISP_CHANGE_SUCCESSFUL');
DISP_CHANGE_RESTART : Add('DISP_CHANGE_RESTART');
DISP_CHANGE_BADFLAGS : Add('DISP_CHANGE_BADFLAGS');
DISP_CHANGE_FAILED : Add('DISP_CHANGE_FAILED');
DISP_CHANGE_BADMODE : Add('DISP_CHANGE_BADMODE');
DISP_CHANGE_NOTUPDATED: Add('DISP_CHANGE_NOTUPDATED');
end;
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
end;

end.

PM MAIL   Вверх
dm9
Дата 12.9.2003, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



EnumDisplaySettings???
PM MAIL ICQ   Вверх
Akella
Дата 12.9.2003, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Эта функция получает информацию о графическом режиме дисплея. Можно получить информацию для всех графических режимов делая серию вызовов.
Запусти Delphi, далее меню Help>Windows SDK и найди эту функцию. А в проект попробуй включить ссылки на WinTypes, WinProcs (я точно не помню)
PM MAIL   Вверх
Baa
Дата 12.9.2003, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



Насколько я знаю, WinTypes и WinProcs - это пережитки прошлого, начиная с дельфи 3(или может раньше, но я начинал именно с неё) используется юнит Windows


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0475 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.