User Tools

Site Tools


k15:k15.6:start

15.6 Class Desktop (gb.qt4)

The class Desktop (gb.qt4) has only a few properties as well as a method and a constant. You can use them to get information about the screen and desktop.

This class must always be viewed in conjunction with the Desktop class of the Desktop component and the Screens and Screen classes.

15.6.1 Properties

All properties and their description can be found in the following table:

PropertyTypeDescription
Height IntegerSpecifies the height of the usable desktop on a monitor. The usable desktop rectangle is the screen area minus all stationary desktop panels. Equivalent to Screens[0]. AvailableHeight
WidthIntegerSpecifies the width of the usable desktop on a monitor. The usable desktop rectangle is the screen area minus all stationary desktop panels. Equivalent to Screens[0]. AvailableWidth
ResolutionIntegerSpecifies the resolution of the screen in DPI (Dots Per Inch).
ScaleIntegerReturns half the height of the default desktop font in pixels.
HasSystemTrayBooleanReturns True if the desktop has a task bar.

Table 15.6.1.1: Overview of desktop class properties (gb. qt4)

Following the suggestion in the Gambas documentation, you can use the following procedure to read the properties of the desktop and display them in a MessageBox:

Public Sub btnGetDesktopInformation_Click()
 Dim sMessage, sLabel As String
 
  sMessage = "<hr><b>Desktop-Eigenschaften</b><hr>"
  sMessage &= "Nutzbare Desktop-Höhe = " & Desktop.Height & " Pixel"
  sMessage &= "<br>Nutzbare Desktop-Breite = " & Desktop.Width & " Pixel"  
  sMessage &= "<br>Desktop-Top = " & Desktop.Y
  sMessage &= "<br>Desktop-Left = " & Desktop.X & "<hr>"  
  sMessage &= "Zeichensatz = " & Desktop.Charset  
 
  sLabel = IIf(Desktop.HasSystemTray = False, " Nein", " Ja.")
  sMessage &= "<br>SystemTray = " & sLabel ' Desktop.HasSystemTray
 
  sMessage &= "<br>Skalierungsfaktor = " & Desktop.Scale
  sMessage &= "<br>Auflösung = " & Desktop.Resolution & " DPI <hr>"
  Message.Info(sMessage)
 
End ' btnGetDesktopInformation_Click()

B1

Figure 15.6.1.1: Display Properties Desktop

15.6.2 Constant Desktop Charset

The constant Desktop.Charset specifies the character set used by the graphical user interface to display text. The QT and GTK+ components use the UTF-8 character set. You must be careful, because the underlying operating system could use a different font!

15.6.3 Desktop method ScreenShot (screenshot)

The specified method not only returns a screen copy of the complete desktop as an object of type Picture, but also allows you to copy a selected part of it as an option:

Static Function Screenshot ([ X As Integer, Y As Integer, Width As Integer, Height As Integer ]) As Picture

This procedure returns a screen copy that is immediately displayed in a PictureBox and then saves the current screen dump in a specific directory as png-graphic with highest quality (→ 100).

[1] Public Sub btnGetScreenShot_Click()
[2]   FMain.Hide
[3]     Wait 0.1 ' In der Praxis bis auf 3 Sekunden erhöhen!
[4]     PictureBox1.Picture = Desktop.Screenshot()
[5]     PictureBox1.Picture.Save(User.Home &/ "current_screenshot.png", 100)
[6]   FMain.Show
[7]   
[8] ' Alternative ohne direkte Anzeige - Option Speichern-Dialog
[9] ' FMain.Hide
[10] ' Wait 0.05
[11] ' Desktop.Screenshot().Save(User.Home &/ "current_screenshot.png", 100)
[12] ' FMain.Show
[13]   
[14] End ' btnGetScreenShot_Click()

With an additional Save dialog you can save several screen copies comfortably.

If you do not use the display, you will be able to save the screen copy immediately in the specified image path and in the required quality using the save procedure Desktop. screenshot. save (Path, Quality).

B2

Figure 15.6.3.1: Desktop Project: Display Screen Copy (Xubuntu in a VM)

15.6.4 Extensions

You can also determine the names of the virtual desktops if you have wmctrl installed on your system. With the order:

hans@linux:~$ wmctrl -d

you get the following output with the option -d, where the current desktop is marked with an asterisk and the name of the desktop is at the end of the line:

0  - DG: 1680x1050  VP: N/A  WA: 0,24 1680x1002  WEB 
1  - DG: 1680x1050  VP: N/A  WA: 0,24 1680x1002  EXPLORER 
2  * DG: 1680x1050  VP: 0,0  WA: 0,24 1680x1002  GAMBAS 
3  - DG: 1680x1050  VP: N/A  WA: 0,24 1680x1002  TERMINAL

For a Gambas procedure that does the same thing, use the Shell or Exec instruction (→ chapter 21.3.1 Use Quick-Syntax) and some strings and arrays to determine and display the desktop identifiers from the returned string stored in the variable sList:

Public Sub btnGetDesktopName_Click()
  Dim sElement, sListe, sMessage As String
  Dim aMatrix, aZeile As New String[]
 
  Shell "wmctrl -d" To sListe
 
  If sListe Then aMatrix = Split(sListe, "\n")
  sMessage = "<hr><b>Desktop-Bezeichner</b><hr>"
 
  For Each sElement In aMatrix
      If sElement Then 
         aZeile = Split(sElement, " ")
         sMessage &= "<br>" & aZeile[aZeile.Count - 1]
      Endif
  Next ' sElement
 
  Message.Info(sMessage)
 
End ' btnGetDesktopName_Click()

B3

Figure 15.6.4.1: Display of desktop names (identifiers)

Download

15.6 Klasse Desktop (gb.qt4)

Die Klasse Desktop (gb.qt4) besitzt nur wenige Eigenschaften sowie eine Methode und eine Konstante. Diese können Sie nutzen, um Informationen zum Bildschirm und zum Desktop zu ermitteln.

Diese Klasse ist immer im Zusammenhang mit der Klasse Desktop der Komponente Desktop sowie den Klassen Screens und Screen zu betrachten.

15.6.1 Eigenschaften

Alle Eigenschaften sowie deren Beschreibung finden Sie in der folgenden Tabelle:

EigenschaftTypeBeschreibung
Height IntegerGibt die Höhe des nutzbaren Desktop auf einem Monitor an. Das nutzbare Desktop-Rechteck ist die Bildschirmfläche vermindert um alle stationären Desktop-Panels. Äquvalent zu Screens[0].AvailableHeight
WidthIntegerGibt die Breite des nutzbaren Desktop auf einem Monitor an. Das nutzbare Desktop-Rechteck ist die Bildschirmfläche vermindert um alle stationären Desktop-Panels. Äquvalent zu Screens[0].AvailableWidth
ResolutionIntegerGibt die Auflösung des Bildschirms in DPI (Dots Per Inch) an.
ScaleIntegerGibt die halbe Höhe des Standard-Desktop-Fonts in Pixeln zurück.
HasSystemTrayBooleanGibt True zurück, wenn der Desktop eine TaskLeiste hat.

Tabelle 15.6.1.1: Übersicht zu den Eigenschaften der Klasse Desktop (gb.qt4)

Dem Vorschlag in der Gambas-Dokumentation folgend können Sie mit der folgenden Prozedur die Eigenschaften des Desktops auslesen und in einer MessageBox komfortabel anzeigen lassen:

Public Sub btnGetDesktopInformation_Click()
 Dim sMessage, sLabel As String
 
  sMessage = "<hr><b>Desktop-Eigenschaften</b><hr>"
  sMessage &= "Nutzbare Desktop-Höhe = " & Desktop.Height & " Pixel"
  sMessage &= "<br>Nutzbare Desktop-Breite = " & Desktop.Width & " Pixel"  
  sMessage &= "<br>Desktop-Top = " & Desktop.Y
  sMessage &= "<br>Desktop-Left = " & Desktop.X & "<hr>"  
  sMessage &= "Zeichensatz = " & Desktop.Charset  
 
  sLabel = IIf(Desktop.HasSystemTray = False, " Nein", " Ja.")
  sMessage &= "<br>SystemTray = " & sLabel ' Desktop.HasSystemTray
 
  sMessage &= "<br>Skalierungsfaktor = " & Desktop.Scale
  sMessage &= "<br>Auflösung = " & Desktop.Resolution & " DPI <hr>"
  Message.Info(sMessage)
 
End ' btnGetDesktopInformation_Click()

B1

Abbildung 15.6.1.1: Anzeige Eigenschaften Desktop

15.6.2 Konstante Desktop.Charset

Die Konstante Desktop.Charset gibt den Zeichensatz an, der von der grafischen Oberfläche zum Anzeigen von Text verwendet wird. Die QT- und GTK+-Komponenten verwenden den UTF-8-Zeichensatz. Sie müssen vorsichtig sein, weil das zugrunde liegende Betriebssystem einen anderen Zeichensatz verwenden könnte!

15.6.3 Methode Desktop.ScreenShot (Bildschirm-Kopie)

Die angegebene Methode gibt nicht nur eine Bildschirm-Kopie des vollständigen Desktop als Objekt vom Typ Picture zurück, sondern ermöglicht als Option auch die Kopie eines ausgewählten Teiles davon:

Static Function Screenshot ([ X As Integer, Y As Integer, Width As Integer, Height As Integer ]) As Picture

Diese Prozedur gibt eine Bildschirm-Kopie zurück, die sofort in einer PictureBox angezeigt wird und dann in einem bestimmten Verzeichnis die aktuelle Bildschirmkopie als png-Grafik mit höchster Qualität (→ 100) abspeichert.

[1] Public Sub btnGetScreenShot_Click()
[2]   FMain.Hide
[3]     Wait 0.1 ' In der Praxis bis auf 3 Sekunden erhöhen!
[4]     PictureBox1.Picture = Desktop.Screenshot()
[5]     PictureBox1.Picture.Save(User.Home &/ "current_screenshot.png", 100)
[6]   FMain.Show
[7]   
[8] ' Alternative ohne direkte Anzeige - Option Speichern-Dialog
[9] ' FMain.Hide
[10] ' Wait 0.05
[11] ' Desktop.Screenshot().Save(User.Home &/ "current_screenshot.png", 100)
[12] ' FMain.Show
[13]   
[14] End ' btnGetScreenShot_Click()

Mit einem noch hinzuzufügenden Speichern-Dialog können Sie mehrere Bildschirm-Kopien komfortabel abspeichern.

Wenn Sie auf die Anzeige verzichten, dann gelingt es über die Speichern-Prozedur Desktop.Screenshot.Save(Path, Quality) die Bildschirm-Kopie sofort im angegebenen Bild-Pfad und in der geforderten Qualität zu speichern.

B2

Abbildung 15.6.3.1: Desktop-Projekt: Anzeige Bildschirm-Kopie (Xubuntu in einer VM)

15.6.4 Erweiterungen

Sie können auch die Namen der virtuellen Desktops ermitteln, wenn Sie das Programm wmctrl auf Ihrem System installiert haben. Mit dem Befehl:

hans@linux:~$ wmctrl -d

erhalten Sie mit der Option -d folgende Ausgabe, bei der der aktuelle Desktop mit einem Stern gekennzeichnet ist und am Zeilenende der Name der Desktop steht:

0  - DG: 1680x1050  VP: N/A  WA: 0,24 1680x1002  WEB 
1  - DG: 1680x1050  VP: N/A  WA: 0,24 1680x1002  EXPLORER 
2  * DG: 1680x1050  VP: 0,0  WA: 0,24 1680x1002  GAMBAS 
3  - DG: 1680x1050  VP: N/A  WA: 0,24 1680x1002  TERMINAL

Für eine Gambas-Prozedur – die das Gleiche leistet – setzen Sie vorteilhaft die Instruktion Shell oder Exec (→ Kapitel 21.3.1 Einsatz Quick-Syntax) sowie einige Zeichenketten und Arrays ein, um aus der zurückgelieferten Zeichenkette – gespeichert in der Variablen sListe – die Desktop-Bezeichner zu ermitteln und anzuzeigen:

Public Sub btnGetDesktopName_Click()
  Dim sElement, sListe, sMessage As String
  Dim aMatrix, aZeile As New String[]
 
  Shell "wmctrl -d" To sListe
 
  If sListe Then aMatrix = Split(sListe, "\n")
  sMessage = "<hr><b>Desktop-Bezeichner</b><hr>"
 
  For Each sElement In aMatrix
      If sElement Then 
         aZeile = Split(sElement, " ")
         sMessage &= "<br>" & aZeile[aZeile.Count - 1]
      Endif
  Next ' sElement
 
  Message.Info(sMessage)
 
End ' btnGetDesktopName_Click()

B3

Abbildung 15.6.4.1: Anzeige der Desktop-Namen (Bezeichner)

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.
k15/k15.6/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools