Benutzer-Werkzeuge

Webseiten-Werkzeuge


k12:k12.4:k12.4.4:k12.4.4.1:start

12.4.4.1 Eigene Dialoge – Projekt 1

Im ersten Beispiel wird ein Dialog entwickelt, der vor dem Haupt-Programm aufgerufen wird und mit dem zwei Daten – ein frei wählbarer Name und ein Passwort – erfasst werden. Bei der Planung eines eigenen Dialogs sind u.a. folgende Fragen zu beantworten, wobei die Reihenfolge keine Rangfolge impliziert:

  • (F1) In welchem Modus wird der Dialog aufgerufen?
  • (F2) Wird der Dialog als Vorschalt-Fenster des (Haupt-)Programms oder zur Laufzeit des (Haupt-)Programms angezeigt?
  • (F3) Soll im Dialog ein Titel (Fensterzeile) angezeigt werden?
  • (F4) Müssen Daten an den Dialog zur Änderung übergeben werden? Mit welchem Datentyp werden diese Daten an den Dialog übergeben (Typ, Array, Collection)?
  • (F5) Werden Daten aus dem Dialog ausgelesen? Sind es mehrere Daten? Welchen Daten-Typ haben diese Daten?
  • (F6) Wie soll die grafische Benutzeroberfläche für das Dialog-Fenster aussehen (Steuerelemente, Anordnung)?

In Bezug auf das 1. Projekt hier die Antworten:

  • (A1) Der Dialog wird modal aufgerufen → _call(..)-Methode.
  • (A2) Vorschalt-Fenster des (Haupt-)Programms.
  • (A3) Ja → Dialog-Titel-Text: 'Geben Sie die Daten ein!'
  • (A4) Nein.
  • (A5) Ja – genau zwei. Beide Daten sind vom gleichen Typ 'String' und werden als Schlüssel-Wert-Paar im Dialog in einer Collection gespeichert. Der Rückgabewert der Methode, mit dem der Dialog aufgerufen wird, hat deshalb den selben Datentyp.
  • (A6) Die folgende → Abbildung 12.4.4.1.1 zeigt zwei Label, zwei Textboxen und zwei Schaltflächen:

B1

Abbildung 12.4.4.1.1: Dialog-Box (IDE)

Mit diesen Vorleistungen kann die Entwicklung eines eigenen Dialogs in Angriff genommen werden.

Im Kern definiert man ein Dialog-Fenster → Abbildung 12.4.4.1.1 und ruft es auf mit Hilfe der speziellen _call(..)-Methode im Haupt-Programm auf. Informationen zu dieser Methode finden Sie in der Gambas-Dokumentation unter → http://gambaswiki.org/wiki/lang/special/call. In den optionalen Argumenten der _call(..)-Methode können Sie Daten an den Dialog übergeben und im Rückgabewert der Methode (Funktionswert) Daten aus dem Dialog lesen. Mit dem Aufruf der _call(..)-Methode kann die Dialog-Box sich selbst modal anzeigen! Nun können Sie die Daten im Dialog bearbeiten. Wird die Dialog-Box geschlossen, so kehrt der ShowModal()-Aufruf – das passierte automatisch – in den _call()-Aufruf zurück und Sie können Daten des Dialogs auslesen.

Das alles findet im ersten Beispiel im Open-Event des Hauptformulars statt – bevor dieses Formular angezeigt wird! Die _call()-Methode erlaubt es, ein Objekt syntaktisch wie eine Funktion zu benutzen. Nutzen Sie die _call(..)-Methode immer dann, wenn ein Formular (oder eine Klasse generell) eine ganz bestimmte Aufgabe hat, die sie selbst erledigen kann, ohne zum Beispiel Event-Handler in anderen Klassen zu benötigen.

Die folgenden beiden Quelltexte für das Beispiel 1 zeigen die Implementierung eines eigenen Dialogs in Gambas:

Quelltext (Haupt-)Programm (FMain.class):

[1] ' Gambas class file
[2] 
[3] Public Sub Form_Open()
[4]   Dim cData As Collection
[5]   Dim sDialogTitel As String
[6]   Dim frmLogin As New FLogin
[7]   
[8]   FMain.Center
[9]   FMain.Resizable = False
[10]   sDialogTitel = "Geben Sie die Daten ein!"
[11]   
[12] ' Bevor das Hauptfenster angezeigt wird, wird das Login-Fenster automatisch 'modal' geöffnet
[13]   cData = frmLogin(sDialogTitel)
[14]   If Not cData Then ' Abbruch?
[15]      Me.Close() ' Ohne Kommentar das Haupt-Programm beenden.
[16]      Return
[17]   Endif
[18] 
[19]   If cData["password"] <> "mgA+" Then ' Fehlerhafter Login-Versuch? Mit Kommentar beenden.
[20]      Message.Title = "Fehler in der Dialog-Box"
[21]      Message.Error("Login fehlgeschlagen!")
[22]      Me.Close()
[23]      Return
[24]   Else
[25]    ' Sonst Haupt-Programm starten ...  
[26]     lblGreet.Text = Subst$("Sie sind also &1. Gut zu wissen!", cData["name"])
[27]   Endif  
[28]   
[29] End ' Form_Open()

Kommentar:

  • Um den Rückgabewert der _call(..)-Methode zu sichern, wird in der Zeile 4 die Variable cData vom Daten-Typ Collection erzeugt. Er entspricht dem Typ des Rückgabewerts.
  • In der Zeile 6 wird ein neues Fenster vom Typ FLogin – das ist der Dialog – erzeugt.
  • Die komplette Funktionalität des Dialogs wird in einer einzigen _call(..)-Methode gekapselt. In der Zeile 13 wird die _call(..)-Methode aufgerufen. Als Argument wird der Dialog-Titel gesetzt.
  • Wenn die Dialog-Box geschlossen wird, dann wird der Rückgabewert der _call(..)-Methode in der Variable cData gespeichert.
  • Ist die Variable cData leer, weil der Dialog abgebrochen wurde, wird das Haupt-Programm beendet (Zeilen 14 bis 17).
  • Wurde ein falsches Passwort eingegeben (Zeile 19), dann wird ein Fehler angezeigt und das Haupt-Programm beendet (Zeilen 22 und 23).
  • Mit der Eingabe des richtigen Passworts wird das Haupt-Programm angezeigt und eine Meldung ausgegeben, die den gespeicherten Namen (Zeile 26) aus dem Dialog verwendet.

Quelltext Dialog (FLogin.class):

[1] ' Gambas class file
[2] 
[3] Public Sub _call(sTitel As String) As Collection  
[4]   Me.Text = sTitel
[5]   
[6]   If Me.ShowModal() = 0 Then 
[7]      Return Null
[8]   Else
[9]      Return ["name": txtName.Text, "password": txtPassword.Text]
[10]   Endif
[11] 
[12] End ' _call(sTitel As String)
[13] 
[14] Public Sub btnCancel_Click()
[15]   Me.Close(0)
[16] End ' btnCancel_Click()
[17] 
[18] Public Sub btnOK_Click()
[19]   Me.Close(1)
[20] End ' btnOK_Click()
[21] 
[22] Public Sub txtName_Activate()
[23]   txtPassword.SetFocus()
[24] End ' txtName_Activate()
[25] 
[26] Public Sub txtPassword_Activate()
[27]   btnOK_Click()
[28] End ' txtPassword_Activate()

Kommentar:

  • Der _call(..)-Methode wird in der Zeile 3 der Dialog-Titel als Argument mitgegeben.
  • Nach dem Schließen des Dialogs wird in den Zeilen 6 bis 10 ausgewertet, welchen Wert das Dialog-Fenster beim Schließen in Me.ShowModal() in Zeile 6 zurückgab. Beachten Sie: Dieser Rückgabewert hat nichts mit dem Funktionswert der _call(..)-Methode zu tun.
  • Der Wert von Me.ShowModal() ist entweder 0, wenn der Dialog abgebrochen wurde (Zeile 15) oder 1 (Zeile19), wenn die bearbeiteten Daten übernommen wurden.
  • Je nach Wert wird entweder eine leere Collection zurückgegeben oder die Collection mit dem eingegebenen Namen und dem Passwort.

Hinweise:

  • Die Methode Window.ShowModal() hat einen (oft vergessenen) Rückgabewert. Hat man ein Fenster modal offen und schließt es mit ME.Close(iStatus), dann ist der Rückgabewert von ShowModal() gleich iStatus.
  • Beachten Sie, dass Sie auch der Methode Window.Close() ein optionales Argument übergeben können, um es in geeigneter Weise auszuwerten.
  • Wenn ein geöffnetes Fenster mit dem Schließen-Symbol [x] in der Fenster-Leiste geschlossen wird, so wird automatisch der Wert 0 zurückgegeben.

Die Ergebnisse im ersten Beispiel sind wenig spektakulär – aber genau jene, die zu erwarten waren. Der Dialog wird als Vorschalt-Programm angezeigt und Sie werden zur Eingabe der erforderlichen Daten aufgefordert:

B2

Abbildung 12.4.4.1.2: Dialog-Box – Daten-Eingabe

Bei einem fehlerhaften Passwort – gespeichert im Rückgabewert des Dialogs cData[„passwort“] – sehen Sie diese Meldung und dann nichts mehr … .

B3

Abbildung 12.4.4.1.3: Fehlermeldung

War das Einloggen erfolgreich, wird das Hauptprogramm angezeigt. Im Kommentar wird der im Dialog eingegebene Name (cData[„name“]) verwendet:

B4

Abbildung 12.4.4.1.4: Das Haupt-Programm wird angezeigt …

Download

Wir verwenden Cookies, um unser Internetangebot optimal zu gestalten. Durch weitere Nutzung dieser Webseite stimmen Sie der Verwendung von Cookies zu. Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung
k12/k12.4/k12.4.4/k12.4.4.1/start.txt · Zuletzt geändert: 20.06.2016 (Externe Bearbeitung)

Seiten-Werkzeuge