procedure TForm1.FormCreate(Sender: TObject);
var
dm: TD3DDisplayMode;
pIdentifier: TD3DAdapter_Identifier8;
i, c: integer;
begin
FD3D:=nil;
FD3D:=Direct3DCreate8(D3D_SDK_VERSION);
if Assigned(FD3D) then begin
Ha a kapcsolat sikeresen létrejött, akkor az IDirect3D8 interfész GetAdapterModeCount függvény használatával lekérdezzük, hogy az elsődleges monitorkártyához hány lehetséges felbontási mód tartozik. Paraméterként a monitorkártya sorszámát kell megadnunk, vagy a D3DADAPTER_DEFAULT konstans használatával hivatkozhatunk az elsődlegesre.
c:=FD3D.GetAdapterModeCount(D3DADAPTER_DEFAULT);
A GetAdapterCount függvénnyel pedig azt határozhatjuk meg, hogy hány monitorkártya található a gépben.
Label1.Caption:='GetAdapterCount: '+IntToStr(FD3D.GetAdapterCount);
Label2.Caption:='GetAdapterModeCount: '+IntToStr(c);
Ezt követően kérjük le az elsődleges monitorkártya azonosító információit. Ehhez a GetAdapterIdentifier függvényt kell használnunk. Első paraméterében a monitorkártya sorszámát adhatjuk meg, a másodikban általában nulla érték használatos, vagy a D3DENUM_NO_WHQL_LEVEL konstans. Utóbbi esetben nem kapunk információt a WHQLLevel-ről. Harmadik paraméterben egy TD3DAdapter_Identifier8 struktúrát kell megadnunk, melyben a lekérdezett adatokat kapjuk vissza. Ha a lekérdezés sikeres volt, akkor a függvény visszatérési értéke D3D_OK lesz.
if FD3D.GetAdapterIdentifier(0, 0, pIdentifier)=D3D_OK then begin
ListBox2.Items.Add('Description: '+pIdentifier.Description);
ListBox2.Items.Add('Driver: '+pIdentifier.Driver);
ListBox2.Items.Add('DriverVersionLowPart: '+IntToStr(pIdentifier.DriverVersionLowPart));
ListBox2.Items.Add('DriverVersionHighPart: '+IntToStr(pIdentifier.DriverVersionHighPart));
ListBox2.Items.Add('VendorId: '+IntToStr(pIdentifier.VendorId));
ListBox2.Items.Add('DeviceId: '+IntToStr(pIdentifier.DeviceId));
ListBox2.Items.Add('SubSysId: '+IntToStr(pIdentifier.SubSysId));
ListBox2.Items.Add('Revision: '+IntToStr(pIdentifier.Revision));
ListBox2.Items.Add('DeviceIdentifier: '+GUIDToString(pIdentifier.DeviceIdentifier));
ListBox2.Items.Add('WHQLLevel: '+IntToStr(pIdentifier.WHQLLevel));
end;
Következő részfeladatunk lekérdezni az összes lehetséges felbontási és színmélységi módot, melybe átkapcsolhatjuk a monitorkártyát. Ezt egy ciklus segítségével tehetjük meg, mely nullától az összes lehetséges mód számáig megy. Ez utóbbit már lekérdeztük a GetAdapterModeCount függvénnyel.
if FD3D.EnumAdapterModes(D3DADAPTER_DEFAULT, i, dm)=D3D_OK then begin
A TD3DDisplayMode struktúrával cikksorozatunk első részében már találkoztunk. Ebből tudhatjuk meg a képernyő lehetséges szélességét, magasságát pixelben, a kép frissítési frekvenciát Hz-ben, valamint a színmélységre vonatkozó értéket.
ListBox1.Items.Add(IntToStr(dm.Width)+' x '+IntToStr(dm.Height)+#9+IntToStr(dm
.RefreshRate)+#9+IntToStr(dm.Format));
…