Bildschirmauflösung ändern und wieder auf default ?

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich hab mal ein mini-prog geschrieben, um die aktuelle auflösung zu ändern.
die vorherige auflösung wird beim beenden des kontrollfensters automatisch wiederhergestellt.
es wird nur die auflösung geändert, das ursprüngliche layout bleibt erhalten.

vorteil:
man kann auf eine kleinere auflösung umschalten, ohne dass die icons umsortiert werden.
nachteil:
die taskleiste ist nicht erreichbar.

wenn man den eigenschaften-kontext des desktops zum auflösung ändern benutzt,
ist zwar die taskleiste erreichbar, aber die icons werden umsortiert, um auf den kleineren desktop zu passen.

hintergrund:
manche fensterbasierten minigames sind zu klein auf einem 1280x1024-desktop.
mit diesem tool kann man diese games spielen, ohne danach mühsam seine icons wieder zu sortieren.

Code: Alles auswählen

dmScreenSettings.DEVMODE 
dmScreenSettings\dmSize = SizeOf(dmScreenSettings) 
dmScreenSettings\dmPelsWidth = 800 ;Bildschirmbreite 
dmScreenSettings\dmPelsHeight = 600 ;Bildschirmhöhe 
dmScreenSettings\dmBitsPerPel = 16 ;Bildschirmtiefe 
dmScreenSettings\dmFields = 262144 | 524288 | 1048576 

If ChangeDisplaySettings_(@dmScreenSettings, 4) <> 0 ;Wenn etwas schief geht... 
End ;... einfach beenden 
EndIf 

OpenWindow(0, 0, 0, 100,30, "Control", #PB_Window_SystemMenu) 

Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow 
[edit]
boink.. zu spät.. *schmoll*
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

Beitrag von xverbatim »

Hi Gaman,

läuft ja gut das prog...

nur hääää wo schreibt er denn die alten Werte hin ?

kannst du mir das evtl. leicht verständlich erklären....

somit hätte sich mein neuer thread dann evtl. erledigt


wo finde ich denn infos über ChangeDisplaySettings ???in der Hilfe jedenfalls nicht ....

gruß t.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

er schreibt nirgens die alten werte hin, weil er das garnicht braucht, die änderung ist nur temporär und besteht nur so lange, wie der ändernde prozess läuft.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

danke

Beitrag von xverbatim »

ok, das versteh ich soweit

danke ...

gruß t.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

danke, kann ich bestimmt auch mal gebrauchen :allright:
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

Code: Alles auswählen

ChangeDisplaySettings_(0, 0)
c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

xverbatim hat geschrieben:wo finde ich denn infos über ChangeDisplaySettings ???in der Hilfe jedenfalls nicht ....
du solltest dir die win32.hlp runterladen, und in das unterverzeichnis "Help" in deinem PB-Verzeichnis schieben.
danach kannst du hilfe zu API-funktionen durch F1 erhalten.

------------------------------------------------------------------------------------

hab nochn bissel rumgespielt, und das mini-prog ein wenig erweitert:

Code: Alles auswählen

;***
;*** DesktopChange Ver.2
;***
;*** By Kaeru Gaman , Nov. 24th 2006
;***
;*** Thanks to Dark Dragon for basic Information about ChangeDisplaySettings_
;***
;*** PB Ver. 4.00
;***
;*****************************************************************************

Procedure Change_Desktop(Width.l, Height.l)
  dmScreenSettings.DEVMODE 
  dmScreenSettings\dmSize = SizeOf(dmScreenSettings) 
  dmScreenSettings\dmPelsWidth = Width
  dmScreenSettings\dmPelsHeight = Height
  dmScreenSettings\dmBitsPerPel = 16
  dmScreenSettings\dmFields = 262144 | 524288 | 1048576 
  ProcedureReturn ChangeDisplaySettings_(@dmScreenSettings, 4)
EndProcedure

If Not OpenWindow(0, 0, 0,128,136, "Control", #PB_Window_SystemMenu) 
  MessageRequester("Error","Failed to open Window")
  End
EndIf
If Not CreateGadgetList(WindowID(0))
  MessageRequester("Error","Failed to create Gadgets")
  End
EndIf
ButtonGadget(0, 16,  8,96,24,"640x480x16")
ButtonGadget(1, 16, 40,96,24,"800x600x16")
ButtonGadget(2, 16, 72,96,24,"1024x768x16")
ButtonGadget(3, 16,104,96,24,"Quit/Restore")
EXIT.l = 0

Repeat
  EventID = WaitWindowEvent()
  If EventID = #PB_Event_Gadget
    Select EventGadget()
      Case 0
        Change_Desktop(640,480)
      Case 1
        Change_Desktop(800,600)
      Case 2
        Change_Desktop(1024,768)
      Case 3
        EXIT = 1
    EndSelect
  EndIf
  If EventID = #PB_Event_CloseWindow
    EXIT = 1
  EndIf
Until EXIT = 1 
[edit]
kleine ergänzung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Kaeru Gaman hat geschrieben:...das mini-prog ein wenig erweitert...
schick 8) :allright:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

ein bissel zu wenig erweitert :wink:
optional sollte wohl die gebräuchliche Farbtiefe von 32 möglich sein (ist auch schneller)
Die Auflösungen sind auch etwas mickrig :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo, war ich zu faul dazu.

dann müsste man nämlich auch vorher EnumDisplaySettings_ benutzen,
und die buttons zur laufzeit beschriften....

yo, dafür war ich einfach zu faul... :mrgreen:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten