Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Смена цветовой палитры в винде   Найти похожие ветки 

 
Ptushenko Denis ©   (2002-04-25 09:47) [0]

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


 
Ally ©   (2002-04-25 10:49) [1]

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


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;


Удачи.


 
Ally ©   (2002-04-25 11:02) [2]

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

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


 
Ally ©   (2002-04-25 11:07) [3]

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

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


 
Ally ©   (2002-04-25 11:36) [4]

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


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;



Страницы: 1 вся ветка

Текущий архив: 2002.06.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
1-77338
Project1
2002-06-13 00:53
2002.06.24
Спрятать приложение...


1-77359
dimich
2002-06-13 11:56
2002.06.24
Как можно узнать что прога запущена.


14-77565
den_c
2002-05-20 15:59
2002.06.24
Кто шмонает на тему лицензионого программного обеспечения


1-77391
galik
2002-06-13 15:49
2002.06.24
Компонент F1Book


1-77493
Kani
2002-06-12 14:28
2002.06.24
Команды DOS...