Frage zu ExamineScreenModes() : NextScreenMode()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Frage zu ExamineScreenModes() : NextScreenMode()

Beitrag von nco2k »

hi folks,

wie kann ich bestimmte auflösungen und farbtiefen anzeigen lassen??

wenn man auf den knopf 16/32 Bit drückt, will ich das alle auflösungen, die 16 bzw 32 Bit unterstützen und gleich/grösser als 640x480 sind, angezeigt werden.

Code: Alles auswählen

Enumeration
  #Combo_0
  #Radio_0
  #Radio_1
  #Button_0
EndEnumeration

#Title = "Test"
If InitSprite() = #False Or OpenWindow(0, 0, 0, 210, 90, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered, #Title)
  If CreateGadgetList(WindowID(0))
    ComboBoxGadget(#Combo_0, 5, 5, 200, 143)
    OptionGadget(#Radio_0, 10, 35, 60, 20, "16 Bit")
    SetGadgetState(#Radio_0, 1)
    OptionGadget(#Radio_1, 140, 35, 60, 20, "32 Bit")
    ButtonGadget(#Button_0, 5, 60, 200, 25, "Exit")
  EndIf
Else
  MessageRequester(#Title, "Error", #MB_OK | #MB_ICONERROR)
EndIf

If ExamineScreenModes()
  While NextScreenMode()
    AddGadgetItem(#Combo_0, -1, Str(ScreenModeWidth())+" x "+Str(ScreenModeHeight())+" x "+Str(ScreenModeDepth()))
  Wend
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case #Radio_0
          ;zeige nur 16 Bit auflösungen <---
        Case #Radio_1
          ;zeige nur 32 Bit auflösungen <---
        Case #Button_0
          End
      EndSelect
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

End
was wenn man mehrere grafikkarten im system hat. kann man das irgendwie einstellen, welche grafikkarte man gerade verwenden möchte??

c ya,
nco2k
Benutzeravatar
ChaOsKid
Beiträge: 66
Registriert: 29.08.2004 15:07
Wohnort: Oktoberfest

Beitrag von ChaOsKid »

hi nco2k,

meinst du so:

Code: Alles auswählen

Enumeration
  #Combo_0
  #Radio_0
  #Radio_1
  #Button_0
EndEnumeration

Structure ScreenModes
  width.l
  height.l
  depth.l
  refreshrate.l
EndStructure

NewList ScreenModes.ScreenModes()

Procedure AddScreenModes(depth.l)
  ClearGadgetItemList(#Combo_0)
  ForEach ScreenModes()
    If ScreenModes()\depth = depth And ScreenModes()\width >= 640
      AddGadgetItem(#Combo_0, -1, Str(ScreenModes()\width)+" x "+Str(ScreenModes()\height)+" x "+Str(ScreenModes()\depth)+" ("+Str(ScreenModes()\refreshrate)+" Hz)")
    EndIf
  Next
  SetGadgetState(#Combo_0,0)
EndProcedure

#Title = "Test"
If InitSprite() = #False Or OpenWindow(0, 0, 0, 210, 90, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered, #Title)
  If CreateGadgetList(WindowID(0))
    ComboBoxGadget(#Combo_0, 5, 5, 200, 143)
    OptionGadget(#Radio_0, 10, 35, 60, 20, "16 Bit")
    SetGadgetState(#Radio_0, 1)
    OptionGadget(#Radio_1, 140, 35, 60, 20, "32 Bit")
    ButtonGadget(#Button_0, 5, 60, 200, 25, "Exit")
  EndIf
Else
  MessageRequester(#Title, "Error", #MB_OK | #MB_ICONERROR)
EndIf

If ExamineScreenModes()
  While NextScreenMode()
    AddElement(ScreenModes())
    ScreenModes()\width = ScreenModeWidth()
    ScreenModes()\height = ScreenModeHeight()
    ScreenModes()\depth = ScreenModeDepth()
    ScreenModes()\refreshrate = ScreenModeRefreshRate()
  Wend
  AddScreenModes(16)
EndIf


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case #Radio_0
          ;zeige nur 16 Bit auflösungen <---
          AddScreenModes(16)
        Case #Radio_1
          ClearGadgetItemList(#Combo_0)
          ;zeige nur 32 Bit auflösungen <---
          AddScreenModes(32)
        Case #Button_0
          End
      EndSelect
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

End
und das mit mehreren grafikkarten weiss ich leider auch nicht.

mfG
Tobi
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

perfekt danke!

nur wie siehts aus mit mehreren grafikkarten?? vielleicht weiss da jemand rat.

c ya,
nco2k
Antworten