Главная страница
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.331 c
3-77300
Oleg_er
2002-05-31 06:27
2002.06.24
нужна консультация BDE->Oracle?


6-77537
SourceNetworks
2002-04-18 09:33
2002.06.24
Отправит сообщение по сети


7-77654
DANTIST
2002-03-23 17:44
2002.06.24
Как мне отлавливать переключение раскладки клавиатуры??


4-77663
Ptushenko Denis
2002-04-25 09:47
2002.06.24
Смена цветовой палитры в винде


3-77317
yozhik
2002-05-30 13:21
2002.06.24
Нахождение SQL Serverov