![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| DriveSoftware |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 17.3.2003 Репутация: нет Всего: 4 |
HI !
Каким образом можно получить список все доступных видео режимов (разрешение - цвет)? |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 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)); для подсчета общего количества используемых цветов. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 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. |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
EnumDisplaySettings???
|
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Эта функция получает информацию о графическом режиме дисплея. Можно получить информацию для всех графических режимов делая серию вызовов.
Запусти Delphi, далее меню Help>Windows SDK и найди эту функцию. А в проект попробуй включить ссылки на WinTypes, WinProcs (я точно не помню) |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Насколько я знаю, WinTypes и WinProcs - это пережитки прошлого, начиная с дельфи 3(или может раньше, но я начинал именно с неё) используется юнит Windows
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |