Differenze tra le versioni di "Ottenere informazioni sugli schermi disponibili mediante le funzioni del API di X11"

Da Gambas-it.org - Wikipedia.
Riga 9: Riga 9:
 
  <FONT color=gray>' ''Display *XOpenDisplay(char *display_name)''
 
  <FONT color=gray>' ''Display *XOpenDisplay(char *display_name)''
 
  ' ''Opens a connection to the X server that controls a display.''</font>
 
  ' ''Opens a connection to the X server that controls a display.''</font>
  Private Extern XOpenDisplay(display As Pointer) As Pointer
+
  Private Extern XOpenDisplay(display_name As Pointer) As Pointer
 
   
 
   
 
  <FONT color=gray>' ''int XDefaultScreen (Display *display)''
 
  <FONT color=gray>' ''int XDefaultScreen (Display *display)''
Riga 66: Riga 66:
 
    
 
    
 
  <FONT color=gray>' ''Connessione al Server X e sua impostazione predefinita:''</font>
 
  <FONT color=gray>' ''Connessione al Server X e sua impostazione predefinita:''</font>
    disp = XOpenDisplay(0)
+
  disp = XOpenDisplay(0)
    If disp = 0 Then Error.Raise("Impossibile connettersi al Server X !")
+
  If disp == 0 Then Error.Raise("Impossibile connettersi al Server X !")
 
   
 
   
    screen = XDefaultScreen(disp)
+
  screen = XDefaultScreen(disp)
 
   
 
   
    depth = XDefaultDepth(disp, screen)
+
  depth = XDefaultDepth(disp, screen)
    If depth = 1 Then
+
  If depth = 1 Then
      Print "E' evidente che hai uno schermo preistorico !"
+
    Print "E' evidente che hai uno schermo preistorico !"
    Else
+
  Else
      Print "Stai utilizzando uno schermo a colori con profondità: "; depth
+
    Print "Stai utilizzando uno schermo a colori con profondità: "; depth
    Endif
+
  Endif
 
        
 
        
    connection = XConnectionNumber(disp)
+
  connection = XConnectionNumber(disp)
    Print "Il numero di connessione è "; connection
+
  Print "Il numero di connessione è "; connection
 
      
 
      
 
  <FONT color=gray>' ''Mostra le informazioni relative allo schermo:''</font>
 
  <FONT color=gray>' ''Mostra le informazioni relative allo schermo:''</font>
    Print "Lo schermo è: "; String@(XDisplayName(disp))
+
  Print "Lo schermo è: "; String@(XDisplayName(disp))
 
      
 
      
    Print "La larghezza dello schermo è: "; XDisplayWidth(disp, screen)
+
  Print "La larghezza dello schermo è: "; XDisplayWidth(disp, screen)
    Print "L'altezza dello schermo è: "; XDisplayHeight(disp, screen)   
+
  Print "L'altezza dello schermo è: "; XDisplayHeight(disp, screen)   
    Print "La larghezza dello schermo è di "; XDisplayWidthMM(disp, screen); " millimetri"
+
  Print "La larghezza dello schermo è di "; XDisplayWidthMM(disp, screen); " millimetri"
   
+
 
    Print "Valore dei pixel neri dello schermo: "; XBlackPixel(disp, screen)
+
  Print "Valore dei pixel neri dello schermo: "; XBlackPixel(disp, screen)
    i = XWhitePixel(disp, screen)
+
  i = XWhitePixel(disp, screen)
    Print "Valore dei pixel bianchi dello schermo: "; i; " ("; Hex(i); ")"
+
  Print "Valore dei pixel bianchi dello schermo: "; i; " ("; Hex(i); ")"
 
      
 
      
 
      
 
      
    lista = Alloc(SizeOf(gb.Integer))
+
  lista = Alloc(SizeOf(gb.Integer), 1)
    lista_prof = XListDepths(disp, screen, lista)
+
  lista_prof = XListDepths(disp, screen, lista)
    Print "Numero di valori disponibili della profondità dello schermo: "; Int@(lista)
+
  Print "Numero di valori disponibili della profondità dello schermo: "; Int@(lista)
 
  <FONT color=gray>' ''Dereferenziamo la variabile di tipo "puntatore":''</font>
 
  <FONT color=gray>' ''Dereferenziamo la variabile di tipo "puntatore":''</font>
    For i = 0 To (Int@(lista) - 1) * 4 Step 4
+
  For i = 0 To (Int@(lista) - 1) * 4 Step 4
      Print "Valore profondità disponibile: "; Byte@(lista_prof + i)
+
    Print "Valore profondità disponibile: "; Byte@(lista_prof + i)
    Next
+
  Next
       
+
     
    Print "Schermi disponibili = "; XScreenCount(disp)
+
  Print "Schermi disponibili = "; XScreenCount(disp)
   
+
 
+
  <FONT color=gray>' ''Chiude la libreria e libera la memoria allocata:''</font>
  <FONT color=gray>' ''Chiude la libreria:''</font>
+
  XCloseDisplay(disp)
    XCloseDisplay(disp)
+
  Free(lista)
       
 
<FONT color=gray>' ''Libera la memoria allocata:''</font>
 
    Free(lista)
 
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 11:39, 15 dic 2021

La libreria Xlib dello X Window System Standard, versione 11, consente - fra l'altro - anche di ottenere alcune informazioni in ordine agli schermi disponibili.

Si richiamerà l'attuale libreria condivisa di X11: "libX11.so.6.3.0".


Mostriamo di seguito un breve codice esemplificativo:

Library "libX11:6.3.0"

' Display *XOpenDisplay(char *display_name)
' Opens a connection to the X server that controls a display.
Private Extern XOpenDisplay(display_name As Pointer) As Pointer

' int XDefaultScreen (Display *display)
' Returns the default screen number referenced by the XOpenDisplay function.
Private Extern XDefaultScreen(display As Pointer) As Integer

' int XDefaultDepth (Display *display, int screen_number)
' Returns the depth (number of planes) of the default root window for the specified screen.
Private Extern XDefaultDepth(display As Pointer, screen_number As Integer) As Integer

' int XConnectionNumber(Display *display)
' Returns a connection number for the specified display.
Private Extern XConnectionNumber(display As Pointer) As Integer

' char *XDisplayName(char *string)
' Returns the name of the display that XOpenDisplay would attempt to use.
Private Extern XDisplayName(disp_string As Pointer) As Pointer

' int XDisplayWidth (Display *display, int screen_number)
' Returns the width of the screen in pixels.
Private Extern XDisplayWidth(display As Pointer, screen_number As Integer) As Integer

' int XDisplayHeight(Display *display, int screen_number)
' Returns an integer that describes the height of the screen in pixels.
Private Extern XDisplayHeight(display As Pointer, screen_number As Integer) As Integer

' int XDisplayWidthMM (Display *display, int screen_number)
' Returns the width of the specified screen in millimeters.
Private Extern XDisplayWidthMM(display As Pointer, screen_number As Integer) As Integer

' unsigned long XBlackPixel (Display *display, int screen_number)
' Returns the black pixel value for the specified screen.
Private Extern XBlackPixel(display As Pointer, screen_number As Integer) As Long

' unsigned long XWhitePixel (Display *display, int screen_number)
' Returns the white pixel value for the specified screen.
Private Extern XWhitePixel(display As Pointer, screen_number As Integer) As Long

' int *XListDepths(Display *display, int screen_number, int count_return)
' Returns the array of depths that are available on the specified screen.
Private Extern XListDepths(display As Pointer, screen_number As Integer, count_return As Pointer) As Pointer

' int XScreenCount(Display *display)
' Returns the number of available screens.
Private Extern XScreenCount(display As Pointer) As Integer

' XCloseDisplay (Display *display)
' Closes a display or disconnect from the X server.
Private Extern XCloseDisplay(display As Pointer)


Public Sub Main()

 Dim disp, lista, lista_prof As Pointer
 Dim depth, screen, connection, i As Integer
  
' Connessione al Server X e sua impostazione predefinita:
 disp = XOpenDisplay(0)
 If disp == 0 Then Error.Raise("Impossibile connettersi al Server X !")

 screen = XDefaultScreen(disp)

 depth = XDefaultDepth(disp, screen)
 If depth = 1 Then
   Print "E' evidente che hai uno schermo preistorico !"
 Else
   Print "Stai utilizzando uno schermo a colori con profondità: "; depth
 Endif
     
 connection = XConnectionNumber(disp)
 Print "Il numero di connessione è "; connection
   
' Mostra le informazioni relative allo schermo:
 Print "Lo schermo è: "; String@(XDisplayName(disp))
   
 Print "La larghezza dello schermo è: "; XDisplayWidth(disp, screen)
 Print "L'altezza dello schermo è: "; XDisplayHeight(disp, screen)  
 Print "La larghezza dello schermo è di "; XDisplayWidthMM(disp, screen); " millimetri"
  
 Print "Valore dei pixel neri dello schermo: "; XBlackPixel(disp, screen)
 i = XWhitePixel(disp, screen)
 Print "Valore dei pixel bianchi dello schermo: "; i; " ("; Hex(i); ")"
   
   
 lista = Alloc(SizeOf(gb.Integer), 1)
 lista_prof = XListDepths(disp, screen, lista)
 Print "Numero di valori disponibili della profondità dello schermo: "; Int@(lista)
' Dereferenziamo la variabile di tipo "puntatore":
 For i = 0 To (Int@(lista) - 1) * 4 Step 4
   Print "Valore profondità disponibile: "; Byte@(lista_prof + i)
 Next
      
 Print "Schermi disponibili = "; XScreenCount(disp)
 
' Chiude la libreria e libera la memoria allocata:
 XCloseDisplay(disp)
 Free(lista)

End