お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"画面解像度の動的変更"

この発言に対し以下のコメントが寄せられています
#00811 佐藤 充男   さん RE:画面解像度の動的変更

こんにちは、佐藤 充男です。 ☆説明 nifty:FDELPHI/MES/16/460 Satobeさんサンプルを元に、動的変更に改良 しました。 Button1 を押すと解像度を640×480へ、 Button2 を押すと元の解像度に戻ります。 ☆準備  1.フォームにButton1、Button2を置く。  2.フォームの OnCreate、OnCloseQuery イベントとButtonの OnClick    イベントに以下のコードを記述。 ☆補足  ・Delphi4で作成、Windows98、NT4.0WSで動作確認。  ・解像度切り替えを連続して行うとディスプレイが壊れる危険性があります。   パチパチ切りかえるのはやめましょう(^^; ====================================================================== var ScrW: Integer; // Screen Width ScrH: Integer; // Screen Height ScrC: Integer; // Screen Color (Bit/Pixel) RRate: Integer; // Refresh Rate ChgFlag: Boolean; // 変更フラグ procedure TForm1.FormCreate(Sender: TObject); var hDC: THandle; OSVer: TOSVersionInfo; // OSバージョン情報 begin // OSバージョンチェック OSVer.dwOSVersionInfoSize := Sizeof(TOSVersionInfo); GetVersionEx(OSVer); // 画面情報を得る hDC := GetDC( 0 ); ScrW := GetDeviceCaps( hDC, HORZRES ); ScrH := GetDeviceCaps( hDC, VERTRES ); ScrC := GetDeviceCaps( hDC, BITSPIXEL ) * GetDeviceCaps( hDC, PLANES ); if OSVer.dwPlatformId = VER_PLATFORM_WIN32_NT then // NTならば現在のリフレッシュレートを得る RRate := GetDeviceCaps( hDC, VREFRESH ) else RRate := 1; // default refresh rate ReleaseDC( 0, hDC ); ChgFlag := False; // 変更なし end; (* 640 x 480 モード *) procedure TForm1.Button1Click(Sender: TObject); var DevMode: TDeviceModeA; begin DevMode.dmSize := Sizeof(TDeviceModeA); DevMode.dmBitsPerPel := ScrC; DevMode.dmPelsWidth := 640; DevMode.dmPelsHeight := 480; DevMode.dmDisplayFrequency := 1; // 面倒なのでdefaultを採用 DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY; ChangeDisplaySettings(DevMode,0); ChgFlag := True; // 変更あり end; (* 元のモードに戻す *) procedure TForm1.Button2Click(Sender: TObject); var DevMode: TDeviceModeA; begin if ChgFlag = True then begin DevMode.dmSize := Sizeof(TDeviceModeA); DevMode.dmBitsPerPel := ScrC; DevMode.dmPelsWidth := ScrW; DevMode.dmPelsHeight := ScrH; DevMode.dmDisplayFrequency := RRate; DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY; ChangeDisplaySettings(DevMode,0); end; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var DevMode: TDeviceModeA; begin if ChgFlag = True then begin DevMode.dmSize := Sizeof(TDeviceModeA); DevMode.dmBitsPerPel := ScrC; DevMode.dmPelsWidth := ScrW; DevMode.dmPelsHeight := ScrH; DevMode.dmDisplayFrequency := RRate; DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY; ChangeDisplaySettings(DevMode,0); end; end; ====================================================================== 【参考】 nifty:FDELPHI/MES/16/460  Satobeさんの「画面のモード(解像度や色数)変更」 nifty:FDELPHI/MES/11/4315  miniminiさん、tacさんの「色数と解像度の変更」 99/1/28(木) 05:14pm LDM03756 佐藤 充男 Original document by 佐藤 充男   氏 ID:(LDM03756)



ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum