Growbook, Cannabis, Notizbuch, Growbuch, Pflanzenzucht, Samenbank, Seedbank, Software, Stammbaum, Kreuzen, züchten,growen,anbauen,News,GIB,Lux,Omega,Mars, Dünger,BioBizz,Hesi,Athena,
die Software für deinen Anbau

Willkommen

Tutorial 1: CreateWindow anwenden

The MaxGUI Beginner Tutorial Series - Tutorial 1: CreateWindow anwenden
(c) Assari Dec 22 2005
Ins Deutsche übersetzt von simi

Einleitung

Dies ist das erste, und wie ich hoffe einer grösseren Sammlung, Beginner Tutorial für MaxGUI, ein BlitzMax-Modul, welches viele Befehle zum erstellen und arbeiten mit einer GUI zu dieser excellenten Sprache hinzufügt.

Diese Tutorials sind für Beginner geschrieben, ich erwarte aber einige Grundkentnisse, wie den Editor MaxIDE zu bedienen, kopieren und einfügen von Code in die IDE und compilieren und starten von BlitzMax-Programmen. Auch Basics in Sachen Programmieren, wie Variablen, Schleifen und Bedingungen werden vorausgesetzt.

Beachte dass diese Tutorials unter Windows erstellt wurden. Ich weiss also nicht wie die Programme aussehen und ob sie sich auf den anderen Systemen gleich verhalten. Ich nehme aber an, dass sie im grossen und ganzen funktionieren sollten.

CreateWindow anwenden
Starten wir mit einem simplen Programm, welches ein Fenster mit dem Titel
"Mein Fenstertitel ist Hallo Welt" erstellt.

   

Superstrict

Import MaxGui.Drivers

MyFirstWindow:TGadget=CreateWindow("Mein Fenstertitel ist Hallo Welt", 200,200,320,240)

Repeat

 WaitEvent()
Until EventID()=EVENT_WINDOWCLOSE

End


Kopiere den obenstehenden Code, füge ihn in die MaxIDE ein und starte das Programm. Du solltest nun folgendes sehen (für Windows XP Benutzer):

    Tut1 1


Das Fenster verhält sich wie gewohnt. Man kann es verschieben, die Grösse ändern, minimieren und natürlich auch schliessen.

Jetzt schauen wir uns den den Code ein bisschen genauer an.

MyFirstWindow:TGadget=CreateWindow("Mein Fenstertitel ist Hallo Welt", 200,200,320,240)


Der obenstehende Code erstellt ein Fenster und zeigt es auf dem Computerbildschirm an. Das Zentrale Stück ist dabei die MaxGUI Funktion
CreateWindow.

In BlitzMax, wie auch in anderen Programmiersprachen, brauchen die Funktionen Parameter. Im Falle von
CreateWindow braucht es minimal folgende:

  • Den Text, welcher in der Titelbar erscheinen soll
  • Wo auf dem Bildschirm das Fenster erstellt werden soll
  • Wie gross das Fenster sein soll

Im obigen Beispiel ist folgendes gegeben:

  • Der Titeltext ist My Window Title is Hello World
  • Das Fenster wird bei den Koordinaten 200,200 erstellt
  • Die Grösse ist 320 auf 240 Pixel

Funktionen geben auch einen Wert zurück. CreateWindow gibt ein TGadget-Object zurück, welches wir MyFirstWindow genannt haben.

Objects sind ein grosser Teil von Blitzmax, aber wir werden uns nicht mit dem in diesem Tutorial beschaftigen. Wichtig ist, dass wir immer eine Variable angeben müssen, wo CreateWindow seine "Sachen" zurückgeben kann.

Über den Rest des Codes will ich nicht viel sagen, ausser dass er es dem Programm erlaubt, so lange zu warten, bis das Fenster durch einen Klick auf das "Close-Icon" geschlossen wird.

    Repeat
 WaitEvent()
Until EventID()=EVENT_WINDOWCLOSE

End


Wenn wir uns die Blitzmaxhilfe anschauen, sehen wir folgende Syntax:

Function CreateWindow:TGadget(name$,x,y,w,h,group:TGadget=Null,style=15)

Schauen wir uns das im Detail an:

  • Function sagt uns, dass dies eine Funktion ist.
  • CreateWindow:TGadget sagt uns, dass CreateWindow ein TGadget-Object zurückgibt.
  • Die Einträge zwischen den Klammern sind Parameter:-
    • name$ ist der Text, der in der Titelbar erscheinen wird.
    •  x,y sind die Koordinaten, an welchen das Fenster erscheinen wird.
    • w,h sind die Breite (width) und die Höhe (height) des Fensters.
    • group:TGadget ist die Gruppe, zu welchem das Fenster gehört. Dies behandeln wir in einem späteren Tutorial.
    • style ist zur Steuerung des Aussehens zuständig.

Zwei dieser Parameter, group:TGadget und style, sind anders geschrieben als der Rest, group:TGadget=null und style=15 => Sie haben eine Vorgabe (einen Wert).

Immer wenn du Vorgaben bei Funktionsparametern siehst, heisst das, dass der Parameter optinal (=es wird nicht unbedingt eine Angabe benötigt) ist und bereits den Wert der Vorgabe hat. In diesem Fall ist
group gleich null (das Fenster gehört zu keinem anderen Gadget) und style ist 15, was zu einem Fenster wie im Beispiel führt.

Der Parameter "Style"

MaxGUI hat ein Set von Konstanten, mit denen das Aussehen beeinflusst werden kann:

Konstante Bedeutung
WINDOW_TITLEBAR Das Fenster hat eine Titelbar mit dem Titeltext darin
WINDOW_RESIZABLE Das Fenster kann vom User in der Grösse verändert werden
WINDOW_MENU Das Fenster hat eine Menubar
  WINDOW_STATUS Das Fenster hat eine Statusbar
WINDOW_TOOL Das Fenster wird auf einigen Platformen mit kleinerer Titelbar angezeigt
WINDOW_CLIENTCOORDS Die Grösse bezieht sich auf die Clientfläche, nicht auf die Fenstergrösse
WINDOW_HIDDEN Das Fenster wird versteckt (unsichtbar) erstellt.
WINDOW_ACCEPTFILES Aktiviert Drag&Drop-Aktionen


Schauen wir mal, was passiert, wenn wir unser Fenster mit verschiedenen Style-Werten erstellen.

   

Superstrict

Import MaxGui.Driver

MyFirstWindow:TGadget=CreateWindow("Mein Fenster mit WINDOW_TITLEBAR", 200,200,320,240,Null,WINDOW_TITLEBAR)

Repeat
 WaitEvent()
Until EventID()=EVENT_WINDOWCLOSE

End


Beachte, dass ich den Titeltext geändert habe, um zu zeigen, was passiert.

Vergleiche nun die beiden Fenster. Die sichtbarenen Änderungen sing das Fehlen der min/max-Buttons und der Statuszeile. Das Verhalten des Fensters ist jetzt auch unterschiedlich: Man kann die Grösse nicht mehr ändern, und auch das Minimieren geht nicht mehr.

    Tut1 1
Tut1 2

MaxGUI erlaubt es, Fenster mit verschiedenen Styles zu erstellen. Die Styles können entweder mit | (OR) verknüpft werden, oder einfach addiert werden.

Wenn man zum Beispiel ein vergrösser/verkleinerbares Fenster mit einer Titelbar haben will, macht man folgendes:

   

Superstrict

Import MaxGui.Driver

MyFirstWindow:TGadget=CreateWindow("Mein Fenster mit WINDOW_RESIZABLE", 200,200,320,240,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE)

Repeat
 WaitEvent()
Until EventID()=EVENT_WINDOWCLOSE

End


Man kann jetzt sehen, dass das Fenster minimiert, maximiert und auch in der Grösse verändert werden kann.

    Tut1 2
Tut1 3


Ich selber bevorzuge eine separate, lokale Variable um den Style zu definieren, so dass die
CreateWindow Funktion nicht so "übergross" wirkt:

   

Superstrict

Import MaxGui.Driver

Local style = WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_MENU|WINDOW_STATUS

MyFirstWindow:TGadget=CreateWindow("Mein Fenster mit WINDOW_TITLEBAR", 200,200,320,240,Null,style)

Repeat
 WaitEvent()
Until EventID()=EVENT_WINDOWCLOSE

End


Die Variable "style" enthält den gewünschten Style. Selbstverständlich kann man sich dies auch ausgeben lassen:

   

Superstrict

Import MaxGui.Driver

Local style = WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_MENU|WINDOW_STATUS
Print "Der Wert von Style ist "+style

MyFirstWindow:TGadget=CreateWindow("Mein Fenster mit WINDOW_TITLEBAR", 200,200,320,240,Null,style)

Repeat
 WaitEvent()
Until EventID()=EVENT_WINDOWCLOSE

End


Man kann jetzt im MaxIDE Output Tabber sehen, dass die Variable style 15 ist.


    Tut1 4


Dies ist kein Wunder, denn das neu erstellte Fenster ist genau dasselbe, welches wir in unserem ersten Programm sahen. In der Hilfe steht auch, dass der Standardstyle "WINDOW_TITLEBAR | WINDOW_RESIZABLE | WINDOW_MENU | WINDOW_STATUS" ist, was 15 ergibt. (Siehe Funktionsdefiniton, style=15)

    Tut1 1


WINDOW_CLIENTCOORDS
Ein anderer interessanter Style ist WINDOW_CLIENTCOORDS. Schauen wir, was er bewirkt:

   

Superstrict

Import MaxGui.Driver

Local style = WINDOW_TITLEBAR | WINDOW_RESIZABLE | WINDOW_MENU | WINDOW_STATUS | WINDOW_CLIENTCOORDS

MyFirstWindow:TGadget=CreateWindow("Mein Fenster mit WINDOW_CLIENTCOORDS", 200,200,320,240,Null,style)

Repeat
 WaitEvent()
Until EventID()=EVENT_WINDOWCLOSE

End


Kopiere und füge das obenstehende Programm in die MaxIDE ein und führe es aus. Vergleiche das Fenster mit den Vorhergehenden.

    Tut1 1
Tut1 5


Wir sehen nun, dass die Grösse von 320 x 240 für die zentrale Fläche, die Clientfläche, gilt. Die anderen Items, wie die Statusbar, Menübar, Ränder und auch die Titelleiste gehöhren nicht zu dieser Grösse, deshalb ist das Fenster grösser.

WINDOW_STATUS
Die WINDOW_STATUS-Konstante erlaubt es, wie wir schon gesehen haben, eine Statusbar am unteren Ende des Fensters zu erstellen.

Hier ein Bespiel für die Anwendung einer Statusbar:

   

Superstrict

Import MaxGui.Driver

Local style = WINDOW_TITLEBAR | WINDOW_RESIZABLE | WINDOW_STATUS | WINDOW_CLIENTCOORDS

MyFirstWindow:TGadget=CreateWindow("Mein Fenster mit WINDOW_STATUS", 200,200,320,240,Null,style)

Repeat
 WaitEvent()
  SetStatusText MyFirstWindow, "aktuelle Grösse (Breite, Höhe) ist " + ClientWidth(MyFirstWindow)+ "," + ClientHeight(MyFirstWindow)

Until EventID()=EVENT_WINDOWCLOSE

End


Kopiere den obigen Code und führe ihn aus. Du solltest folgendes sehen:

    Tut1 6


Beachte den Text in der Statusbar. Jetzt kannst du die Grösse des Fensters verändern. Wie erwartet verändert sich auch der Text in der Statusbar.

Wir haben das durch diese Codezeile erreicht:

    SetStatusText MyFirstWindow, "Meine aktuelle Grösse (Breite, Höhe) ist " + ClientWidth(MyFirstWindow)+ "," + ClientHeight(MyFirstWindow)


SetStatusText hat die folgende Syntax:

Function SetStatusText( window:TGadget,text$ )


Sie sendet den Text text$ an das Fenster window. Somit sendet unser Beispiel den Text "My current size (w,h) is " an das Fenster MyFirstWindow.

Jetzt frage ich MaxGUI nach der aktuellen Grösse des Fenster. Das mache ich mit den Funktionen
ClientHeight und ClientWidth, welche selbsterklärend sein sollten. Ein klarerer Weg dies zu machen, wäre folgender:

   

Superstrict

Import MaxGui.Driver

Local style = WINDOW_TITLEBAR | WINDOW_RESIZABLE | WINDOW_STATUS | WINDOW_CLIENTCOORDS

MyFirstWindow:TGadget=CreateWindow("Mein Fenster mit WINDOW_STATUS", 200,200,320,240,Null,style)

Repeat
 WaitEvent()
  Local text$=
"Grösse (Breite, Höhe) ist " + ClientWidth(MyFirstWindow)+ "," + ClientHeight(MyFirstWindow)
  SetStatusText MyFirstWindow, text$

Until EventID()=EVENT_WINDOWCLOSE

End


Das ist alles für unser erstes Tutorial. Ich hoffe das war ein guter Einstieg in die Welt von MaxGUI. Die anderen Styles wie
WINDOW_HIDDEN und WINDOW_ACCEPTFILES sind ein bisschen schwieriger, deshalb werden sie nicht hier besprochen. Probiere noch ein bisschen mit den Styles und den verschiedenen Kombinationen herum.

Bevor wir weitermachen, lass uns nochmals daran errinnern, was wir gelernt haben:

  • Wir haben die Funktion CreateWindow und ihre verschiedenen Parameter kennen gelernt.
  • Wir probierten verschieden Styles aus, und zeigten deren Effekte an einem erstellten Fenster.
  • Wir haben auch ein paar andere MaxGUI-Funktionen wie SetStatusText, ClientWidth und ClientHeight kennengelernt.

Im nächsten Tutorial werden wir die Buttons entdecken und uns selbst in das Konzept der Events einarbeiten. Bis dann, pass auf smile


0/5 : Nicht bewertet