[ERLEDIGT] ComboBox Wert übergeben an Fenster ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

[ERLEDIGT] ComboBox Wert übergeben an Fenster ?

Beitrag 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
Zuletzt geändert von udg am 03.02.2020 09:30, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: ComboBox Wert übergeben an Fenster ?

Beitrag 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
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: ComboBox Wert übergeben an Fenster ?

Beitrag 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:
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten