Bildschirmauflösung ändern
Bildschirmauflösung ändern
Hallo zusammen,
dies ist mein erster Beitrag im Forum. Ich hoffe ich mache alles richtig.
Ich möchte aus einer laufenden Lazarus-Anwendung die Bildschirmauflösung ändern, weil die Animationen bei niedrigerer Auflösung deutlich flüssiger laufen. Ich habe schon eine sehr lange Internet-Recherche hinter mir. Es werden häufig Möglichkeiten für Delphi dargestellt. Diese Proceduren/Funktionen bekomme ich aber nicht zum laufen. Unter anderem, weil ich keine Variablen vom Typ TDeviceMode deklarieren kann. Ich weiß nicht, welche Unit dafür aufgeführt werden muss. Ich habs mal mit der Unit Windows (die ich als mögliche identifiziert habe) versucht. Bei diesem Versuch werden allerdings die Canvas-Befehle (die sonst super funktionieren) als fehlerhaft angezeigt.
Am besten wäre natürlich, dass die ursprüngliche Bildschirmauflösung, die vor der Programm-Anwendung bestand, nach Ausführung dessen wieder hergestellt wird.
Ich würde mich sehr freuen, wenn mir einer helfen könnte.
Viele Grüße,
Nicki 2016
			
			
									
									
						dies ist mein erster Beitrag im Forum. Ich hoffe ich mache alles richtig.
Ich möchte aus einer laufenden Lazarus-Anwendung die Bildschirmauflösung ändern, weil die Animationen bei niedrigerer Auflösung deutlich flüssiger laufen. Ich habe schon eine sehr lange Internet-Recherche hinter mir. Es werden häufig Möglichkeiten für Delphi dargestellt. Diese Proceduren/Funktionen bekomme ich aber nicht zum laufen. Unter anderem, weil ich keine Variablen vom Typ TDeviceMode deklarieren kann. Ich weiß nicht, welche Unit dafür aufgeführt werden muss. Ich habs mal mit der Unit Windows (die ich als mögliche identifiziert habe) versucht. Bei diesem Versuch werden allerdings die Canvas-Befehle (die sonst super funktionieren) als fehlerhaft angezeigt.
Am besten wäre natürlich, dass die ursprüngliche Bildschirmauflösung, die vor der Programm-Anwendung bestand, nach Ausführung dessen wieder hergestellt wird.
Ich würde mich sehr freuen, wenn mir einer helfen könnte.
Viele Grüße,
Nicki 2016
Re: Bildschirmauflösung ändern
Hallo und willkommen!
Generell sollte man die Bildschirmauflösung nicht verändern und diese Einstellung dem User überlassen. Alles andere würde ich als Nutzer als Bug interpretieren.
Wie auch immer, die Lösung von dieser Seite http://www.swissdelphicenter.ch/en/showcode.php?id=158 funktioniert hier (Windows 7) problemlos und auch nur für Windows:
			
			
									
									Generell sollte man die Bildschirmauflösung nicht verändern und diese Einstellung dem User überlassen. Alles andere würde ich als Nutzer als Bug interpretieren.
Wie auch immer, die Lösung von dieser Seite http://www.swissdelphicenter.ch/en/showcode.php?id=158 funktioniert hier (Windows 7) problemlos und auch nur für Windows:
Code: Alles auswählen
uses ..., Windows;
...
  TForm1 = class(TForm)
  private
    OldResulution: TRect;
  end;
...
procedure ChangeResolution(XResolution, YResolution: DWORD);
var
  DevMode: TDeviceMode;
begin
  EnumDisplaySettings(nil, 0, DevMode);
  DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
  DevMode.dmPelsWidth := XResolution;
  DevMode.dmPelsHeight := YResolution;
  ChangeDisplaySettings(DevMode, 0);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  OldResulution.Right  := Screen.Width;
  OldResulution.Bottom := Screen.Height;
  ChangeResolution(1024, 768);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  ChangeResolution(OldResulution.Right, OldResulution.Bottom);
end;Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  Re: Bildschirmauflösung ändern
Hallo Michl,
vielen Dank für deine schnelle Antwort
			
			
									
									
						vielen Dank für deine schnelle Antwort
Re: Bildschirmauflösung ändern
Hey Michl,
ich danke dir schön. Habs ausprobiert und es funktioniert super.
Nebenbei: Wenn ich die Unit Windows an den Anfang der aufgeführten Units setze, dann gibt es auch keine störende Interaktion mit den Canvas-Befehlen, so daß die Reihenfolge der Units offenbar auch wichtig ist.
lg,
Nicki2016
			
			
									
									
						ich danke dir schön. Habs ausprobiert und es funktioniert super.
Nebenbei: Wenn ich die Unit Windows an den Anfang der aufgeführten Units setze, dann gibt es auch keine störende Interaktion mit den Canvas-Befehlen, so daß die Reihenfolge der Units offenbar auch wichtig ist.
lg,
Nicki2016
- 
				Timm Thaler
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Bildschirmauflösung ändern
Wenn Du mit eigener Auflösung arbeiten willst, dann mach einen eigenen Screen auf. Da kannst Du dann Auflösung und Farbtiefe einstellen, wie Du lustig bist.
Ein Programm, welches meine Bildschirmauflösung zerschlägt, würde bei mir genau einmal laufen. So wichtig kann ein Programm gar nicht sein, dass es derart in mein System eingreifen dürfte.
			
			
									
									
						Ein Programm, welches meine Bildschirmauflösung zerschlägt, würde bei mir genau einmal laufen. So wichtig kann ein Programm gar nicht sein, dass es derart in mein System eingreifen dürfte.
Re: Bildschirmauflösung ändern
wie kann ich denn einen eigenen Screen erstellen? Kann ich die Auflösung vom Canvas irgendwie ändern?
			
			
									
									
						- 
				Mathias
- Beiträge: 7073
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Bildschirmauflösung ändern
Mit dieser Funktion sollte es gehen, nach Programm-Ende, sollte die alte Auflösung wieder kommen.
			
			
									
									Code: Alles auswählen
procedure GoToFullScreen(Form: TForm; pWidth, pHeight, pBPP, pFrequency: word);
var
  dmScreenSettings: DevMode;
begin
  // Fenster vor Vollbild vorbereiten
  Form.WindowState := wsMaximized;
  Form.BorderStyle := bsNone;
  ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
  with dmScreenSettings do begin
    dmSize := SizeOf(dmScreenSettings);
    dmPelsWidth := pWidth;                    // Breite
    dmPelsHeight := pHeight;                  // Höhe
    dmBitsPerPel := pBPP;                     // Farbtiefe
    dmDisplayFrequency := pFrequency;         // Bildwiederholfrequenz
    dmFields := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL or DM_DISPLAYFREQUENCY;
  end;
  if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN) = DISP_CHANGE_FAILED) then begin
    MessageBox(0, 'Konnte Vollbildmodus nicht aktivieren!', 'Error', MB_OK or MB_ICONERROR);
    exit;
  end;
end;Viele Games nutzen diese Funktion, ansonsten hast du schon recht.Generell sollte man die Bildschirmauflösung nicht verändern und diese Einstellung dem User überlassen. Alles andere würde ich als Nutzer als Bug interpretieren.
Ja, dies ist sehr wichtig, vor allem bei der Unit Windows.Wenn ich die Unit Windows an den Anfang der aufgeführten Units setze, dann gibt es auch keine störende Interaktion mit den Canvas-Befehlen, so daß die Reihenfolge der Units offenbar auch wichtig ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
						Mit Java und C/C++ sehe ich rot
Re: Bildschirmauflösung ändern
Hallo Mathias,
vielen Dank für deine wertvollen Hinweise.
lg,
Nicki2016
			
			
									
									
						vielen Dank für deine wertvollen Hinweise.
lg,
Nicki2016
Re: Bildschirmauflösung ändern
Hallo Mathias,
vielen Dank für den tollen Hinweis. Hab die Procedur umgesetzt und sie funktioniert super. Ich habe die Parameter Farbtiefe und Wiederholfrequenz allerdings weggelassen.
lg
nicki
			
			
									
									
						vielen Dank für den tollen Hinweis. Hab die Procedur umgesetzt und sie funktioniert super. Ich habe die Parameter Farbtiefe und Wiederholfrequenz allerdings weggelassen.
lg
nicki
 Verein
Verein 
 Links
Links Suche
Suche