Mit Gambas 3 lassen sich Profile auf komfortable Art in einer Konfigurationsdatei verwalten, weil die Klasse Settings um die Eigenschaft Keys erweitert wurde. Um auch unter Gambas 2 mit Profilen arbeiten zu können, wurde diese Klasse für Gambas 2 als SettingsP umgeschrieben. Das Umschreiben war erfolgreich – bis auf den Umstand, dass in den Profilnamen keine Umlaute und kein ß verwendet werden dürfen. Die Klasse SettingsP benötigt die Klasse _Settings_Keys und das Modul Main. Alle drei Dateien werden Ihnen im Programm-Beispiel 3 zur Verfügung gestellt. Deshalb müssen Sie die folgenden drei Dateien in Ihr Gambas2-Projekt einbinden:
Abbildung 19.1.3.1.1: Modul und Klassen für die Arbeit mit Profilen unter Gambas 2
Es wurde auch die Methode Settings.Clear(Sektion) genutzt, um bestehende Profile zu löschen.
Methode | Beschreibung |
---|---|
Settings.Clear | Diese Methode löscht das Settings-Objekt und gibt den belegten Speicher frei. |
Settings.Clear(Sektion) | Diese Methode löscht nur die angegebene Sektion in der Konfigurationsdatei. |
Tabelle: 19.1.3.1 Beschreibung von Methoden der Klasse Settings
Mit dem Programm Profil-Manager kann man
Abbildung 19.1.3.1.2: Profil-Manager – Gambas 2
Die Einträge zum Profilnamen, zum Server, zum User sowie dem Password sind notwendig, während die Angaben zum lokalen (Start-)Verzeichnis und zum Remote-Verzeichnis optional sind.
Da nicht jede Sektion in der Konfigurationsdatei einem Profil zugeordnet ist, werden den echten Profilen die beiden Zeichen P_ als Kennung vorangestellt. In der Sektion [LastProfil] befindet sich nur ein Schlüssel-Wert-Paar: LastProfilName=„Online-Buch“, in dem die Information zum zuletzt genutzten Profil steht, wie Sie dem Ausschnitt aus der verwendeten Konfigurationsdatei entnehmen können:
# Profile für einen FTP-Client [LastProfil] LastProfilName="Online-Buch" [P_Online-Buch] FTPServerName="www.gambas-buch.de" FTPUserName="hatux" FTPUserPassword="vdo#bs12" FTPInitialDirLocal="Online-Buch" FTPInitialDirRemote="dokuwiki" [P_Gymnasium] FTPServerName="www.gymnasium.de" FTPUserName="w00xyz" FTPUserPassword="f1#skkk" FTPInitialDirLocal="Bild&Ton" FTPInitialDirRemote="Projekttage" ...
Hier ist der vollständige Quellcode für das Programm Profil-Manager:
' Gambas class file ---> Gambas 2 PUBLIC pSettings AS SettingsP PUBLIC aProfilMatrix AS NEW String[] PUBLIC SUB Form_Open() FProfilManager.Center FProfilManager.Border = 1 aProfilMatrix.Clear pSettings = NEW SettingsP(Application.Path &/ "Profils/profils.conf", "Profile für einen FTP-Client") cmbProfilName.SetFocus txtFTPUserPassword.Password = TRUE cmbProfilName.ReadOnly = TRUE IF pSettings["LastProfil/LastProfilName"] = NULL THEN Message.Info("Es existiert kein Profil für das Client-Programm!") ' optional cmbProfilName.ReadOnly = FALSE ELSE LoadSettings(pSettings["LastProfil/LastProfilName"]) ENDIF ' = NULL? END ' Form_Open() PUBLIC SUB LoadSettings(OPTIONAL sProfilName AS String) DIM sSection AS String cmbProfilName.Clear() aProfilMatrix.Clear pSettings.Reload() FOR EACH sSection IN pSettings.Keys ' Profile (beginnen mit P_) auslesen und in Matrix speichern IF Left(sSection, 2) = "P_" THEN aProfilMatrix.Add(Mid(sSection, 3)) ENDIF NEXT IF sProfilName THEN aProfilMatrix.Remove(aProfilMatrix.Find(sProfilName)) ' Das Profil suchen und in der Matrix löschen aProfilMatrix.Add(sProfilName, 0) ' Das Profil an die 1. Stelle in der Matrix setzen GetProfilValues(sProfilName) ' Die Profil-Daten zum Profil anzeigen ELSE GetProfilValues(aProfilMatrix[0]) ENDIF ' sProfilName cmbProfilName.List = aProfilMatrix END ' LoadSettings() PRIVATE SUB SetProfil(sProfilName AS String) SetProfilValues(sProfilName) LoadSettings(sProfilName) cmbProfilName.ReadOnly = FALSE END ' SetProfil PRIVATE SUB Reset() cmbProfilName.Clear cmbProfilName.ReadOnly = FALSE txtFTPServerName.Clear txtFTPUserName.Clear txtFTPUserPassword.Clear txtInitialDirLocal.Clear txtInitialDirRemote.Clear txtFTPUserPassword.Password = FALSE END ' Reset PRIVATE SUB ProfilClear(sProfilName AS String) IF Message.Question("Soll das Profil " & sProfilname & " gelöscht werden?", "Ja", "Nein") = 1 THEN pSettings.Clear("P_" & sProfilName) pSettings.Save ELSE RETURN ENDIF LoadSettings() END ' ProfilClear(..) PUBLIC SUB GetProfilValues(sProfilName AS String) sProfilName = "P_" & sProfilName txtFTPServerName.Text = pSettings[sProfilName & "/FTPServerName"] txtFTPUserName.Text = pSettings[sProfilName & "/FTPUserName"] txtFTPUserPassword.Text = pSettings[sProfilName & "/FTPUserPassword"] txtInitialDirLocal.Text = pSettings[sProfilName & "/FTPInitialDirLocal"] txtInitialDirRemote.Text = pSettings[sProfilName & "/FTPInitialDirRemote"] END ' GetProfilValues(..) PUBLIC SUB SetProfilValues(sProfilName AS String) sProfilName = "P_" & sProfilName pSettings[sProfilName & "/FTPServerName"] = txtFTPServerName.Text pSettings[sProfilName & "/FTPUserName"] = txtFTPUserName.Text pSettings[sProfilName & "/FTPUserPassword"] = txtFTPUserPassword.Text pSettings[sProfilName & "/FTPInitialDirLocal"] = txtInitialDirLocal.Text pSettings[sProfilName & "/FTPInitialDirRemote"] = txtInitialDirRemote.Text pSettings.Save END ' SetProfilValues(..) PUBLIC SUB Form_Close() pSettings["LastProfil/LastProfilName"] = cmbProfilName.Text ' Auf den Save-Befehl kann verzichtet werden. Er wird automatisch ausgeführt beim Schließen des Programms. pSettings.Save END ' Form_Close() PUBLIC SUB cmbProfilName_Click() LoadSettings(cmbProfilName.Current.Text) END ' cmbProfilName_Click() PUBLIC SUB btnProfilClear_Click() ProfilClear(cmbProfilName.Text) END ' ProfilClear_Click() PUBLIC SUB btnProfilCreate_Click() IF Message.Question("Soll ein neues Profil angelegt werden?", "Ja", "Nein") = 1 THEN Reset() ELSE RETURN ENDIF END ' ProfilCreate PUBLIC SUB btnProfilSave_Click() IF Message.Question("Das neue oder geänderte Profil <br><b>" & cmbProfilName.Text & \ "</b><br>speichern?", "Ja", "Nein") = 1 THEN IF txtFTPServerName.Text <> "" AND txtFTPUserName.Text <> "" AND \ txtFTPUserPassword.Text <> "" AND cmbProfilName.Text <> "" THEN SetProfil(cmbProfilName.Text) cmbProfilName.ReadOnly = TRUE txtFTPUserPassword.Password = TRUE ELSE Message.Error("Die Profil-Daten sind nicht vollständig oder fehlerhaft!") RETURN ENDIF ' KontoDaten? ELSE RETURN ENDIF ' Question? END ' Profil speichern PUBLIC SUB btnManagerClose_Click() FProfilManager.Close END ' btnManagerClose