banner

Der Frame

 

Um ein Programm mit einer grafischen Oberfläche zu entwickeln, wird als erstes ein Frame benötigt:

 

dim frame as wxFrame = new wxFrame(Nothing, -1, "Frame Test", wxDefaultPosition, wxSize(800, 600))

frame.show(true)

 

Mit diesem Befehl wird ein neuer Frame erzeugt. Doch schauen wir uns die einzelenen Parameter noch etwas näher an: 

 

"Nothing" bedeutet, dass der Frame kein übergeordnetes Fenster besitzt. Hier kann eine Verknüpfung zu anderen Fenstern hergestellt werden. Da allerdings ein Frame meist das übergeordnete Fenster ist, wird hier "Nothing" angegeben.

 

Als nächstes kommt die ID des Frames. -1 bedeutet, dass eine ID vom Programm erzeugt wird. Dafür gibt es auch die wxWidgets ID "wxID_ANY", die man dafür einsetzen kann. Die ID dient der eindeutigen Identifizierung einer Control.

 

"Test" ist der Titel des Frames. Er erscheint in der Titelleiste des Frames.

 

"wxDefaultPosition" gibt eine die Position des Frames als default an. Hier kann auch eine Position auf dem Bildschirm mit "wxPoint(x, y)" angegeben werden.

 

"wxSize(800, 600)"  bedeutet, dass der Frame eine Größe von 800 x 600 Pixel besitzt. Auch hier könnte man den Pointer "wxDefaultSize" benutzen.

Danach kann man als weiteren Parameter noch bestimmete Styles angeben, die ich hier jedoch vernachlässige.

Diese Aufteilung der Parameter wiederholt sich in vielen wxWidgets Klassen.

 

Nun wollen wir eine Toobar hinzufügen:

 

dim toolbar as wxToolbar = new wxToolbar(frame, -1)

frame.SetToolbar(toolbar)

 

 

Jetzt fügen wir einen Exit-Button der Toolbar hinzu:

 

toolbar.AddTool(wxID_EXIT, _("Beenden"), wxArtProvider_GetBitmap(wxART_QUIT))

toolbar.Realize()

 

 

Das Tool bekommt den Namen "Beenden". Nun werdet ihr euch fragen, warum steht der Name in Klammern mit einem Unterstrich? Diese Form wird von wxBasic als Wort erkannt, für welches es Übersetzungen geben kann. Es stellt somit die Schnittstelle für andere Sprachen dar. 

 

Anstelle eines eigenen Icons können wir vordefinierte Icons vom "wxArtProvider" benutzen. Welche es alles gibt, schaut euch bitte in der wxWidgets Hilfe oder im wxEditor an.

"Realize" aktualisiert die Toolbar und zeigt unser Tool korrekt an.

 

 

Fast unerlässlich für ein Programm ist ein Menu. Dieses erstellen wir so:

 

 

 

Als Erstes wird eine "Menubar" erstellt. Eine Menubar ist sozusagen die Menuleiste in dem Frame, in der alle Menus plaziert werden. Diese Menubar verknüpfen wir analog der Toolbar mit dem Frame.

 

Für ein "Datei" Menu müssen wir ein neues "wxMenu" erstellen. Hier nenne ich es "mFile". Diesem "mFile" können wir nun weitere Menupunkte (Menuitems) hinzufügen:

 

 

Dem Menuitem gebe ich hier das gleiche Icon wie in der Toolbar. Mit "\t Taste" weise ich dem Menuitem eine Taste oder Tastenkombination zu, in unserem Fall "Alt-X".

 

Jetzt müssen wir das Menuitem nur noch mit einen Event verknüpfen, sonst können wir es nicht aufrufen:

 

sub onExit(event as wxMenuEvent) handles frame.menuselected(wxID_EXIT)

  wxMessageBox(_("... und Tschüß"), _("Beende den Test"))

  end
end sub

 

Für eine Event-Verknüpfung gibt es 2 Möglichkeiten:

 

  1. Ich verwende den Befehl "handles" gefolgt von dem Event und der ID

  2. Ich verwende den Befehl "Connect"

 

Beide Befehle haben ihre Vor- und Nachteile:

Bei "handles" werden keine weiteren Zeilen benötigt, um den Event zuzuweisen. Die Zuweisung erfolgt allerdings global.

 

Eine Zuweisung mit "Connect" erfolgt nach folgendem Muster:

 

Connect(frame, -1, wxEVT_COMMAND_MENU_SELECTED, "onExit")

 

Eine solche Verknüpfung kann ich im Code mit "Disconnect" wider deaktivieren, wenn sie nicht benötigt wird.

 

Hier sieht man auch, dass bei "handles" das "wxEVT_Command_" weggelassen wird. Die Unterstriche entfallen grundsätzlich.

 

Bei den Menuitems wird eine Verknüpfung mit "handles" ausreichen, da die Menus sowieso global definiert werden.

 

 

So, unser erstes kleines Programm sieht also zusammengefasst nun so aus:

 

dim frame as wxFrame = new wxFrame(nothing, -1, "Test", wxDefaultPosition, wxSize(800, 600))
frame.Show(TRUE)

dim toolbar as wxToolBar = new wxToolBar(frame, -1)
frame.SetToolBar(toolbar)

toolbar.AddTool(wxID_EXIT, "Beenden", wxArtProvider_GetBitmap(wxART_QUIT))
toolbar.Realize()

dim mBar as wxMenuBar = new wxMenuBar()
dim mFile as wxMenu = new wxMenu()
mBar.Append(mFile, _("&Datei"))
frame.SetMenuBar(mBar)

dim mItem as wxMenuItem = new wxMenuItem(mFile, wxID_EXIT, _("&Beenden") & "\tAlt-X", _("Beendet die Anwendung"))
mItem.SetBitmap(wxArtProvider_GetBitmap(wxART_QUIT))
mFile.AppendItem(mItem)

sub onExit(event as wxCommandEvent) handles frame.menuselected(wxID_EXIT)
  wxMessageBox(_("... und Tschüß"), _("Beende den Test"))
  end
end sub