Benutzer-Werkzeuge

Webseiten-Werkzeuge


k13:k13.6:start

13.6 TrayIcon

Wenn Sie ein Gambas-Programm im Hintergrund laufen lassen wollen, dann bietet sich für den Zugriff auf das Programm über ein Icon in der System-Menüleiste die Komponente TrayIcon an. Das hat den Vorteil, dass Sie einerseits stets Zugriff auf die Programmoberfläche haben oder alternativ ausgewählte Teil-Programme in einem Kontext-Menü zur Komponente TrayIcon aufrufen können. Im vorgestellten Projekt wird ein Programm zur Langzeit-Temperaturmessung beschrieben, das die Temperatur über einen Sensor erfasst und den Temperaturwert über eine serielle Schnittstelle (V24 / RS232) einliest. Das Gambas-Programm speichert die Temperaturwerte zeitgesteuert in einer Datei, von der Sie hier nur einen kleinen Ausschnitt sehen:

MESS-PROTOKOLL 
DATUM:  23. August 2012 
--------------------------- 
>  09:47:56  |  T = 23 °C 
>  09:47:57  |  T = 23 °C 
>  09:47:58  |  T = 23 °C 
>  09:47:59  |  T = 23 °C 
>  09:48:00  |  T = 23 °C 
>  09:48:01  |  T = 24 °C 
>  09:48:02  |  T = 24 °C 

Interessant ist in diesem Zusammenhang nicht die Temperaturmessung – die im Kapitel 24.10.3 im Zusammenhang mit dem Einsatz der seriellen Schnittstelle genau beschrieben wird – sondern die Verwendung eines TrayIcon, um das Temperaturmessprogramm anzuzeigen oder zu verbergen oder ein Kontext-Menü anzuzeigen. Dieses Vorgehen hat sich beim Projekt zur Langzeit-Temperaturmessung als vorteilhaft erwiesen.

GUI

Abbildung 13.6.1: Programmoberfläche – Programm zur Langzeit-Temperaturmessung

Der Programmteil, der sich der Verwendung des TrayIcon widmet, wurde in einem Modul gespeichert. In diesem Modul werden

  • zuerst ein Menü deklariert,
  • dann diesem Menü drei Menüs als Untermenüs zugewiesen,
  • danach dem TrayIcon das Menü als Kontext-Menü zugewiesen und
  • abschließend die Aktionen beschrieben, die beim Aufruf der Menüs im Kontext-Menü ausgelöst werden sollen.

Der Quelltext zum Modul MTI (Modul TrayIcon) birgt keine Überraschungen:

[1] ' Gambas class file
[2] 
[3] Public MyTrayIcon As TrayIcon
[4] Public MyIconPicture As Picture = Picture["Symbols/exp.png"]
[5] 
[6] Public mnuMenu1 As Menu 
[7] Public mnuProgramHide As Menu 
[8] Public mnuViewData As Menu 
[9] Public mnuCloseExperiment As Menu 
[10] 
[11] Public Sub CreateMenuAndTrayIcon() 
[12] 
[13]   mnuMenu1 = New Menu(FMain, True) As "Menu" ' Das Menü wird im Hauptprogramm nicht angezeigt
[14]   mnuMenu1.Text = "Datei"
[15] 
[16]   mnuProgramHide = New Menu(mnuMenu1) As "M11ProgramHideShow" 
[17]   mnuProgramHide.Text = "Messprogramm verstecken" 
[18] 
[19]   mnuViewData = New Menu(mnuMenu1) As "M12ViewData" 
[20]   mnuViewData.Text = "Messdaten anzeigen" 
[21] 
[22]   mnuCloseExperiment = New Menu(mnuMenu1) As "M13CloseExperiment" 
[23]   mnuCloseExperiment.Text = "Experiment beenden" 
[24] 
[25]   MyTrayIcon = New TrayIcon As "MyTrayIcon"
[26]   yTrayIcon.Icon = MyIconPicture
[27]   yTrayIcon.Tooltip = "Langzeit-Experiment"
[28]   
[29]   Try TyTrayIcon.Show
[30]   If Error Then 
[31]      Message.Error("Das TrayIcon kann nicht angezeigt werden.\nNutzen Sie Ubuntu mit Unity!") 
[32]      Return 
[33]   Endif ' ERROR 
[34] 
[35] End ' CreateMenuAndTrayIcon() 
[36] 
[37] Public Sub MyTrayIcon_Menu() 
[38]   mnuMenu1.Popup() ' Der Komponente TrayIcon wird das Menü1 zugewiesen 
[39] End ' MyTrayIcon_Menu() 
[40] 
[41] Public Sub M11ProgramHideShow_Click() 
[42]   If mnuProgramHide.Text = "Messprogramm verstecken" Then 
[43]     FMain.Visible = False 
[44]     mnuProgramHide.Text = "Messprogramm anzeigen" ' Alternative Anzeige
[45]   Else 
[46]     FMain.Visible = True 
[47]     mnuProgramHide.Text = "Messprogramm verstecken" 
[48]   Endif ' mnuProgramHide.Text = "Messprogramm verstecken"? 
[49] End ' M11ProgramHide
[50] 
[51] Public Sub M12ViewData_Click() 
[52]   Message.Info("Messdaten werden in einem Diagramm angezeigt!") 
[53] End ' M12ViewData
[54] 
[55] Public Sub M13CloseExperiment_Click() 
[56]   If Message.Question("Soll das Experiment beendet werden?", "Ja", "Nein") = 1 Then 
[57]      FMain.Close 
[58]   Endif ' Experiment beenden? 
[59] End ' M13CloseExperiment
[60] 
[61] Public Sub **MyTrayIcon_MouseUp()** 
[62]   Message.Info("Hilfe zum Programm") 
[63] End ' MyTrayIcon_MouseUp() 

Das vollständige Projekt zur Langzeit-Temperaturmessung einschließlich des Programm-Quelltextes finden Sie im Projektarchiv rs232trayicon.tar.gz im Downloadbereich.

Hinweise:

In der System-Menüleiste finden Sie nach dem Programmstart das Icon Icon , das in der IDE von Gambas entworfen wurde.

Unter Ubuntu gibt es eine Fehlermeldung, wenn man nicht mit Unity als Standard-Oberfläche arbeitet:

Fehlermeldung

Abbildung 13.6.2: Fehlermeldung bei Ubuntu 12.04 LTS ohne Unity

Dieser o.a. Fehler wird abgefangen und ein Hinweis ausgegeben:

Hinweis

Abbildung 13.6.3: Programm-Hinweis

Mit einem Klick (LMT) auf das Icon können Sie eine Programmhilfe aufrufen. Diese Hilfe ist im vorliegenden Projekt nicht vollständig formuliert. Ein Klick mit der rechten Maustaste über dem TrayIcon öffnet ein Kontextmenü mit 3 Menüs für ausgewählte Programm-Aktionen:

Kontext-Menü

Abbildung 13.6.4: Inhalt Kontext-Menü zur Komponente TrayIcon

Die gespeicherten Messdaten werden in diesem Projekt nicht ausgewertet und angezeigt. Dafür wird nur ein Hinweis ausgegeben, der darauf verweist, das Sie das an dieser Stelle einfügen können.

Download

k13/k13.6/start.txt · Zuletzt geändert: 20.06.2016 (Externe Bearbeitung)

Seiten-Werkzeuge