Форум: "WinAPI";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
ВнизСмена цветовой палитры в винде Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c