Форум: "Media";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
ВнизDirectX и Delphi. Мультимониторность. Найти похожие ветки
← →
KilkennyCat (2002-04-21 03:31) [0]Используя DelphiX, создать что-либо с Директиксом - не проблема.
Но проблема возникла при использовании двух мониторов с видеокартой Матрокс 450 (двухголовая). DelphiX позволяет создать список драйверов видеоустройств с помощью енумерате, но она видит только две разные видеокарты, а не двухголовость матрокса.
ЕнумератеЕкс видит двухголовость, но явно не описана в DelphiX. В заголовках Джеди все описано, но выдает какую-то белиберду, использовать которую в дальнейшем для переключения приложения с директиксом сложновато. Может, кто-нибудь подскажет, как грамотно создавать директикс на втором мониторе с фуллскрином?
← →
KilkennyCat (2002-04-22 12:37) [1]Оказывается, не сюда поместил вопрос. Прошу прощения, не заметил другого форума. С вопросом разобрался, если кого-то интересует эта особенность Директикса - спрашивайте.
← →
Сергей Чурсин (2002-04-24 02:01) [2]Интересно... Раскажи вкратце (чтоб тебе не напрягаться :) )...
← →
KilkennyCat (2002-04-26 03:45) [3]Рассказываю :)
создаем типчик
type
TDirectDrawEnumEx = record
GUID: TGUID;
DriverDescription: String[100];
DriverName: String[100];
end;
PDirectDrawEnumEX = ^TDirectDrawEnumEX;
объявляем:
private
listadapter : Tlist;
lladap : PDirectDrawEnumEX;
AD, BD : IDirectDraw7;
исчо одну функцию:
implementation
{$R *.dfm}
function EnumDevices(lpGUID: PGUID; lpDriverDescription: LPSTR; lpDriverName: LPSTR; lpContext: Pointer; Monitor: HMonitor):BOOL; stdcall;
var
p: PDirectDrawEnumEx;
begin
New( p );
if lpGUID = nil then
ZeroMemory( @(p.GUID), sizeof(p.GUID) )
else p.GUID := lpGUID^;
p.DriverDescription := lpDriverDescription;
p.DriverName := lpDriverName;
TList(lpContext).Add( p );
Result := BOOL(DDENUMRET_OK);
end;
теперь можно получить абсолютно все видеодрайверы:
listadapter := Tlist.Create;
DirectDrawEnumerateEx(EnumDevices, listadapter, $00000001 or $00000002 or $00000004);
прошу прощение за несимвольные флаги - их всего три и нужны все.
Я знаю, что у меня их три (первые два - дублируют друг друга), обращаюсь к третьему:
lladap := listadapter[2];
и создаем объекты на два монитора:
DirectDrawCreateEx (nil, AD, IDirectDraw7, nil);
DirectDrawCreateEx (@lladap.GUID, BD, IDirectDraw7, nil);
AD.SetCooperativeLevel(Handle, DDSCL_SETFOCUSWINDOW);
AD.SetCooperativeLevel(Handle, DDSCL_ALLOWREBOOT or DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE);
ad.SetDisplayMode(800,600,16,0,0);
BD.SetCooperativeLevel(Handle, DDSCL_SETFOCUSWINDOW or DDSCL_CREATEDEVICEWINDOW or DDSCL_ALLOWREBOOT or DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN);
Bd.SetDisplayMode(640,480,8,0,0);
поверхности создаются стандартно. Разобраться помог Microsoft SDK DirectX 7
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c