Seite 1 von 1

[ERLEDIGT] ComboBox Wert übergeben an Fenster ?

Verfasst: 03.02.2020 02:56
von udg
Hallo Alle miteinander,

ich stehe gerade auf dem Schlauch. Hab schon wieder zu lange Codingpause gemacht.

Habe hier ein kleines Fenster, einen Requester der eine ComboBox beinhaltet. Diese hat zur Auswahl, FensterGröße in Pixel:

Global x1 = 1280, y1 = 720
Global x2 = 1920, y2 = 1080
Global x3 = 2560, y3 = 1440
Global x4 = 3840, y4 = 2160

nun hab ich leider Hohl in Denkmasse wie ich den Wert in mein eigentliches Fenster übergeben kann? Mit 2 separaten Feldern(text oder string) zb eins für "X" und eins für "Y" ist es kein Ding. Das klappt.

Wie aber mache ich das mit einem Combo?

Bild

hier mal ein schnelles Beispiel:

Code: Alles auswählen

Enumeration 0 ; Windows
  #Window
  #Wnd_Requester
EndEnumeration
Enumeration 0 ; Gadgets
  #OGL_Gadget
  #ComboBox
  #Btn_Run
  #Fnt_SegoeUI12
EndEnumeration

;;Screen Resolution

Global x1 = 1280, y1 = 720
Global x2 = 1920, y2 = 1080
Global x3 = 2560, y3 = 1440
Global x4 = 3840, y4 = 2160

Define ResolutionX, ResolutionY

LoadFont(#Fnt_SegoeUI12, "Segoe Ui", 12, #PB_Font_HighQuality)
Procedure Create_Res_Requester()
  
    OpenWindow(#Wnd_Requester, 0, 0, 400, 250, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

    ComboBoxGadget(#ComboBox, WindowWidth(#Wnd_Requester)/4.5, 70, 220, 30)
    SetGadgetFont(#ComboBox, FontID(#Fnt_SegoeUI12))
    AddGadgetItem(#ComboBox, -1, "Resolution       " + Str(x1) +" x "+ Str(y1))
    AddGadgetItem(#ComboBox, -1, "Resolution       " + Str(x2) +" x "+ Str(y2))
    AddGadgetItem(#ComboBox, -1, "Resolution       " + Str(x3) +" x "+ Str(y3))
    AddGadgetItem(#ComboBox, -1, "Resolution       " + Str(x4) +" x "+ Str(y4))
    SetGadgetState(#ComboBox, 0)    ; den ersten Eintrag als aktiv setzen
    ButtonGadget(#Btn_Run, WindowWidth(#Wnd_Requester)/4.5, 130, 220, 45, "start")    
    SetGadgetFont(#Btn_Run, FontID(#Fnt_SegoeUI12))
  
EndProcedure
Create_Res_Requester()

Procedure CreateMainWindow()

   OpenWindow(#Window, 0, 0, ResolutionX, ResolutionY,"", #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)
  ; ; OpenGLGadget(#OGL_Gadget, 0, 0, ResolutionX, ResolutionY) : Init_OpenGL(#OGL_Gadget, ResolutionX, ResolutionY)
   HideWindow(#Window, #False)
  
EndProcedure
Repeat
  
  Event = WindowEvent()  
    
    Select Event
      Case #PB_Event_CloseWindow
        End
      Case #PB_Event_Gadget
        Select EventGadget()
          Case   #Btn_Run
          CreateMainWindow()
        EndSelect  
    EndSelect
    
ForEver
Danke fürs Drüberschauen

VG

Re: ComboBox Wert übergeben an Fenster ?

Verfasst: 03.02.2020 07:55
von Bisonte
eigentlich reicht ja :

Code: Alles auswählen

Width = Val(Trim(Left(GadgetText(#ComboBox),4)))
Height = Val(Trim(Right(GadgetText(#ComboBox),4)))
aber es gibt auch das ...

Code: Alles auswählen

EnableExplicit

Procedure.i ResolutionRequester(Array Resolution(2), hFont = 0)
  
  Protected Event, Combo, Button, i, Result = 0
  Protected Window = OpenWindow(#PB_Any, 0, 0, 400, 250, "Set Resolution", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
  
  If Window
    Combo  = ComboBoxGadget(#PB_Any, WindowWidth(Window)/4.5, 70, 220, 30)
    Button = ButtonGadget(#PB_Any, WindowWidth(Window)/4.5, 130, 220, 45, "Start")
    
    If hFont
      SetGadgetFont(Combo,  hFont)
      SetGadgetFont(Button, hFont)
    EndIf
    
    For i = 0 To ArraySize(Resolution(), 1)
      AddGadgetItem(Combo, -1, "Resolution       " + Str(Resolution(i, 0)) +" x "+ Str(Resolution(i, 1)))
    Next i
    
    SetGadgetState(Combo, 0)
    
    Repeat
      
      Event = WaitWindowEvent()
      
      Select Event
        Case #PB_Event_CloseWindow
          Break
        Case #PB_Event_Gadget
          If EventGadget() = Button
            Result = GetGadgetState(Combo)
            If Result = -1
              Result = 0
            EndIf
            Break             
          EndIf
          
      EndSelect
      
    ForEver
    
    CloseWindow(Window)
    
  EndIf
  
  ProcedureReturn Result
  
EndProcedure

; Example

Define Res, Event, Quit
Dim Resolution(3, 1)

; Dimension 0 = Width : Dimension 1 = Height
Resolution(0, 0) = 1280 : Resolution(0, 1) = 720
Resolution(1, 0) = 1980 : Resolution(1, 1) = 1080
Resolution(2, 0) = 2560 : Resolution(2, 1) = 1440
Resolution(3, 0) = 3840 : Resolution(3, 1) = 2160

LoadFont(1, "Segoe UI", 12, #PB_Font_HighQuality)

Res = ResolutionRequester(Resolution(), FontID(1))

OpenWindow(0, 0, 0, Resolution(Res, 0), Resolution(Res, 1), "Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)

AddKeyboardShortcut(0, #PB_Shortcut_Escape, 59999)

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_CloseWindow
      Quit = #True
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          ;       
      EndSelect
      
    Case #PB_Event_Menu
      Select EventMenu()
        Case 59999
          Quit = #True
      EndSelect
      
  EndSelect
  
Until Quit

Re: ComboBox Wert übergeben an Fenster ?

Verfasst: 03.02.2020 09:30
von udg
Aha. Supi


Nun funktioniert es wie es gedacht war.

Code: Alles auswählen

Width = Val(Trim(Left(GadgetText(#ComboBox),4)))
Height = Val(Trim(Right(GadgetText(#ComboBox),4)))
damit konnte ich nicht weiterarbeiten, funktionierte zwar in meinem Requester auch aber das OGL wollte damit nicht.

der 2te Code brachte das Ergebnis wie gewünscht,
eingebaut, umgepflügt, dummen Fehler gesucht und läuft.



Vielen DANK \o/ :allright: