C++ Builder Snippets  

Bildschirmauflösung und Farbtiefe ändern:
 
//----------------------------------------------------------------------------
// Funktion SwitchVideoMode() ändert die Bildschirmeinstellungen
// sofern die neuen Einstellungen vom System unterstützt werden:
//----------------------------------------------------------------------------
// Parameter: ilWidth    = neue Bildschirmbreite in Pixel,
//            ilHeight   = neue Bildschirmhöhe in Pixel,
//            ilColDepth = neue Farbtiefe in Bits per Pixel
//            ilDisplayFrequency = Bildwiederholfrequenz (nur NT/2000,
//                                 wird unter Win95-98-Me ignoriert)
//----------------------------------------------------------------------------
// Beispielaufruf: SwitchVideoMode(800,600,16,75);
//----------------------------------------------------------------------------
void SwitchVideoMode(int ilWidth, int ilHeight,
  int ilColDepth, int ilDisplayFrequency)
{
  DEVMODE sDevMode;
  bool blVideoModeValid = false;

  // Prüfen, ob einer der verfügbaren Videomodi die
  // neuen Einstellungen unterstützt
  int ilCurrentModeNo = 0;
  while(EnumDisplaySettings(NULL, ilCurrentModeNo, &sDevMode))
  {
    // Falls Farbtiefe, Höhe und Breite ok:
    if(sDevMode.dmBitsPerPel == (DWORD)ilColDepth &&
      sDevMode.dmPelsWidth == (DWORD)ilWidth &&
      sDevMode.dmPelsHeight == (DWORD)ilHeight)
    {
      // Falls NT oder 2000, auch die Bildwiederholfrequenz vergleichen:
      if(OsWinNt())
      {
        // Frequenzen vergleichen:
        if(sDevMode.dmDisplayFrequency == (DWORD)ilDisplayFrequency)
        {
          blVideoModeValid = true;
          break;
        }
      }
      else
      {
        blVideoModeValid = true;
        break;
      }
    }
    ilCurrentModeNo++;
  }

  AnsiString slMessage;
  if(blVideoModeValid)  // Falls Parameter unterstützt...
  {
    // Bildschirmeinstellungen ändern (die zuvor gefundene DEVMODE-Struktur
    // wird der API-Funktiin ChangeDisplaySettings() übergeben)
    int ilRetVal = ChangeDisplaySettings(&sDevMode, CDS_UPDATEREGISTRY);

    // Rückgabewert auswerten:
    switch (ilRetVal)
    {
      case DISP_CHANGE_SUCCESSFUL:
        slMessage = "Bildschirmeinstellungen erfolgreich"
          " geändert."; break;
      case DISP_CHANGE_RESTART:
        slMessage = "Änderungen der Bildschirmeinstellungen "
          "werden nach dem Windows-Neustart wirksam."; break;
      default:
        slMessage = "Fehler bei der Umschaltung der "
          "Bildschirmeinstellungen"; break;
    }
  }
  else slMessage = "Angegebene Bildschirmeinstellungen werden "
    "auf diesem System nicht unterstützt !";
  ShowMessage(slMessage);
}

//----------------------------------------------------------------------------
// Funktion OsWinNt() prüft, ob das Programm unter Win NT/2000 ausgeführt wird
//----------------------------------------------------------------------------
// Rückgabewert: true, falls NT/2000 anderenfalls false
//----------------------------------------------------------------------------
bool OsWinNt(void)
{
  OSVERSIONINFO stVerInfo;
  stVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx(&stVerInfo);
  return (stVerInfo.dwPlatformId==VER_PLATFORM_WIN32_NT);
}

// Aktuelle Bildschirmgrösse kann mit Hilfe der Eigenschaften
// Height und Width der globalen BCB-Variablen Screen ermittelt werden:
int ilCurrentScreenHeight = Screen -> Height;
int ilCurrentScreenWidth = Screen -> Width;

// die Bestimmung der aktuellen Auflösung erfolgt mit
// Hilfe der API-Funktion GetDeviceCaps():
int ilColorDepth = GetDeviceCaps(Canvas->Handle,BITSPIXEL);
// die Bildwiederholfrequenz kann ebenfalls mit Hilfe der 
// GetDeviceCaps() ermittelt werden:
int ilDisplayFrequency = GetDeviceCaps(Canvas->Handle,VREFRESH);

Screenshot des Beispielprojekts
Screenshot des Beispielprojekts


  Download BCB5
Projekt-Quellcode
Download
Demo-Exe


© '99-2002 by S. Kreutzmann