Verfügbare Auflösungen: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Die Seite wurde neu angelegt: „Mit folgendem Code kann man sich in Delphi von Windows die Verfügbaren Auflösungen holen: <pascal> procedure TForm1.Button1Click(Sender: TObject); var DC: TH…“)
 
 
Zeile 1: Zeile 1:
 +
== Windows ==
 +
 
Mit folgendem Code kann man sich in Delphi von Windows die Verfügbaren Auflösungen holen:
 
Mit folgendem Code kann man sich in Delphi von Windows die Verfügbaren Auflösungen holen:
 
<pascal>
 
<pascal>
Zeile 34: Zeile 36:
 
   end;
 
   end;
 
end; </pascal>
 
end; </pascal>
 +
 +
== SDL ==
 +
 +
Folgendes Code Fragment zeigt eine Möglichkeit, plattformunabhängig mit der SDL die möglichen Auflösungen abzufragen
 +
<source lang="c">
 +
SDL_Rect** GetModes(int bpp)
 +
{
 +
int flags=SDL_DOUBLEBUF|SDL_FULLSCREEN;
 +
SDL_Rect **formats;
 +
SDL_PixelFormat format;
 +
const SDL_VideoInfo* info;
 +
 +
info=SDL_GetVideoInfo();
 +
if(info->hw_available)
 +
{
 +
flags|=SDL_HWSURFACE;
 +
}
 +
else
 +
{
 +
flags|=SDL_SWSURFACE;
 +
}
 +
 +
if(info->blit_hw)
 +
{
 +
flags|=SDL_HWACCEL;
 +
}
 +
format.BitsPerPixel=bpp; //Welche Farbtiefe soll abgefragt werden
 +
formats=SDL_ListModes(&format,flags); //Frage die SDL nach den Auflösungen mit den passenden Flags ab
 +
return formats;
 +
}</source>
 +
 +
Das letzte Element der List ist NULL, um die komplette Liste auszugeben dient das nächste Codefragment.
 +
 +
<source lang="c">
 +
void printList(SDL_Rect** modes)
 +
{
 +
    for(int i=0;modes[i]!=0;i++)
 +
    {
 +
        printf("%i x %i",modes[i].w,modes[i].h)
 +
    }
 +
}</source>
  
 
==Quelle==
 
==Quelle==
 
Gefunden von '''Slave''' irgendwo im Netz.
 
Gefunden von '''Slave''' irgendwo im Netz.

Aktuelle Version vom 2. April 2010, 13:04 Uhr

Windows

Mit folgendem Code kann man sich in Delphi von Windows die Verfügbaren Auflösungen holen:

procedure TForm1.Button1Click(Sender: TObject);

var
  DC: THandle;        // display context
  Bits: Integer;      // bits per pixel
  HRes: Integer;      // horizontal resolution
  VRes: Integer;      // vertical resolution
  DM: TDevMode;       // to Save EnumDisplaySettings
  ModeNum: Longint;   // video mode number
  Ok: Bool;
  fre: Integer;      // refresh rate
begin
  DC := GetDC(Handle);
  Bits := GetDeviceCaps(DC, BITSPIXEL);
  HRes := GetDeviceCaps(DC, HORZRES);
  VRes := GetDeviceCaps(DC, VERTRES);
  fre := GetDeviceCaps(DC, VREFRESH);
  // Show Current Resolution
  Edit1.Text := Format('%d bit, %d x %d', [Bits, HRes, VRes]);
  ReleaseDC(Handle, DC); // Show all modes available ModeNum := 0;  // The 1st one
  ModeNum := 0;
  EnumDisplaySettings(nil, ModeNum, DM);
  ListBox1.Items.Add(Format('%d bit, %d x %d bei %d Hz', [DM.dmBitsPerPel,
    DM.dmPelsWidth, DM.dmPelsHeight, Dm.dmDisplayFrequency]));
  Ok := True;
  while Ok do
  begin
    Inc(ModeNum); // Get next one
    Ok := EnumDisplaySettings(nil, ModeNum, DM);
    ListBox1.Items.Add(Format('%d bit, %d x %d bei %d Hz', [DM.dmBitsPerPel,
    DM.dmPelsWidth, DM.dmPelsHeight, Dm.dmDisplayFrequency]));
  end;
end; 

SDL

Folgendes Code Fragment zeigt eine Möglichkeit, plattformunabhängig mit der SDL die möglichen Auflösungen abzufragen

SDL_Rect** GetModes(int bpp)
{
	int flags=SDL_DOUBLEBUF|SDL_FULLSCREEN;
	SDL_Rect **formats;
	SDL_PixelFormat format;
	const SDL_VideoInfo* info;

	info=SDL_GetVideoInfo();
	if(info->hw_available)
	{
		flags|=SDL_HWSURFACE;
	}
	else
	{
		flags|=SDL_SWSURFACE;
	}

	if(info->blit_hw)
	{
		flags|=SDL_HWACCEL;
	}
	format.BitsPerPixel=bpp; //Welche Farbtiefe soll abgefragt werden
	formats=SDL_ListModes(&format,flags); //Frage die SDL nach den Auflösungen mit den passenden Flags ab
	return formats;
}

Das letzte Element der List ist NULL, um die komplette Liste auszugeben dient das nächste Codefragment.

void printList(SDL_Rect** modes)
{
    for(int i=0;modes[i]!=0;i++)
    {
        printf("%i x %i",modes[i].w,modes[i].h)
    }
}

Quelle

Gefunden von Slave irgendwo im Netz.