Seite 2 von 3

Verfasst: 24.11.2006 13:17
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*

Verfasst: 24.11.2006 13:25
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.

Verfasst: 24.11.2006 13:27
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.

danke

Verfasst: 24.11.2006 13:30
von xverbatim
ok, das versteh ich soweit

danke ...

gruß t.

Verfasst: 24.11.2006 13:31
von #NULL
danke, kann ich bestimmt auch mal gebrauchen :allright:

Verfasst: 24.11.2006 13:32
von nco2k

Code: Alles auswählen

ChangeDisplaySettings_(0, 0)
c ya,
nco2k

Verfasst: 24.11.2006 13:59
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.

Verfasst: 24.11.2006 14:33
von rolaf
Kaeru Gaman hat geschrieben:...das mini-prog ein wenig erweitert...
schick 8) :allright:

Verfasst: 24.11.2006 14:44
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:

Verfasst: 24.11.2006 14:52
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: