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:

In Bezug auf das 1. Projekt hier die Antworten:

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:

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:

Hinweise:

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