Programme in mehreren Auflösungen testen
Erstellt von Daniel SchuhmannJan 31
Dem Problem der unterschiedlichen Auflösungen wird meist zu wenig Beachtung geschenkt: Der Programmierer arbeitet mit »seiner« Auflösung. Zudem ist das Testen anderer Auflösungen auch mühsam: Die Auflösung des Monitors wirft Desktopsymbole und Fenstergrößen anderer Anwendungen quer durcheinander.

Screenshot des Tools »Application Resolution«
Abhilfe schafft hier das gezielte Versetzen der Anwendung in die gewünschte Auflösung. Das Ziehen mit der Maus auf die gewünschte Fenstergröße ist zwar ebenso mühsam, aber mit einem kleinen Programm genügt der sprichwörtliche Klick.
Die Auswahl des Zielfensters geschieht sehr einfach: Der Anwender macht das Fenster aktiv und drückt auf der Tastatur den globalen Shortcut Strg+F7, der beim Programmstart reserviert wird.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function dlgfunc(hDlg: hWnd; uMsg: dword; wParam: wParam; lParam: lParam): bool; stdcall; begin result := true; case uMsg of WM_INITDIALOG: begin // [...] If not RegisterHotkey(hDlg, IDC_HOTKEY, MOD_CONTROL, 118) then begin MessageBox(hDlg, 'Der für das Programm benötigte Hotkey Strg+F7 ist '+ 'bereits durch das System belegt. Das Programm kann '+ 'daher nicht starten.', 'Hotkey belegt', MB_OK or MB_ICONERROR); Halt(1); end; end; WM_CLOSE: begin UnregisterHotKey(hDlg, IDC_HOTKEY); PostQuitMessage(0); end; WM_HOTKEY: begin If (wParam = IDC_HOTKEY) then GetProgWnd(hDlg); end; // [...] end; end; |
Die Funktion GetProcWnd holt sich das Handle des aktiven Fensters mit GetForegroundWindow, liest den Fenstertitel mit GetWindowText und trägt beide Daten in die passenden Labels ein, damit der Anwender eine optische Rückmeldung hat.
1 2 3 4 5 6 7 8 9 | procedure GetProgWnd(hDlg: hWnd); var szName: Array[0..255] of Char; begin DestWnd := GetForegroundWindow; SetDlgItemInt(hDlg, IDC_LA_APPHANDLE, DestWnd, False); GetWindowText(DestWnd, szName, 256); SetDlgItemText(hDlg, IDC_LA_APPNAME, @szName); end; |
Die Funktion SetNewRes setzt die neue Fenstergröße: In einer Case-Anweisung wird geprüft, welcher Button betätigt wurde und auf die entsprechende Fenstergröße umgeschaltet. Dies erledigt die API-Funktion SetWindowPos.
1 2 3 4 5 6 7 8 9 10 11 12 | procedure SetNewRes(Btn: THandle; hDlg: hWnd); var X, Y: Integer; bTranslated: LongBool; begin Case Btn of // [...] IDC_1024: SetWindowPos(DestWnd, 0, 0, 0, 1024, 768, SWP_NOZORDER); // [...] end; end; |
Eine Erleichterung für den Anwender ist die Möglichkeit, das Fenster im Vordergrund zu halten. Dies erledigt die Funktion SetTopmost, die ihrerseits auf die schon bekannte API-Funktion SetWindowPos zurückgreift, das Interessante dabei ist der Parameter HWND_TOPMOST.
1 2 3 4 5 6 7 8 9 | procedure SetTopmost(hDlg: hWnd); begin If SendMessage(GetDlgItem(hDlg, IDC_CB_TOPMOST), BM_GETCHECK, 0, 0) = BST_CHECKED then SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_DRAWFRAME or SWP_NOMOVE or SWP_NOSIZE) else SetWindowPos(hDlg, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_DRAWFRAME or SWP_NOMOVE or SWP_NOSIZE); end; |
Download
Anwendung AppResolution.exe (22 KB)
Quelltext des Programms (7 KB)
Keine Kommentare
Sie müssen angemeldet sein, um einen Kommentar zu schreiben.