unit Enum1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  dddd,ddraw, StdCtrls;

type
  TForm1 = class(TForm)
    DDDD1: TDDDD;
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  rule:DDSurfaceDesc2; //どんな条件を満たしている画面モードを得るか？
  ddsd:Array[1..128] of DDSurfaceDesc2;  //ま、128個も画面モードのあるカードは無いでしょ
  nModes:Integer;
  i:Integer;
begin
  //とりあえず、無条件に全部列挙
  ZeroMemory(@rule,SizeOf(rule));
  rule.dwSize:=SizeOf(rule);  //dwSizeメンバのセットは忘れず！

  //画面モードの列挙、それ自体はこの一行だけ
  nModes:=DDDD1.EnumDisplayModes(DDEDM_REFRESHRATES,rule,ddsd);

  ListBox1.Items.Clear;
  Edit1.Text:=IntToStr(nModes);
  //どんな画面モードがあるか調べる
  For i:=1 to nModes do
    with ddsd[i] do
      ListBox1.Items.Add(Format('%dx%dx%d %dHz',[dwWidth,dwHeight,ddpfPixelFormat.dwRGBBitCount,dwRefreshRate]));
end;

end.
