Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Visual WX-C Designer einrichten und eigene GUIs erstellen

von MitgliedAffemitwaffelSeite 3 von 4

In diesem Abschnitt werden einige Widgets näher beschrieben, die der Visual WX-C Designer zur Verfügung stellt.

StatText

StatText
Vergrößern
StatText

Ein "StatText" ist ein einfaches Widget, dass einen Text anzeigen kann. Nachträglich lässt sich der Text mit Hilfe der "wxWindow_SetLabel"-Funktion bearbeiten.
Mit den Funktionen "wxWindow_SetBackgroundColour" und "wxWindow_SetForegroundColour" lassen sich die Hintergrund und Textfarbe verändern. Bei beiden Funktionen ist der erste Parameter die Variable, die auf dem "StatText" zeigt und die zweite Variable ist ein "wxColour Ptr" für die Farbe.
Beispiel:

wxWindow_SetLabel(stattext0, wxString_ctorUTF8("Neuer Text")) 'Der Text des Widgets "stattext0" wird zu "Neuer Text" geändert
wxWindows_SetForegroundColour (stattext0 , wxString_ctorUTF8 ("green")) 'Die Textfarbe wird auf Grün gesetzt

TextCtrl/RichText

TextCtrl
Vergrößern
TextCtrl

Ein "TextCtrl" erstellt eine Box, in der etwas eingeben werden kann. Es handelt sich dabei um ein einfaches Textfeld. Soll der Text per Code geändert werden, steht beispielsweise die Funktion "wxTextCtrl_SetValue" zur Verfügung.
Das Widget kann mit der Funktion "wxTextCtrl_Enable" deaktiviert (ausgegraut) und wieder aktiviert werden. Der erste Parameter ist (wie fast immer) das Widget selber und beim zweiten Parameter ist wx_FALSE möglich, um das Widget zu deaktivieren und wx_TRUE um es wieder zu aktivieren. Die Funktion "wxTextCtrl_SetEditable" funktioniert auf ähnliche Art und Weise, allerdings gibt diese nur an, ob der Benutzer etwas in das Widget reintippen kann. Die Parameter sind die selben wie bei "wxTextCtrl_Enable".
Mit den Funktionen "wxTextCtrl_SetForegroundColour" und wxTextCtrl_SetBackgroundColour" lassen sich wie beim "StatText" die Farben ändern. Die Parameter sind auch identisch zu denen vom "StatText".


Ein "RichText" ist im Prinzip das selbe, wie eine "TextCtrl", allerdings ist ein "RichText" mehrzeilig, es lassen sich aber die selben Funktionen auf einem "RichText" anwenden wie auf einer "TextCtrl".
Beispiel:

wxTextCtrl_SetValue(textctrl0, wxString_ctorUTF8("Neuer Text")) 'Der Text des Widgets "textctrl0" wird zu "Neuer Text" geändert

Der eingegebene Text kann mit der Funktion "wxTextCtrl_GetValue" wieder auslesen werden.
Mithilfe der Funktion "wxTextCtrl_AppendText" lässt sich ein Text zu dem bereits eingegebenen ergänzen. Der erste Parameter ist das Widget und der zweite ist der zu ergänzenden Text (als wxString).

Beispiel:

Dim text As String
text = wxString_to_fbstring(wxTextCtrl_GetValue(textctrl0))

Weitere nützliche Funktionen für das RichText:

"wxTextCtrl_GetNumberOfLines": Anzahl der Zeilen ermitteln.
Beispiel:

Dim NumberOfLines As Anteger
NumberOfLines = wxTextCtrl_GetNumberOfLines(textctrl0)

"wxTextCtrl_GetLineText": Text einer Zeile auslesen.
Beispiel:

Dim Text As String
Text = wxString_to_fbString(wxTextCtrl_GetLineText(textctrl0, 15))

"wxTextCtrl_Replace": Text ersetzen.
Beispiel: Text von Zeile 10 bis 12 ersetzen:

wxTextCtrl_Replace(textctrl0, 10, 12, fbString_to_wxString("Neuer Text"))

"wxTextCtrl_Remove": Text entfernen.
Beispiel: Text von Zeile 10 bis 12 entfernen:

wxTextCtrl_Remove(textctrl0, 10, 12)

"wxTextCtrl_Clear": gesamten Inhalt löschen.
Beispiel:

wxTextCtrl_Clear(textctrl0)


Der einfache Button

Button
Vergrößern
Button

Buttons sind ein Grundelement der GUI-Programmierung und kommen in nahezu allen Programmen in irgendeiner Form vor. Das Label eines Buttons, also die Aufschrift, lässt sich mit der Funktion "wxButton_GetLabel" auslesen.

Beispiel:

Dim label As String
label = wxString_to_fbstring(wxButton_GetLabel(button0))

Mit dem Befehl "wxButton_SetLabel" lässt sich der Text des Buttons auch ändern.

Beispiel:

wxButton_SetLabel(button0,  wxString_ctorUTF8("Button 1")) 'Das Label von "button0" wird zu "Button 1" geändert

Verschiedene Arten von Buttons

Verschiedene Buttons
Vergrößern
Verschiedene Buttons

Neben dem "normalen" Button gibt es noch andere Arten von Buttons:
Eine dieser Arten ist der "ToggleButton". Wenn dieser Button gedrückt wird, wird er aktiviert oder deaktiviert. Der aktuelle Zustand des Buttons kann mit der Funktion "wxToggleButton_GetValue" geprüft werden.

Beispiel:

Dim value As Integer
value = wxToggleButton_GetValue(ToggleButton0) 'Wenn value = WX_FALSE (0) ist, dann ist der Button deaktiviert, wenn value = WX_TRUE (-1) ist, dann ist der Button aktiviert

Der Zustand des Buttons lässt sich mit dem Befehl "wxToggleButton_SetValue" verändern.

wxToggleButton_SetValue(ToggleButton0, WX_FALSE)

Eine andere Art von Button ist der "BitmapButton". Dieser Button ist so wie der "normale" Button, hat aber ein Bild anstelle eines Labels.

CheckBox

CheckBox
Vergrößern
CheckBox

Eine "CheckBox" ist ein Widget, das häufig als Kontrollkästen für verschiedene Optionen verwendet wird. Die CheckBox kann zwei verschiedene Zustände annehmen, der erste Zustand ist 0 (WX_FALSE) und der zweite Zustand ist -1 (WX_TRUE). Wenn der Zustand der CheckBox WX_FALSE ist, dann ist in dem Kontrollkasten kein Häkchen, wenn der Zustand WX_TRUE ist, dann ist dort ein Häkchen.
Mit der Funktion "wxCheckBox_GetValue" kann der Zustand der CheckBox ausgelesen und mit dem Befehl "wxCheckBox_SetValue" verändert werden.
Beispiel:

Dim value As Integer
value = wxCheckBox_GetValue(checkbox0)
'value = WX_FALSE : In der CheckBox ist kein Häkchen. value = WX_TRUE : In der CheckBox ist ein Häkchen.
wxCheckBox_SetValue(checkbox0, WX_TRUE) 'Setze in der CheckBox ein Häkchen

Statt "wxCheckBox_GetValue" kann auch die Funktion "wxCheckBox_IsChecked" verwendet werden.
Beispiel:

If wxCheckBox_IsChecked(checkbox0) Then ...

RadioBox

Radio
Vergrößern
Radio

Ein "Radio" Widget wird häufig als Optionsfeld benutzt. Im Gegensatz zur CheckBox gibt es bei einem Radio-Widget mehrere Auswahlmöglichkeiten, von denen allerdings immer nur eine ausgewählt werden kann.
Mit der Funktion "wxRadioBox_GetSelection" lässt sich die aktuelle Auswahl auslesen, mit "wxRadioBox_SetSelection" auch verändern.
Beispiel:

Dim auswahl As Integer
auswahl = wxRadioBox_GetSelection(radio0) 'Wenn auswahl = 0 ist, dann ist die erste Option aktiviert, wenn auswahl = 1 ist, dann ist die zweite Option aktiviert, ...
wxRadioBox_SetSelection(radio0, 1) 'Setze die Auswahl auf das zweite Optionsfeld

Die Funktion "wxRadioBox_GetStringSelection" ist etwas komfortabler, da sie den Text der Auswahl zurückgibt. Die Funktion benötigt als Parameter nur das Widget und sie liefert den Text der Auswahl zurück.
Diese Funktion gibt es auch in die andere Richtung. Mit "wxRadioBox_SetStringSelection" ist es möglich die Auswahl auf den eingegebenen Text zu setzten. Der erste Parameter ist wieder das Widget und der zweite ist der Text.
Mit "wxRadioBox_SetLabel" lässt sich der Text der RadioBox ändern.
Beispiel:

wxRadioBox_SetLabel(radio0, fbString_to_wxString("neuer Text"))

ListBox

List
Vergrößern
List

Die "List" oder "ListBox" ist eine Auswahlliste. In dieser Liste befinden sich verschiedene auwählbare Texte.
Mit Hilfe der Funktion "wxListBox_GetSelection" lässt sich das ausgewählte Feld auslesen. Mit dem Befehl "wxListBox_Select" kann ein Feld ausgewählt werden.
Beispiel:

Dim auswahl As Integer
auswahl = wxListBox_GetSelection(list0) 'auswahl = 0, wenn das erste Feld ausgewählt wurde, auswahl = 1, wenn das zweite Feld ausgewählt wurde, ..
wxListBox_Select(list0, 1) 'wähle das zweite Feld aus

Weitere Funktionen für die Listbox:

"wxListBox_InsertItems": Elemente in eine Listbox schreiben
Beispiel:

Dim As Integer i
Dim As wxArrayString Ptr tempString = wxArrayString_ctor( )
For i = 0 To 15
  wxArrayString_Add(list0, wxString_ctorUTF8("list item " + Str( i+1 )) )
  wxListBox_InsertItems(list0, tempString, i )
  wxArrayString_Clear(tempString )
Next i

"wxArrayString_Add": Ein Element zur Liste hinzufuegen
Beispiel:

Dim As wxArrayString Ptr list0_str
list0_str = wxArrayString_ctor( )
wxArrayString_Add(list0_str, fbstring_to_wxString(("Erwin Mueller")))

"wxListBox_GetStringSelection": Gewählten Text auslesen
Beispiel:

Dim s As String
s = wxString_to_fbString((list0))

"wxListBox_SetSingleString": Text einer Zeile ändern
Beispiel: String an der Position 10 aendern

wxListBox_SetSingleString(list0, 10, fbString_to_wxString("geänderter Text"))

"wxListBox_GetSingleString": Einen String auslesen
Beispiel: String an der Position 10 auslesen

Dim As String s
s = wxString_to_fbString(wxListBox_GetSingleString(list0, 10))

"wxControlWithItems_Append": Ein Element hinzufuegen, gibt die zugehörige Position zurück
Beispiel:

Dim n As Integer
n = wxControlWithItems_Append(list0, fbString_to_wxString("Neuer Text"))

"wxControlWithItems_Insert": Ein Element einfügen
Beispiel: Eintrag an Position 15 einfügen

wxControlWithItems_Insert(list0, "fbString_to_wxString("Eingefügter Text"), 15)

"wxControlWithItems_GetCount": Höchste Position ermitteln
Beispiel:

Dim n As Integer
n = wxControlWithItems_GetCount(list0) As wxInt

"wxControlWithItems_FindString": Einen String suchen, Rueckgabewert = Position
Beispiel:

Dim k As Integer
k = wxControlWithItems_FindString(list0, fbString_to_wxString("Otto Meier"))

"wxControlWithItems_Delete": Einen Text löschen
Beispiel: Text in Position 10 löschen:

wxControlWithItems_Delete(list0, 0)

"wxControlWithItems_Clear": Inhalt der Listbox löschen
Beispiel:

wxControlWithItems_Clear(list0)

CheckListBox

CheckListBox
Vergrößern
CheckListBox

Die "CheckListBox" ist eine Kombination aus einer ListBox und einer CheckBox. Die einzelnen Listenelemente können hier, wie bei einer CheckBox, mit einem Häkchen ausgewählt werden.
Ob eine bestimmtes Listenelement aktiviert oder deaktiviert ist, kann mit der Funktion "wxCheckListBox_IsChecked" geprüft werden.
Beispiel:

Dim auswahl as Integer
auswahl = wxCheckListBox_IsChecked(checklistbox0, 0) 'Wenn auswahl = 0, dann ist die erste Listenelement deaktiviert, wenn auswahl = 1, dann ist es aktiviert


Slider

Slider
Vergrößern
Slider

Ein "Slider" kann hin- und herbewegt werden, um so einen Wert in einem bestimmten Wertebereich auszuwählen.
Mit "wxSlider_GetValue" kann der Wert ausgelesen, mit "wxSlider_SetValue" gesetzt werden.
Um den Wertebereich des Sliders zu verändern, wird der Befehl "wxSlider_SetRange" verwendet.
Beispiel:

Dim wert as Integer
wert = wxSlider_GetValue(slider0) 'wert = ausgewählter Wert des Sliders
wxSlider_SetValue(slider0, 10) ' Setze den Wert des Sliders auf 10
wxSlider_SetRange(slider0, 100, 200) 'Wertebereich wird zu 100-200 geändert (100 ist der niedrigste Wert, 200 der höchste)

Mit "wxSlider_GetMin" und "wxSlider_GetMax" können der minmale und der maximale Wert des Sliders ermittelt werden.
Beispiel:

Dim As Integer MinWert, MaxWert
MinWert = wxSlider_GetMin(slider0)
MaxWert = wxSlider_GetMax(slider0)



Events

Events
Vergrößern
Events

"Event" ist englisch für Ereignis und um eben diese geht es hierbei. Ein Event kann beispielsweise sein, dass ein Button gedrückt wurde. Intern löst dieses Event eine Funktion aus, sodass auf Ereignisse reagiert werden kann. Der Visual WX-C Designer kann für Widgets automatisch Event-Code generieren. Dafür muss im Projektfenster ein Widget ausgewählt und auf "Events" (siehe rote Box) geklickt werden. Daraufhin öffnet sich ein neues Fenster (siehe blaue Box) in der das Event gewählt werden kann, für das der Code erzeugt werden soll. Nicht alle Widgets erlauben alle Events, auch wenn die angezeigte Liste bisher alle Möglichkeiten aller Widgets auflistet. Hier hilft der angezeigte Name des Events weiter (Ein Listen-Event für einen Button macht z. B. weniger Sinn). Der Designer erzeugt im Code nun den entsprechenden Code in Form von einfachen Subs, der sog. Eventhandler.

Menüs und Toolbars

Menüs kommen in fast allen Programmen vor. Im Visual WX-C Designer lassen sich Menüs durch einen Klick auf "Tools" und danach einen Klick auf "Add Menu" hinzufügen. Das so erstellte Menü erscheint automatisch am oberen Rand der Oberfläche. Um dort Items oder Untermenüs hinzuzufügen genügt ein Klick auf das erstellte Menü und dort muss unter "Add Item" das gewünschte Item ausgesucht werden. Dabei steht einem das "Normal item" zur Verfügung, welches ähnlich wie ein Button funktioniert. Andere auswählbare Items sind "Check items" und "Radio items". Diese funktionieren jeweils wie die Check- oder Radiobox. Ein "Sub menu" fügt ein weiteres ausklappbares Menü als Menüpunkt hinzu.
Es ist möglich den erstellten Items verschiedene Label zu geben und diese zu verschieben, indem man unter dem erstellten Menü auf "Properties" drückt. Ein weiterer Menüpunkt lässt sich durch erneuten drücken von "Add menu" hinzufügen.
Events für die Menüitems erstellt der Visual WX-C Designer automatisch in der Sub "menuhandler" und aus den Kommentaren im generierten Quelltext ist zu entnehmen, welches Event zu welchen Item gehört.

Eine Toolbar ist ähnlich wie ein Menü, allerdings ist eine Toolbar nicht ausklappbar und sie hat nur einen Imagebutton als Item.
Die Toolbar lässt sich durch einen Klick auf "Tools" und dann auf "Enable toolbar" erstellen. Um der erstellten Toolbar Items hinzuzufügen drückt man auf "Add item to toolbar" unter "Tools". Danach fragt der WX-C Designer nach einen Bild, welches er für das Item verwenden soll.
Auch für die Toolbar erstellt der WX-C Designer automatisch Events in der Sub "menuhandler" und er schreibt ebenfalls hinzu, für welches Item das Event gilt.

FileDiaog

Der FileDialog ist ein Fenster, in dem eine Datei zum Öffnen oder zum Speichern ausgewählt werden kann. Er ist durch die folgende Funktion definiert:

Declare Function wxFileDialog_ctor WXCALL Alias "wxFileDialog_ctor" ( _
                       parent         As wxWindow Ptr, _
                       messageArg     As wxString Ptr, _
                       defaultDirArg  As wxString Ptr, _
                       defaultFileArg As wxString Ptr, _
                       wildcardArg    As wxString Ptr, _
                       style          As wxUInt, _
                       x              As wxInt, _
                       y              As wxInt) As wxFileDialog Ptr

Parameter:
parent = zugehöriges Parent Window (kann gleich 0 gesetzt werden, da es beim WX-C Designer nur ein Fenster gibt)
messageArg = Titel des Fensters
defaultDirArg = Ordner, der beim Aufruf des FileDialogs geöffnet werden soll
defaultFileArg = Datei, die beim Aufruf des FileDialogs vorgeschlagen werden soll
wildcardArg = Suchfilter, z.B. ".txt"
style: siehe unten
x, y = Position des FileDialog-Fensters

Parameter style:
wxFD_OPEN: Dialog zum Öffnen einer Datei mit einem "Öffnen"-Button
wxFD_SAVE: Dialog zum Speichern einer Datei mit einem "Speichern"-Button
wxFD_OVERWRITE_PROMPT: Nur für den "Speichern"-Dialog: Öffnet eine Warnung zur estätigung, ob eine existierende Dati überschrieben werden soll
wxFD_FILE_MUST_EXIST: Nur für den "Öffnen"-Dialog: Der Benutzer kann nur existiernde Dateien öffnen
wxFD_MULTIPLE: Nur für den "Öffnen"-Dialog: Möglichkeit, mehrere Dateien zu öffnen
wxFD_CHANGE_DIR: Ändert das aktuelle Verzeichnis in das vom Benutzer ausgewählte Verzeichnis

Beispiel:

Dim FileDialog As wxFileDialog Ptr
Dim As String Directory, FileName
'Datei oeffnen mit zugelassener Aenderung des Verzeichnisses:
FileDialog = wxFileDialog_ctor(0, fbstring_to_wxString("Datei oeffnen"), fbstring_to_wxString(CurDir), _
    fbstring_to_wxString(""), fbstring_to_wxString("*.*"), wxFD_OPEN Or wxFD_CHANGE_DIR, -1, -1)
wxFileDialog_ShowModal(FileDialog)
'Verzeichnis und Dateiname abfragen:
Directory = wxString_to_fbstring(wxFileDialog_GetDirectory(FileDialog))
FileName = wxString_to_fbstring(wxFileDialog_GetFilename(FileDialog))
'Datei speichern:
FileDialog = wxFileDialog_ctor(0, fbstring_to_wxString("Datei speichern"), fbstring_to_wxString(CurDir), _
    fbstring_to_wxString(FileName), fbstring_to_wxString("*.*"), wxFD_SAVE Or wxFD_OVERWRITE_PROMPT, -1, -1)
wxFileDialog_ShowModal (FileDialog)

"wxFileDialog_GetFilenames" ermöglicht die Abfrage mehrer Dateinamen im Zusammenhang mit style = wxFD_MULTIPLE, jedoch geht dies eigentlich über die Möglichkeiten des einfachen WX-C Designers hinaus, der derzeit nur ein Fenster ermöglicht.

Messagebox


Eine Messagebox ist durch folgende Funktion definiert:

Declare Function wxMsgBox WXCALL Alias "wxMsgBox" (parent  As wxWindow Ptr, _
              message As wxString Ptr, _
              caption As wxString Ptr, _
              style   As  wxUint, _
              x       As  wxInt, _
              y       As  wxInt) As wxInt

Die Parameter sind eigentlich selbsterklärend (Beispiel siehe unten).
Parameter style:
wxYES Or wxNO: Messagebox mit einem "Ja"- und einem "Nein"-Button. Kann mit wxCANCEL kombiniert werden.
wxCANCEL: MessageBox mit einem "Abbrechen"-Button. Kann kombiniert werden mit wxYES Or wxNO oder mit wxOK.
wxOK: Messagebox mit einem "OK"-Button
Werte für Icons:
wxICON_EXCLAMATION: Ausrufezeichen
wxICON_HAND oder wxICON_ERROR: Error-Symbol
wxICON_QUESTION: Fragezeichen
wxICON_INFORMATION: Informations-Symbol
Die Werte für Icons können mit denen für den Messagebox-Typ(wxYES Or wxNO, wxCANCEL, wxOK) Or-verknüpft werden. Werden sie weggelassen, wird ein passendes Default-Icon erwendet.
Rückgabewert der Funktion ist der gedrückte Button (wxYES, wxNO, wxCANCEL oder wxOK)
Beispiel:

Dim As Integer result
result = wxMsgBox( 0, fbstring_to_wxString("Fenster schliessen?"), fbstring_to_wxString("Frage"), wxYES OR wxNO, -1, -1 )
If result = wxYes Then ...



TextEntryDialog (Input-Box)

Dies ist ein kleines Fenster zum Eingeben eines kurzen Textes. Es ist durch folgende Funktion
definiert:

Declare Function wxTextEntryDialog_ctor WXCALL Alias "wxTextEntryDialog_ctor" (parent As wxWindow Ptr, _
                            messageArg As wxString Ptr, _
                            captionArg As wxString Ptr, _
                            valueArg   As wxString Ptr, _
                            style      As wxUInt, _
                            x          As wxInt, _
                            y          As wxInt) As wxTextEntryDialog Ptr

Beispiel:

Dim TextDialog As wxTextEntryDialog Ptr
Dim s As String
TextDialog = wxTextEntryDialog_ctor(0, fbstring_to_wxString("Bitte Ihren Namen eingeben:"), _
   fbstring_to_wxString("Eingabe"), fbstring_to_wxString(s), wxOK, -1, -1)
wxTextEntryDialog_ShowModal(TextDialog)
s = wxString_to_fbstring(wxTextEntryDialog_GetValue (TextDialog))

Code-Hilfe-Datei

Unter http://www.freebasic-portal.de/downloads/sonstiges/code-hilfe-fuer-den-wx-c-designer-314.html kann eine Datei heruntergeladen werden, die alle in diesem Tutorial erklärten Funktionen so aufbereitet enthält, dass sie im Function Browser einer IDE ausgewählt werden können.

Grundsätzlicher Tipp

Weiß man nicht, wie eine bestimmte Funktion heißt, kann man in den wx-c Headern nachsehen. Diese sind gut sortiert, sodass man schnell fündig werden sollte. Zusammen mit der beigelegten Hilfedatei "wx.chm", lassen sich die Funktionen auch nachvollziehen. Die Hilfedatei bezieht sich auf wxWidgets, sodass diese nicht 100% übereinstimmen. Sollten Fragen aufkommen, sollte man sich an das FreeBASIC Forum wenden, oder sein Glück im Chat versuchen.

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 04.04.2012 von MitgliedAffemitwaffel angelegt.
  • Die aktuellste Version wurde am 20.02.2014 von MitgliedLothar Schirm gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen