User Tools

Site Tools


k13:k13.3:k13.3.2:start

13.3.2 Dynamic menu

The development environment (IDE) of Gambas sets in the menu bar under 'File' in the menu 'Recently opened' a menu list of k menus, which changes dynamically at runtime of the development environment. The list can be empty or contain entries whose number is limited. A menu with such properties is called dynamic menu.

IDE Gambas

Figure 13.3.2.1: Menu with menu list in the Gambas IDE

Planning the use of a dynamic menu requires, among other things, clear answers to the following questions:

(F1) Which menu in the menu structure should be equipped with a dynamic menu?
(F2) What will be saved in the menu list - recognizable by the sign >?
(F3) In which form should the entries in the menu list of the menu selected with (F1) be saved?
(F4) Is the selected menu not displayed or only deactivated if the menu list is empty?
(F5) What is the maximum number of entries to include in the menu list?
(F6) Should the entries in the menu list be sorted?

13.3.2.1 Preliminary considerations for the dynamic menu

The above 6 questions are answered project-related in the following project DynMenu:

MenüListe

Figure 13.3.2.1.1.1: Menu with menu list (project DynMenu)

  • The menu with the label 'Recently opened table' is to be assigned a menu list that changes dynamically. The name of the menu is mnuLastFiles. This menu is created in the same way as all other menus of the menu bar in the menu editor.
  • The menu list will contain a maximum of 5 menus. You enter the file names that are extracted from the paths of the most recently opened table files as labels. All menus in the list have the same object name and event name and are created dynamically.
  • Externally, the paths of the most recently opened table files are stored in a file lastfiles. conf. The methods of a Settings object store and read out the maximum of 5 entries in the menu list of the menu selected with (F1).
  • Internally, the paths of the last opened table files are stored in an array and another array synchronously records only the file names of the last opened table files.
  • If the menu list is empty - and this is guaranteed at the first start of the program - then the menu labeled 'Last opened table' will not be displayed.

Programmstart

  • The menu list should contain a maximum of 5 menus.
  • The entries in the menu list are not displayed sorted, because you will then no longer be able to recognize the name of the table file that was last opened. Only the order of opening determines the ranking in the menu list.
  • The menu list for the dynamic menu contains a maximum of 5 menus with the names of the last opened table files as labels. Whether the opened file has also been converted - i. e. edited - cannot be guaranteed. However, since a backup copy with the original file name but the extension.bak is created for each edited file, the starting point would be considerations for program extensions.

13.3.2.2 Project DynMenu

In a project, the preliminary considerations described in Section 13.3.2.1 are implemented when using a dynamic menu. This program has been in use since the beginning of the first publications of chapters of the online book on gambas-buch. de by the authors, when extensive tables have to be converted from a document - written with LibreOffice Writer - into the DokuWiki format.

13.3.2.3 Source Code Module MS. module

The procedures that create an instance of the Settings class and configure the Settings object, as well as importing and saving the paths of the recently opened table files, are stored in a module MS.module.

[1] ' Gambas module file
[2] ' MS = Module & Settings
[3] 
[4] Private hFile As File
[5] Public pSettings As Settings
[6] Public Matrix As New String[]
[7] Public ShortMatrix As New String[]
[8] Public Const iLastNumber As Integer = 5
[9] 
[10] Public Sub Init()
[11]   Dim sSettingsPath, sSlotName, sSettingsFileName As String
[12]   
[13]   sSlotName = "LastFiles"
[14]   sSettingsPath = Application.Path &/ sSlotName
[15]   sSettingsFileName = "lastfiles.conf"
[16]   
[17]   If Not Exist(sSettingsPath) Then 
[18]      Mkdir sSettingsPath
[19]   Endif 
[20]   If Not Exist(sSettingsPath &/ sSettingsFileName) Then 
[21]      hFile = Open (sSettingsPath &/ sSettingsFileName) For Create
[22]      hFile.Close
[23]   Endif ' Not Exist(..)
[24] 
[25] ' Ein Settings-Objekt erblickt das Licht im Speicher ...
[26]   pSettings = New Settings(sSettingsPath &/ sSettingsFileName, "Dateiliste")
[27]   
[28] End ' Init()
[29] 
[30] Public Sub GetLastListFromSettings()
[31]   Dim iCount As Integer
[32]    
[33]   pSettings.Reload() ' optional
[34]   Matrix.Clear
[35]   ShortMatrix.Clear
[36]   iCount = 0 
[37]   
[38]   While pSettings["FileList" & "/File" & Str(iCount)] <> Null
[39]     If Exist(pSettings["FileList" & "/File" & Str(iCount)]) Then ' Existiert diese Datei?
[40]        Matrix.Add(pSettings["FileList" & "/File" & Str(iCount)]) ' Datei-Pfad in Matrix speichern
[41]      ' Datei-Name in ShortMatrix speichern
[42]        ShortMatrix.Add(File.Name(pSettings["FileList" & "/File" & Str(iCount)])) 
[43]     Endif ' File.Exist?
[44]     Inc iCount
[45]   Wend ' <> NULL
[46] 
[47] End ' GetLastListFromSettings()
[48] 
[49] Public Sub SetLastListToSettings()
[50]   Dim iCount As Integer
[51]   
[52]   pSettings.Clear
[53]     For iCount = 0 To Matrix.Max
[54]         pSettings[sSlotName & "/File" & Str(iCount)] = Matrix[iCount]
[55]       ' Die maximal 5 Schlüssel-Wert-Paare unter dem Slot "LastFiles" werden generiert
[56]     Next ' iCount
[57]   pSettings.Save ' Update der Konfigurationsdatei 'lastfiles.conf'
[58] 
[59] End ' SetLastListToSettings()

13.3.2.4 Source code FMain. class

The complete project can be found in the download area. Here, the source code - stored in the file FMain. class - is only played back and commented on in excerpts:

[1] ' Gambas class file
[2] 
[3] Public fFile As File
[4] Public sCurrentFilePath As String
[5] 
[6] Public Sub Form_Open()  
[7]   
[8]   FMain.Center
[9]   FMain.Resizable = False    
[10]   mnu1ConvertTable.Enabled = False
[11]   mnu1SaveTable.Enabled = False
[12]   mnu2CenteredTable.Checked = False  
[13]   btnReset.Enabled = False
[14] 
[15]   MS.Init()
[16]   MS.GetLastListFromSettings()
[17]   UpdateMenu()
[18]   
[19] End ' Form_Open()
[20] 
[21] Public Sub UpdateMenu()
[22]   Dim MenuItem As Menu
[23]   Dim sFileName As String
[24] 
[25]   mnu1LastFiles.Children.Clear ' Alle alten Einträge in der Menüliste von mnu1LastFiles löschen
[26]   If MS.ShortMatrix.Count = 0 Then ' Wenn die Menüliste leer ist ...
[27]      mnu1LastFiles.Visible = False ' dann ist das Menü 'mnu1LastFiles' nicht sichtbar
[28]   Else
[29]    ' MenüListe für das Menü 'mnu1LastFiles' erzeugen
[30]      For Each sFileName In MS.ShortMatrix
[31]          MenuItem = New Menu(mnu1LastFiles) As "mnuLast" ' EventName ist 'mnuLast'!
[32]          MenuItem.Text =  sFileName
[33]          MenuItem.Picture = Picture["icon:/16/insert-text"]
[34]      Next ' sFileName
[35]   Endif ' MS.ShortMatrix.Count = 0? 
[36]   
[37] End ' UpdateMenu
[38] 
[39] Public Sub mnuLast_Click()
[40]   Dim iIndex As Integer
[41]   
[42]   If MS.ShortMatrix.Find(Last.Text) <> -1 Then
[43]      iIndex = MS.ShortMatrix.Find(Last.Text)
[44]      sCurrentFilePath = MS.Matrix[iIndex]
[45]    ' Alternative: sCurrentFilePath = MS.Matrix[MS.ShortMatrix.Find(Last.Text)]
[46]      fFile = Open sCurrentFilePath For Input 
[47]      Reset()
[48]      mnu1ConvertTable.Enabled = True
[49]      ShowTable()
[50]   Endif ' Find?
[51]   
[52] End ' mnu1Last_Click
[53] 
[54] Public Function OpenTable() As Boolean
[55]  
[56]  Dialog.Title = "Importieren Sie eine Tabellen-Text-Datei!"
[57]  Dialog.Filter = ["*.txt", "Text-Dateien"]
[58]  
[59]  If Dialog.OpenFile(False) = True Then ' Multiselect = False (Standard)
[60]     Message.Info("Das Öffnen der Tabellen-Datei wurde abgebrochen!")
[61]     Return False ' Cancel-Button gedrückt
[62]  Else 
[63]    fFile = Open Dialog.Path For Input 
[64]    If Lof(fFile) = 0 Then 
[65]       Message.Info("Die Text-Datei ist leer!")
[66]       fFile.Close
[67]       Return False
[68]    Endif ' Lof(fFile) = 0?
[69]  Endif ' Dialog.OpenFile(False) = True
[70]     
[71]  sCurrentFilePath = Dialog.Path ' Der Variablen 'sCurrentFilePath' wird der DialogPfad zugewiesen
[72]  
[73]   If Not MS.Matrix.Exist(Dialog.Path) Then ' Gibt es diese Datei nicht in der Matrix ...
[74]      If MS.Matrix.Count = MS.iLastNumber Then ' und sind schon 5 Elemente im Array Matrix, 
[75]      MS.Matrix.Remove(0) ' dann das 1. Element im Array Matrix löschen   
[76]         MS.ShortMatrix.Remove(0) ' sowie das 1. Element im Array ShortMatrix löschen.
[77]      Endif ' MS.Matrix.Count = MS.iLastNumber?
[78]      MS.Matrix.Add(Dialog.Path) ' Datei-Pfad wird am Ende vom Array 'Matrix' eingefügt
[79]      MS.ShortMatrix.Add(File.Name(Dialog.Path)) ' Datei-Name wird am Ende von 'ShortMatrix' eingefügt
[80]      UpdateMenu() ' Die Menüliste wird erneuert
[81]   Endif ' Matrix.Exist?
[82]   Wait
[83]   Reset()
[84]   mnu1ConvertTable.Enabled = True
[85]   Return True
[86] 
[87] End ' OpenTable()
[88] 
[89] ...
[90] 
[91] Public Sub Form_Close()  
[92]   MS.SetLastListToSettings()
[93]   Try fFile.Close
[94] End ' Form_Close

Additional comments:

  • In lines 15 to 17, a Settings object is instantiated whose methods are used to read out the key value pairs (key value pairs) stored in the configuration file lastfiles. conf under the LastFiles slot and store them as elements (table file path) in the array matrix. Only the corresponding file names are stored in the ShortMatrix array. The menu list for the mnu1LastFiles menu is then generated from the contents of the ShortMatrix array. If this list is empty, the mnu1LastFiles menu is not visible.
  • The OpenTable() function in rows 54 to 87 is already adequately commented. In the file selection dialog only text files are displayed due to the filter setting. Within the function, line 80 calls the procedure UpDateMenu(), which causes the menu list of the dynamic menu to be refreshed.
  • When the program is terminated, the list of recently opened table files - stored in array matrix - is saved in the configuration file lastfiles.conf under the LastFiles slot (line 92). This means that the list is now available at the next program start.
  • Please note: If some of the last 5 table files opened have been deleted, moved or renamed before the next program startup, the following lines from the source code of the procedure GetLastListFromSettings() will provide the correct menu list.

Extract from the source code of the procedure GetLastListFromSettings():

[1] While pSettings["FileList" & "/File" & Str(icount)] <> Null
[2]     If Exist(pSettings["FileList" & "/File" & Str(icount)]) Then ' Existiert diese Datei?
[3]        Matrix.Add(pSettings["FileList" & "/File" & Str(icount)]) ' Datei-Pfad in Matrix speichern
[4]      ' Datei-Name in ShortMatrix speichern
[5]        ShortMatrix.Add(File.Name(pSettings["FileList" & "/File" & Str(icount)])) 
[6]     Endif ' File.Exist?
[7]     Inc icount
[8]   Wend ' <> NULL

This is the content of the configuration file lastfiles.conf at a certain point in time:

# Dateiliste 
[FileList] 
File0="/home/hans/k12.3.4_tab.txt" 
File1="/home/hans/k22.3.2_tab.txt" 
File2="/home/hans/k3.7_tab.txt" 

13.3.2.5 Download

13.3.2 Dynamisches Menü

Die Entwicklungsumgebung (IDE) von Gambas setzt in der Menüleiste unter 'Datei' im Menü 'Zuletzt geöffnet' eine Menüliste aus k Menüs ein, die sich zur Laufzeit der Entwicklungsumgebung dynamisch ändert. Die Liste kann leer sein oder Einträge enthalten, deren Anzahl jedoch begrenzt ist. Ein Menü mit derartigen Eigenschaften nennt man dynamisches Menü.

IDE Gambas

Abbildung 13.3.2.1: Menü mit Menüliste in der IDE von Gambas

Die Planung des Einsatzes eines dynamischen Menüs erfordert u.a eindeutige Antworten auf die folgenden Fragen:

(F1) Welches Menü in der Menüstruktur soll mit einem dynamischen Menü ausgestattet werden?
(F2) Was wird in der Menüliste – am Zeichen > erkennbar – gespeichert werden?
(F3) In welcher Form sollen die Einträge in der Menüliste des bei (F1) ausgewählten Menüs gespeichert werden?
(F4) Wird das ausgewählte Menü nicht angezeigt oder nur deaktiviert, wenn die Menüliste leer ist?
(F5) Wie viel Einträge soll die Menüliste maximal aufnehmen?
(F6) Sollen die Einträge in der Menüliste sortiert werden?

13.3.2.1 Vorüberlegungen zum dynamischen Menü

Die o.a. 6 Fragen werden im folgenden Projekt DynMenu projektbezogen beantwortet:

MenüListe

Abbildung 13.3.2.1.1: Menü mit Menüliste (Projekt DynMenu)

  • Dem Menü mit der Beschriftung 'Zuletzt geöffnete Tabelle' soll eine Menüliste zugeordnet werden, die sich dynamisch ändert. Als Name des Menüs ist mnuLastFiles vorgesehen. Dieses Menü wird wie alle anderen Menüs der Menüleiste im Menü-Editor angelegt.
  • In der Menüliste werden maximal 5 Menüs stehen. Sie tragen als Beschriftung die Dateinamen, die aus den Pfaden der zuletzt geöffneten Tabellendateien extrahiert werden. Alle Menüs in der Liste haben den gleichen Objekt-Namen und den gleichen Event-Namen und werden dynamisch erzeugt.
  • Extern werden die Pfade der zuletzt geöffneten Tabellendateien in einer Datei lastfiles.conf gespeichert. Das Speichern und Auslesen der maximal 5 Einträge in der Menüliste des bei (F1) ausgewählten Menüs übernehmen Methoden eines Settings-Objekts.
  • Intern werden die Pfade der zuletzt geöffneten Tabellendateien in einem Array gespeichert und ein weiteres Array nimmt synchron dazu nur die Dateinamen der zuletzt geöffneten Tabellendateien auf.
  • Wenn die Menüliste leer ist – und das ist sie beim ersten Programmstart garantiert – dann wird das Menü mit der Beschriftung 'Zuletzt geöffnete Tabelle' nicht angezeigt.

Programmstart

  • Die Menüliste soll maximal 5 Menüs aufnehmen.
  • Die Einträge in der Menüliste werden nicht sortiert angezeigt, weil man dann nicht mehr den Namen der Tabellendatei erkennen kann, die zuletzt geöffnet wurde. Nur die Reihenfolge beim Öffnen bestimmt die Rangfolge in der Menüliste.
  • In der Menüliste für das dynamische Menü finden Sie maximal 5 Menüs mit den Namen der zuletzt geöffneten Tabellendateien als Beschriftung. Ob die geöffnete Datei auch konvertiert – also bearbeitet worden ist – kann nicht garantiert werden. Da aber für jede bearbeitete Datei eine Sicherheitskopie mit dem originalen Dateinamen, jedoch der Extension .bak angelegt wird, wäre das Ausgangspunkt von Überlegungen für Programmerweiterungen.

13.3.2.2 Projekt DynMenu

In einem Projekt werden die im Abschnitt 13.3.2.1 beschriebenen Vorüberlegungen beim Einsatz eines dynamischen Menüs umgesetzt. Dieses Programm ist seit Beginn der ersten Veröffentlichungen von Kapiteln des Online-Buches auf gambas-buch.de bei den Autoren im Einsatz, wenn umfangreiche Tabellen aus einem Dokument – geschrieben mit LibreOffice Writer – in das DokuWiki-Format konvertiert werden müssen.

13.3.2.3 Quelltext Modul MS.module

Die Prozeduren, die eine Instanz der Settings-Klasse anlegen und das Settings-Objekt konfigurieren sowie das Auslesen und das Speichern der Pfade der zuletzt geöffneten Tabellendateien realisieren, sind in ein Modul MS.module ausgelagert.

[1] ' Gambas module file
[2] ' MS = Module & Settings
[3] 
[4] Private hFile As File
[5] Public pSettings As Settings
[6] Public Matrix As New String[]
[7] Public ShortMatrix As New String[]
[8] Public Const iLastNumber As Integer = 5
[9] 
[10] Public Sub Init()
[11]   Dim sSettingsPath, sSlotName, sSettingsFileName As String
[12]   
[13]   sSlotName = "LastFiles"
[14]   sSettingsPath = Application.Path &/ sSlotName
[15]   sSettingsFileName = "lastfiles.conf"
[16]   
[17]   If Not Exist(sSettingsPath) Then 
[18]      Mkdir sSettingsPath
[19]   Endif 
[20]   If Not Exist(sSettingsPath &/ sSettingsFileName) Then 
[21]      hFile = Open (sSettingsPath &/ sSettingsFileName) For Create
[22]      hFile.Close
[23]   Endif ' Not Exist(..)
[24] 
[25] ' Ein Settings-Objekt erblickt das Licht im Speicher ...
[26]   pSettings = New Settings(sSettingsPath &/ sSettingsFileName, "Dateiliste")
[27]   
[28] End ' Init()
[29] 
[30] Public Sub GetLastListFromSettings()
[31]   Dim iCount As Integer
[32]    
[33]   pSettings.Reload() ' optional
[34]   Matrix.Clear
[35]   ShortMatrix.Clear
[36]   iCount = 0 
[37]   
[38]   While pSettings["FileList" & "/File" & Str(iCount)] <> Null
[39]     If Exist(pSettings["FileList" & "/File" & Str(iCount)]) Then ' Existiert diese Datei?
[40]        Matrix.Add(pSettings["FileList" & "/File" & Str(iCount)]) ' Datei-Pfad in Matrix speichern
[41]      ' Datei-Name in ShortMatrix speichern
[42]        ShortMatrix.Add(File.Name(pSettings["FileList" & "/File" & Str(iCount)])) 
[43]     Endif ' File.Exist?
[44]     Inc iCount
[45]   Wend ' <> NULL
[46] 
[47] End ' GetLastListFromSettings()
[48] 
[49] Public Sub SetLastListToSettings()
[50]   Dim iCount As Integer
[51]   
[52]   pSettings.Clear
[53]     For iCount = 0 To Matrix.Max
[54]         pSettings[sSlotName & "/File" & Str(iCount)] = Matrix[iCount]
[55]       ' Die maximal 5 Schlüssel-Wert-Paare unter dem Slot "LastFiles" werden generiert
[56]     Next ' iCount
[57]   pSettings.Save ' Update der Konfigurationsdatei 'lastfiles.conf'
[58] 
[59] End ' SetLastListToSettings()

13.3.2.4 Quelltext FMain.class

Das vollständige Projekt finden Sie im Downloadbereich. Hier wird der Quelltext – gespeichert in der Datei FMain.class – nur in Auszügen wiedergegeben und kommentiert:

[1] ' Gambas class file
[2] 
[3] Public fFile As File
[4] Public sCurrentFilePath As String
[5] 
[6] Public Sub Form_Open()  
[7]   
[8]   FMain.Center
[9]   FMain.Resizable = False    
[10]   mnu1ConvertTable.Enabled = False
[11]   mnu1SaveTable.Enabled = False
[12]   mnu2CenteredTable.Checked = False  
[13]   btnReset.Enabled = False
[14] 
[15]   MS.Init()
[16]   MS.GetLastListFromSettings()
[17]   UpdateMenu()
[18]   
[19] End ' Form_Open()
[20] 
[21] Public Sub UpdateMenu()
[22]   Dim MenuItem As Menu
[23]   Dim sFileName As String
[24] 
[25]   mnu1LastFiles.Children.Clear ' Alle alten Einträge in der Menüliste von mnu1LastFiles löschen
[26]   If MS.ShortMatrix.Count = 0 Then ' Wenn die Menüliste leer ist ...
[27]      mnu1LastFiles.Visible = False ' dann ist das Menü 'mnu1LastFiles' nicht sichtbar
[28]   Else
[29]    ' MenüListe für das Menü 'mnu1LastFiles' erzeugen
[30]      For Each sFileName In MS.ShortMatrix
[31]          MenuItem = New Menu(mnu1LastFiles) As "mnuLast" ' EventName ist 'mnuLast'!
[32]          MenuItem.Text =  sFileName
[33]          MenuItem.Picture = Picture["icon:/16/insert-text"]
[34]      Next ' sFileName
[35]   Endif ' MS.ShortMatrix.Count = 0? 
[36]   
[37] End ' UpdateMenu
[38] 
[39] Public Sub mnuLast_Click()
[40]   Dim iIndex As Integer
[41]   
[42]   If MS.ShortMatrix.Find(Last.Text) <> -1 Then
[43]      iIndex = MS.ShortMatrix.Find(Last.Text)
[44]      sCurrentFilePath = MS.Matrix[iIndex]
[45]    ' Alternative: sCurrentFilePath = MS.Matrix[MS.ShortMatrix.Find(Last.Text)]
[46]      fFile = Open sCurrentFilePath For Input 
[47]      Reset()
[48]      mnu1ConvertTable.Enabled = True
[49]      ShowTable()
[50]   Endif ' Find?
[51]   
[52] End ' mnu1Last_Click
[53] 
[54] Public Function OpenTable() As Boolean
[55]  
[56]  Dialog.Title = "Importieren Sie eine Tabellen-Text-Datei!"
[57]  Dialog.Filter = ["*.txt", "Text-Dateien"]
[58]  
[59]  If Dialog.OpenFile(False) = True Then ' Multiselect = False (Standard)
[60]     Message.Info("Das Öffnen der Tabellen-Datei wurde abgebrochen!")
[61]     Return False ' Cancel-Button gedrückt
[62]  Else 
[63]    fFile = Open Dialog.Path For Input 
[64]    If Lof(fFile) = 0 Then 
[65]       Message.Info("Die Text-Datei ist leer!")
[66]       fFile.Close
[67]       Return False
[68]    Endif ' Lof(fFile) = 0?
[69]  Endif ' Dialog.OpenFile(False) = True
[70]     
[71]  sCurrentFilePath = Dialog.Path ' Der Variablen 'sCurrentFilePath' wird der DialogPfad zugewiesen
[72]  
[73]   If Not MS.Matrix.Exist(Dialog.Path) Then ' Gibt es diese Datei nicht in der Matrix ...
[74]      If MS.Matrix.Count = MS.iLastNumber Then ' und sind schon 5 Elemente im Array Matrix, 
[75]      MS.Matrix.Remove(0) ' dann das 1. Element im Array Matrix löschen   
[76]         MS.ShortMatrix.Remove(0) ' sowie das 1. Element im Array ShortMatrix löschen.
[77]      Endif ' MS.Matrix.Count = MS.iLastNumber?
[78]      MS.Matrix.Add(Dialog.Path) ' Datei-Pfad wird am Ende vom Array 'Matrix' eingefügt
[79]      MS.ShortMatrix.Add(File.Name(Dialog.Path)) ' Datei-Name wird am Ende von 'ShortMatrix' eingefügt
[80]      UpdateMenu() ' Die Menüliste wird erneuert
[81]   Endif ' Matrix.Exist?
[82]   Wait
[83]   Reset()
[84]   mnu1ConvertTable.Enabled = True
[85]   Return True
[86] 
[87] End ' OpenTable()
[88] 
[89] ...
[90] 
[91] Public Sub Form_Close()  
[92]   MS.SetLastListToSettings()
[93]   Try fFile.Close
[94] End ' Form_Close

Ergänzende Kommentare:

  • In den Zeilen 15 bis 17 wird ein Settings-Objekt instanziiert, mit dessen Methoden die in der Konfigurationsdatei lastfiles.conf unter dem Slot LastFiles gespeicherten Schlüssel-Wert-Paare (Key-Value-Pairs) ausgelesen werden und als Elemente (Tabellendatei-Pfad) im Array Matrix gespeichert werden. Im Array ShortMatrix werden nur die korrespondierenden Dateinamen gespeichert. Anschließend wird aus dem Inhalt des Arrays ShortMatrix die Menüliste für das Menü mnu1LastFiles generiert. Ist diese Liste leer, dann ist das Menü mnu1LastFiles nicht sichtbar.
  • In der Prozedur mnuLast_Click in den Zeilen 39 bis 50 wird das Last-Objekt eingesetzt, um über dessen Eigenschaft Last.Text zu ermitteln, welches Menü in der Menüliste des dynamischen Menüs mnu1LastFiles angeklickt worden ist. Wichtig ist hier die Bestimmung der Position im Array 'ShortMatrix' an der Dateiname steht, der ja als Beschriftung der einzelnen Menüs in der Menüliste dient und in der Eigenschaft Last.Text zur Verfügung steht. Mit dem Wert des Indexes wird der Datei-Pfad aus dem Array Matrix ausgelesen, der zu dem angezeigten Dateinamen gehört und zum aktuellen Dateipfad erklärt. Dann wird die entsprechende Datei geöffnet, ihr Inhalt ausgelesen und in der oberen TextArea angezeigt.
  • Die Funktion OpenTable() in den Zeilen 54 bis 87 ist bereits hinreichend kommentiert. Im Dateiauswahl-Dialog werden durch die Filtereinstellung nur Textdateien angezeigt. Innerhalb der Funktion wird in der Zeile 80 die Prozedur UpDateMenu() aufgerufen, die dafür sorgt, das die Menüliste des dynamischen Menüs erneuert wird.
  • Wenn das Programm beendet wird, dann wird die Liste der zuletzt geöffneten Tabellendateien – gespeichert im Array Matrix – in der Konfigurationsdatei lastfiles.conf unter dem Slot LastFiles gespeichert (Zeile 92). Somit steht die Liste beim nächsten Programmstart zur Verfügung. Bitte beachten Sie: Wenn von den maximal 5 Tabellendateien, die zuletzt geöffnet wurden, einige vor dem nächsten Programmstart gelöscht, verschoben oder umbenannt worden sind, dann sorgen die folgenden Zeilen aus dem Quelltext der Prozedur GetLastListFromSettings() für die korrekte Menüliste.

Ausschnitt aus dem Quelltext der Prozedur GetLastListFromSettings():

[1] While pSettings["FileList" & "/File" & Str(icount)] <> Null
[2]     If Exist(pSettings["FileList" & "/File" & Str(icount)]) Then ' Existiert diese Datei?
[3]        Matrix.Add(pSettings["FileList" & "/File" & Str(icount)]) ' Datei-Pfad in Matrix speichern
[4]      ' Datei-Name in ShortMatrix speichern
[5]        ShortMatrix.Add(File.Name(pSettings["FileList" & "/File" & Str(icount)])) 
[6]     Endif ' File.Exist?
[7]     Inc icount
[8]   Wend ' <> NULL

Das ist der Inhalt der Konfigurationsdatei lastfiles.conf zu einem bestimmten Zeitpunkt:

# Dateiliste 
[FileList] 
File0="/home/hans/k12.3.4_tab.txt" 
File1="/home/hans/k22.3.2_tab.txt" 
File2="/home/hans/k3.7_tab.txt" 

13.3.2.5 Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k13/k13.3/k13.3.2/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools