wxWidgets - Frames?

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Artemis

BeitragFr, Jan 11, 2008 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du mal den Code zeigen, also nur von der GUI-Erstellung.

Ich habe nämlich das Problem, dass ein Fehler Unable to convert from 'wx.wxwindow.wxBoxSizer' to 'wxWindow' kommt wenn ich versuche einem Sizer einen anderen als Child anzuhängen.

Siehe http://www.blitzbasic.com/Comm...927#840008
 

#Reaper

Newsposter

BeitragSa, Jan 12, 2008 1:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Erklärung Vertex.
Bekomme es allerdings noch nicht ganz so hin, wie ich es will. Habe nun z.B. 1 Frame, darin ein BoxSizer, in dem Sizer wiederrum ein Panel und in dem Panel muss wieder ein Sizer rein. Der letzte Sizer macht mir aber Probleme.
Wenn ich da z.B. einen BoxSizer nehme, kann ich den Button entweder nur Horizontal oder nur Vertikal ausrichten, beides geht nicht. Wenn ich einen GridSizer nehme, geht der Button (welcher Rechtsbündig sein soll) nur bis zur Mitte. Ist also in der linken Hälfte von dem GridSizer, welcher scheinbar automatisch aus 2 Teilen besteht. Muss also erst wohl wieder noch irgendein Objekt in dem GridSizer erstellen, bevor ich den Button da haben kann, wo er sein soll, in der rechten unteren Ecke... Mad
Ich glaube ich nehme doch lieber wieder normale Koordinaten, irgendwie... Confused

Edit: Uh, wenn ich den GridSizer auf 1 row und col stelle, geht es. Mal schauen, wie ich es dann mit mehreren Objekten hinbekomme Wink
Edit2: z.B. bei 2 Buttons, die unten rechts nebeneinander sein sollen... Crying or Very sad
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Vertex

BeitragSa, Jan 12, 2008 3:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Artemis:
Wenn du einem Control einen Sizer zuweisen willst, bspw. einem Panel nimmst du MyPanel.SetSizer(MySizer) willst du hingegen einem Sizer einen verschachtelten Sizer hinzufügen nimmst du OuterSizer.AddSizer(InnerSizer,,,5)

Ansonsten hier der aktuelle Code vom Config Editor:
Code: [AUSKLAPPEN]
SuperStrict

Framework BRL.Blitz
Import wx.wx
Import wx.wxApp
Import wx.wxFrame
Import wx.wxMenu
Import wx.wxComboBox
Import wx.wxCheckBox
Import wx.wxChoice
Import wx.wxStaticText
Import wx.wxPanel
Import wx.wxSlider
Import wx.wxStaticBox

Global RendererList          : String[2], ..
       ColorDepthList        : String[3], ..
       ScreenFrequencyList   : String[2], ..
       AudioOutputDeviceList : String[2], ..
       CaptureDeviceList     : String[2]

RendererList[0]          = "OpenGL"
RendererList[1]          = "Direct3D7"

ColorDepthList[0]        = "16 Bit"
ColorDepthList[1]        = "24 Bit"
ColorDepthList[2]        = "32 Bit"

ScreenFrequencyList[0]   = "59 Hz"
ScreenFrequencyList[1]   = "60 Hz"

AudioOutputDeviceList[0] = "Generic Hardware"
AudioOutputDeviceList[1] = "Generic Software"

CaptureDeviceList[0]     = "Logitech-Mikrofon (Web)"
CaptureDeviceList[1]     = "SoundMAX Digital Audio"


Local Application : TApplication
Application = New TApplication
Application.Run()

Type TApplication Extends wxApp
   Field Configuration : TConfiguration

   Method OnInit:Int()
      Self.Configuration = New TConfiguration
      Configuration.Create(,,"SingFever Config",,,,, ..
                           wxCAPTION ..
                           | wxCLOSE_BOX ..
                           | wxMINIMIZE_BOX ..
                           | wxSYSTEM_MENU ..
                           | wxTAB_TRAVERSAL)

      SetTopWindow(Self.Configuration)
      Self.Configuration.Show()
      
      Return True
   End Method
End Type

Type TConfiguration Extends wxFrame
   Field MenuMain               : wxMenuBar
   Field MenuFile               : wxMenu
   Field MenuLoad               : wxMenu
   Field MenuSave               : wxMenu
   Field MenuDefault            : wxMenu
   Field MenuExit               : wxMenu
   Field MenuHelp               : wxMenu
   Field MenuAbout              : wxMenu

   Field LabelVideoSettings     : wxStaticText
   Field PanelVideoSettings     : wxPanel
   Field LabelRenderer          : wxStaticText
   Field ComboRenderer          : wxComboBox
   Field CheckFullscreen        : wxCheckBox
   Field LabelColorDepth        : wxStaticText
   Field ChoiceColorDepth       : wxChoice
   Field LabelScreenFrequency   : wxStaticText
   Field ChoiceScreenFrequency  : wxChoice

   Field LabelAudioSettings     : wxStaticText
   Field PanelAudioSettings     : wxPanel
   Field LabelAudioOutputDevice : wxStaticText
   Field ComboAudioOutputDevice : wxComboBox
   Field LabelSoundVolume       : wxStaticText
   Field SliderSoundVolume      : wxSlider
   Field LabelMusicVolume       : wxStaticText
   Field SliderMusicVolume      : wxSlider

   Field LabelRecorderSettings  : wxStaticText
   Field PanelRecorderSettings  : wxPanel
   Field LabelCaptureDevice     : wxStaticText
   Field ComboCaptureDevice     : wxComboBox
   Field LabelThreshold         : wxStaticText
   Field SliderThreshold        : wxSlider
   Field LabelNoiseFilter       : wxStaticText
   Field SliderNoiseFilter      : wxSlider
   Field LabelBoost             : wxStaticText
   Field SliderBoost            : wxSlider
   Field CheckSaveToHardDisk    : wxCheckBox
   Field LabelOscilloscope      : wxStaticText
   Field BoxOscilloscope        : wxStaticBox
   Field LabelAutocorrelation   : wxStaticText
   Field BoxAutocorrelation     : wxStaticBox

   Method OnInit()
      ' Menu
      MenuMain = wxMenuBar.CreateMenuBar(0)
      MenuFile = wxMenu.CreateMenu()
      MenuHelp = wxMenu.CreateMenu()
      
      MenuFile.Append(-1, "Load")
      MenuFile.Append(-1, "Save")
      MenuFile.Append(-1, "Default settings")
      MenuFile.AppendSeparator()
      MenuFile.Append(-1, "Exit")

      MenuHelp.Append(-1, "About")
      
      MenuMain.Append(MenuFile, "File")
      MenuMain.Append(MenuHelp, "Help")
      
      Self.SetMenuBar(MenuMain)
      
      Local SizerMain : wxBoxSizer
      SizerMain = wxBoxSizer.CreateBoxSizer(wxVERTICAL)

      ' Video settings
      LabelVideoSettings = wxStaticText.CreateStaticText(Self, wxID_ANY, "Video settings")
      
      LabelVideoSettings.SetFont(..
         wxFont.CreateFontWithAttributes(-1, ..
                                         wxFONTFAMILY_DEFAULT, ..
                                         wxFONTSTYLE_NORMAL, ..
                                         wxFONTWEIGHT_BOLD) ..
      )
      LabelVideoSettings.SetForegroundColour(..
         wxColour.CreateColour(255, 255, 255)..
      )
      SizerMain.Add(LabelVideoSettings, 0, wxALL, 4)
      
      PanelVideoSettings = wxPanel.CreatePanel(Self, wxID_ANY)
      
      Local SizerVideoSettings : wxBoxSizer
      SizerVideoSettings = wxBoxSizer.CreateBoxSizer(wxVERTICAL)
      
      LabelRenderer = wxStaticText.CreateStaticText(PanelVideoSettings, wxID_ANY, "Renderer")
      SizerVideoSettings.Add(LabelRenderer, 0, wxALL, 5)
      
      ComboRenderer = wxComboBox.CreateComboBox(PanelVideoSettings, wxID_ANY, RendererList[0], RendererList)
      SizerVideoSettings.Add(ComboRenderer, 0, wxALL|wxEXPAND, 5)
      
      Local SizerVideoSettings2 : wxBoxSizer
      SizerVideoSettings2 = wxBoxSizer.CreateBoxSizer(wxHORIZONTAL)
      
      CheckFullscreen = wxCheckBox.CreateCheckBox(PanelVideoSettings, wxID_ANY, "Fullscreen")
      SizerVideoSettings2.Add(CheckFullscreen, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      LabelColorDepth = wxStaticText.CreateStaticText(PanelVideoSettings, wxID_ANY, "Color depth")
      SizerVideoSettings2.Add(LabelColorDepth, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      ChoiceColorDepth = wxChoice.CreateChoice(PanelVideoSettings, wxID_ANY, ColorDepthList)
      ChoiceColorDepth.SetSelection(0)
      SizerVideoSettings2.Add(ChoiceColorDepth, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)

      LabelScreenFrequency = wxStaticText.CreateStaticText(PanelVideoSettings, wxID_ANY, "Screen frequency")
      SizerVideoSettings2.Add(LabelScreenFrequency, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      ChoiceScreenFrequency = wxChoice.CreateChoice(PanelVideoSettings, wxID_ANY,  ScreenFrequencyList)
      ChoiceScreenFrequency.SetSelection(0)
      SizerVideoSettings2.Add(ChoiceScreenFrequency, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SizerVideoSettings.AddSizer(SizerVideoSettings2,,, 5)
      
      PanelVideoSettings.SetSizer(SizerVideoSettings)
      SizerMain.Add(PanelVideoSettings, 0, wxALL|wxEXPAND, 5)
      SizerMain.AddCustomSpacer(0, 10)
      
      ' Audio settings
      LabelAudioSettings = wxStaticText.CreateStaticText(Self, wxID_ANY, "Audio settings")
      LabelAudioSettings.SetFont(..
         wxFont.CreateFontWithAttributes(-1, ..
                                         wxFONTFAMILY_DEFAULT, ..
                                         wxFONTSTYLE_NORMAL, ..
                                         wxFONTWEIGHT_BOLD) ..
      )
      LabelAudioSettings.SetForegroundColour(..
         wxColour.CreateColour(255, 255, 255)..
      )
      SizerMain.Add(LabelAudioSettings, 0, wxALL, 4)

      PanelAudioSettings = wxPanel.CreatePanel(Self, wxID_ANY)
      
      Local SizerAudioSettings : wxBoxSizer
      SizerAudioSettings = wxBoxSizer.CreateBoxSizer(wxVERTICAL)
      
      LabelAudioOutputDevice = wxStaticText.CreateStaticText(PanelAudioSettings, wxID_ANY, "Audio output device")
      SizerAudioSettings.Add(LabelAudioOutputDevice, 0, wxALL, 5)
      
      ComboAudioOutputDevice = wxComboBox.CreateComboBox(PanelAudioSettings, wxID_ANY, AudioOutputDeviceList[0], AudioOutputDeviceList)
      SizerAudioSettings.Add(ComboAudioOutputDevice, 0, wxALL|wxEXPAND, 5)

      Local SizerAudioSettings2 : wxBoxSizer
      SizerAudioSettings2 = wxBoxSizer.CreateBoxSizer(wxHORIZONTAL)
      
      LabelSoundVolume = wxStaticText.CreateStaticText(PanelAudioSettings, wxID_ANY, "Sound volume")
      SizerAudioSettings2.Add(LabelSoundVolume, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SliderSoundVolume = wxSlider.CreateSlider(PanelAudioSettings, wxID_ANY, 0, 0, 5)
      SizerAudioSettings2.Add(SliderSoundVolume, 0, wxALL, 5)

      LabelMusicVolume = wxStaticText.CreateStaticText(PanelAudioSettings, wxID_ANY, "Music volume")
      SizerAudioSettings2.Add(LabelMusicVolume, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SliderMusicVolume = wxSlider.CreateSlider(PanelAudioSettings, wxID_ANY, 0, 0, 5)
      SizerAudioSettings2.Add(SliderMusicVolume, 0, wxALL, 5)
      
      SizerAudioSettings.AddSizer(SizerAudioSettings2,,, 5)
      
      PanelAudioSettings.SetSizer(SizerAudioSettings)
      SizerMain.Add(PanelAudioSettings, 0, wxALL|wxEXPAND, 5)
      SizerMain.AddCustomSpacer(0, 10)
      
      ' Recorder settings
      LabelRecorderSettings = wxStaticText.CreateStaticText(Self, wxID_ANY, "Recorder settings")
      LabelRecorderSettings.SetFont(..
         wxFont.CreateFontWithAttributes(-1, ..
                                         wxFONTFAMILY_DEFAULT, ..
                                         wxFONTSTYLE_NORMAL, ..
                                         wxFONTWEIGHT_BOLD) ..
      )
      LabelRecorderSettings.SetForegroundColour(..
         wxColour.CreateColour(255, 255, 255)..
      )
      SizerMain.Add(LabelRecorderSettings, 0, wxALL, 4)
      
      PanelRecorderSettings = wxPanel.CreatePanel(Self, wxID_ANY)
      
      Local SizerRecorderSettings : wxBoxSizer
      SizerRecorderSettings = wxBoxSizer.CreateBoxSizer(wxVERTICAL)
      
      LabelCaptureDevice = wxStaticText.CreateStaticText(PanelRecorderSettings, wxID_ANY, "Capture device")
      SizerRecorderSettings.Add(LabelCaptureDevice, 0, wxALL, 5)
      
      ComboCaptureDevice = wxComboBox.CreateComboBox(PanelRecorderSettings, wxID_ANY, CaptureDeviceList[0], CaptureDeviceList)
      SizerRecorderSettings.Add(ComboCaptureDevice, 0, wxALL|wxEXPAND, 5)
      
      Local SizerRecorderSettings2 : wxGridSizer
      SizerRecorderSettings2 = New wxGridSizer
      SizerRecorderSettings2.Create(2, 2)
      
      Local SizerThreshold : wxBoxSizer
      SizerThreshold = wxBoxSizer.CreateBoxSizer(wxHORIZONTAL)
      
      LabelThreshold = wxStaticText.CreateStaticText(PanelRecorderSettings, wxID_ANY, "Threshold")
      SizerThreshold.Add(LabelThreshold, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SliderThreshold = wxSlider.CreateSlider(PanelRecorderSettings, wxID_ANY, 0, 0, 5)
      SizerThreshold.Add(SliderThreshold, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SizerRecorderSettings2.AddSizer(SizerThreshold)
            
      Local SizerNoiseFilter : wxBoxSizer
      SizerNoiseFilter = wxBoxSizer.CreateBoxSizer(wxHORIZONTAL)
      
      LabelNoiseFilter = wxStaticText.CreateStaticText(PanelRecorderSettings, wxID_ANY, "Noise filter")
      SizerNoiseFilter.Add(LabelNoiseFilter, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SliderNoiseFilter = wxSlider.CreateSlider(PanelRecorderSettings, wxID_ANY, 0, 0, 5)
      SizerNoiseFilter.Add(SliderNoiseFilter, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SizerRecorderSettings2.AddSizer(SizerNoiseFilter)

      Local SizerBoost : wxBoxSizer
      SizerBoost = wxBoxSizer.CreateBoxSizer(wxHORIZONTAL)
      
      LabelBoost = wxStaticText.CreateStaticText(PanelRecorderSettings, wxID_ANY, "Boost")
      SizerBoost.Add(LabelBoost, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SliderBoost = wxSlider.CreateSlider(PanelRecorderSettings, wxID_ANY, 0, 0, 5)
      SizerBoost.Add(SliderBoost, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SizerRecorderSettings2.AddSizer(SizerBoost)
      
      CheckSaveToHardDisk = wxCheckBox.CreateCheckBox(PanelRecorderSettings, wxID_ANY, "Save to hard disk")
      SizerRecorderSettings2.Add(CheckSaveToHardDisk, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5)
      
      SizerRecorderSettings.AddSizer(SizerRecorderSettings2)
      
      LabelOscilloscope = wxStaticText.CreateStaticText(PanelRecorderSettings, wxID_ANY, "Oscilloscope")
      SizerRecorderSettings.Add(LabelOscilloscope, 0, wxALL, 5)
      
      BoxOscilloscope = wxStaticBox.CreateStaticBox(PanelRecorderSettings, wxID_ANY,,,,450, 100)
      SizerRecorderSettings.Add(BoxOscilloscope, 0, wxALL, 5)

      LabelAutocorrelation = wxStaticText.CreateStaticText(PanelRecorderSettings, wxID_ANY, "Autocorrelation")
      SizerRecorderSettings.Add(LabelAutocorrelation, 0, wxALL, 5)   

      BoxAutocorrelation = wxStaticBox.CreateStaticBox(PanelRecorderSettings, wxID_ANY,,,,450, 100)
      SizerRecorderSettings.Add(BoxAutocorrelation, 0, wxALL, 5)
      
      PanelRecorderSettings.SetSizer(SizerRecorderSettings)
      SizerMain.Add(PanelRecorderSettings, 0, wxALL|wxEXPAND, 5)

      SizerMain.Fit(Self)
      Self.SetSizer(SizerMain)
   End Method

   Function OnQuit(Event:wxEvent)
      wxWindow(Event.Parent).Close(True)
   End Function
End Type


Wie man dann ein dynamisches Bild(möglichst ohne Max2D) erstellt, weiß ich nicht. Platzhalter sind erstmal 2 mal wxStaticBox.

#Reaper:
Code: [AUSKLAPPEN]
SuperStrict

Framework BRL.Blitz
Import wx.wx
Import wx.wxApp
Import wx.wxFrame
Import wx.wxPanel
Import wx.wxButton

Local Application : TApplication
Application = New TApplication
Application.Run()

Type TApplication Extends wxApp
   Field Frame : TFrame

   Method OnInit:Int()
      Self.Frame = New TFrame
      Frame.Create(,,"Test")

      SetTopWindow(Self.Frame)
      Self.Frame.Show()
      
      Return True
   End Method
End Type

Type TFrame Extends wxFrame
   Field Panel   : wxPanel
   Field Button1 : wxButton
   Field Button2 : wxButton
   Field Button3 : wxButton

   Method OnInit()
      Local SizerMain : wxBoxSizer
      SizerMain = wxBoxSizer.CreateBoxSizer(wxVERTICAL)
      
      Panel = wxPanel.CreatePanel(Self, wxID_ANY)
      
      Local SizerPanel : wxBoxSizer
      SizerPanel = wxBoxSizer.CreateBoxSizer(wxVERTICAL)
      
      Local SizerButtons : wxBoxSizer
      SizerButtons = wxBoxSizer.CreateBoxSizer(wxHORIZONTAL)
      
      Button1 = wxButton.CreateButton(Panel, wxID_ANY, "Button 1")
      SizerButtons.Add(Button1, 0, wxALL|wxALIGN_BOTTOM, 5)

      Button2 = wxButton.CreateButton(Panel, wxID_ANY, "Button 2")
      SizerButtons.Add(Button2, 0, wxALL|wxALIGN_BOTTOM, 5)

      Button3 = wxButton.CreateButton(Panel, wxID_ANY, "Button 3")
      SizerButtons.Add(Button3, 0, wxALL|wxALIGN_BOTTOM, 5)
      
      SizerPanel.AddSizer(SizerButtons, 1, wxALIGN_RIGHT, 5)
      
      Panel.SetSizer(SizerPanel)
      SizerMain.Add(Panel, 1, wxEXPAND|wxALL, 5)
      
      Self.SetSizer(SizerMain)
   End Method
End Type


mfg olli
vertex.dreamfall.at | GitHub
 

#Reaper

Newsposter

BeitragSa, Jan 12, 2008 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, danke für den Code Vertex! Der hilft mir weiter, danke! Smile
Hast du den mit wxFormBuilder zusammengebaut, oder so selber gecodet?

Bekomme es z.B. mit dem wxFB so nicht hin, kann den einen Sizer nicht rechtsbündig ausrichten, wie in deinem Code:
Code: [AUSKLAPPEN]
SizerPanel.AddSizer(SizerButtons, 1, wxALIGN_RIGHT, 5)


Naja, danke! Smile
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Vertex

BeitragSa, Jan 12, 2008 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, habe es mit dem wxFormBuilder gemacht.

1. Frame erstellen
2. BoxSizer(wxVERTICAL) in Frame erstellen
3. Panel für BoxSizer erstellen(wenn du kein Rand haben willst, Border = 0)
4. BoxSizer(wxVERTICAL) in Panel erstellen
5. BoxSizer(wxHORIZONTAL, wxALIGN_RIGHT aber ohne wxEXPAND!) in BoxSizer aus Schritt 4 erstellen
6. 3 Buttons in BoxSizer aus Schritt 5 erstellen(wxALIGN_BOTTOM)

BoxSizer haben standardmäßig wxEXAPND gesetzt. Der BoxSizer passt sich damit in der Breite immer der Umgebung an. Ist wxEXAPND nicht gesetzt(und Width = -1) nimmt er die Breite seines Inhaltes an.

Weiterhin ist auch standardmäßig Proportion = 1 gesetzt(das ist der Stretch-Button im wxFormBuilder). Das bedeutet, dass sich der BoxSizer in der Höhe seiner Umgebung anpasst. Ist Proportion = 0, dann nimmt er die Höhe seines Inhalts.

mfg olli
vertex.dreamfall.at | GitHub
 

#Reaper

Newsposter

BeitragSo, Jan 13, 2008 1:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, Super! Danke für die Erklärung Vertex!
Solangsam klappt das mit dem wx-Designen Very Happy
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Artemis

BeitragSo, Jan 13, 2008 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer jetzt wxWidgets aktulisiert findet einen neuen Ordner "tools", in dem Bruceys wxCodeGen zu finden ist. Dieses Programm konvertiert wxFormBuilder-Projekt-Dateien in BlitzMax-Code. Es ist noch nicht fertig und ein paar Sachen fehlen noch, aber für die Standards ist es prima nutzbar.

Weiteres im BlitzBasic.com-Thread.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group