Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Смена цветовой палитры в винде [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Ptushenko Denis ©   (2002-04-25 09:47:00) 

Нужно узнать максимальную палитру которую поддерживает видео карта и поменять на нее. Вобщем нужно установить (True Color (32)) !


Ally   (2002-04-25 11:36:00) [1]

А вот, пожалуй, наиболее полный рабочий вариант метода:


procedure ChangeDisplayMode(hwnd: HWND; NewValue: Integer);
var
BitsPerPixel: Integer;
DevMode: TDevMode;
MaxFreq: Integer;

function IsSupportThisMode: BOOL;
var
iModeNum: DWORD;
begin
Result := FALSE;
ZeroMemory(@DevMode, SizeOf(TDevMode));
iModeNum := 0;
MaxFreq := 0;
while EnumDisplaySettings(nil, iModeNum, DevMode) = TRUE do
begin
iModeNum := iModeNum + 1;
if (DevMode.dmBitsPerPel = NewValue) then Result := TRUE;
if devMode.dmDisplayFrequency > MaxFreq then
MaxFreq := devMode.dmDisplayFrequency;
end;
end;

begin
BitsPerPixel := GetDeviceCaps(GetDC(hwnd), BITSPIXEL);
ZeroMemory(@DevMode, SizeOf(TDevMode));
if (BitsPerPixel <> NewValue) and IsSupportThisMode then
begin
with DevMode do
begin
dmSize := SizeOf(TDevMode);
dmFields := DM_BITSPERPEL;
dmBitsPerPel := NewValue;
end;
ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);
with DevMode do
begin
dmSize := SizeOf(TDevMode);
dmFields := DM_DISPLAYFREQUENCY;
dmDisplayFrequency := MaxFreq;
end;
ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);
end;
end;


Ally   (2002-04-25 11:07:00) [2]

В добавление к уже сказанному:

Прямой метод узнать режимы, поддерживаемые видюхой - ф-ция EnumDisplaySettings().


Ally   (2002-04-25 11:02:00) [3]

Sorry :) Я продемонстрировал, в принципе, скоропалительное решение, не учитывающее того, как узнать макс. палитру, которую поддерживает видюха... Здесь я мог бы предложить косвенный метод того, как это узнать:

используем ту же ф-цию ChangeDisplaySettings(), но вместо флага CDS_UPDATEREGISTRY, ставим флаг CDS_TEST и анализируем значение, возвращаемое функцией (в хелпе все написано об этом). Также я не учел момента анализа значения параметра NewValue, но думаю, что ведь это не сложно будет сделать? :)


Ally   (2002-04-25 10:49:00) [4]

Я делал это так:


procedure ChangePalette(hwnd: HWND; NewValue: Integer);
var
BitsPerPixel: Integer;
DevMode: TDevMode;

begin
BitsPerPixel := GetDeviceCaps(GetDC(hwnd), BITSPIXEL);
ZeroMemory(@DevMode, SizeOf(TDevMode));
if (BitsPerPixel <> NewValue) then
begin
with DevMode do
begin
dmSize := SizeOf(TDevMode);
dmFields := DM_BITSPERPEL;
dmBitsPerPel := NewValue;
end;
ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);
end;
end;


Удачи.


Наверх

Титульная страница Поиск, карта сайта Написать письмо