Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.011 c
1-77433
UserL
2002-06-11 11:21
2002.06.24
Никак не получаеться.


8-77509
trm111
2002-02-09 23:49
2002.06.24
Как заставить звуковую карту проиграть звук определенной


1-77443
kito
2002-06-10 09:04
2002.06.24
Как реализовать векторную графику в приложении


3-77253
xaem
2002-05-29 20:47
2002.06.24
Помогите с BDE


6-77518
Yakudza
2002-04-16 15:50
2002.06.24
Как вырубить прогу удаленно ?




   Наверх