Differenze tra le versioni di "Inglobare in un programma Gambas la finestra di un altro programma Gambas mediante le funzioni del API di X11"

Da Gambas-it.org - Wikipedia.
Riga 10: Riga 10:
 
  '''Public''' Sub Form_Open()
 
  '''Public''' Sub Form_Open()
 
    
 
    
   <FONT Color=#B22222>Me.Border = False</font>
+
  With Me
 +
    .W = 100
 +
    .H = 100
 +
   <FONT Color=#B22222>Me.Border = <B>False</b></font>
 +
    .Background = Color.Yellow
 +
  End With
 
    
 
    
 
   Print Me.Id
 
   Print Me.Id
Riga 17: Riga 22:
  
  
Il codice del programma Gambas che deve inglobare nel proprio ''Form'' il ''Form'' del precedente programma Gambas, è invece questo:
+
Il codice del programma Gambas che deve inglobare nel proprio ''Form'' il ''Form'' del precedente programma Gambas, è invece questo (è necessario in questo esempio attivare il Componente ''gb.desktop'', per consentire a questo programma di individuare il numero identificativo della finestra del programma da inglobare):
 
  Library "libX11:6.3.0"
 
  Library "libX11:6.3.0"
 
   
 
   
Riga 36: Riga 41:
 
   
 
   
 
   Dim disp As Pointer
 
   Dim disp As Pointer
 +
  Dim id As Integer
 
   
 
   
 
  <FONT Color=gray>' ''Connessione al server X ed impostazione di default:''</font>
 
  <FONT Color=gray>' ''Connessione al server X ed impostazione di default:''</font>
  disp = XOpenDisplay(Null)
+
  disp = XOpenDisplay(Null)
 +
  If disp == 0 Then Error.Raise("Errore !")
 
   
 
   
 +
  id = Desktop.FindWindow("<FONT Color=gray>''nome_della_finestra_da_inglobare''</font>", Null, Null)[0]
 +
 
 
  <FONT Color=gray>' ''Ingloba nel Form principale del programma Gambas la finestra dell'altro programma Gambas identificata dal suo Id :''</font>
 
  <FONT Color=gray>' ''Ingloba nel Form principale del programma Gambas la finestra dell'altro programma Gambas identificata dal suo Id :''</font>
  <FONT Color=#B22222>XReparentWindow</font>(disp, <FONT Color=gray>''numero_Id_Form_da_inglobare''</font>, Me.Id, 10, 10)
+
  <FONT Color=#B22222>XReparentWindow</font>(disp, <FONT Color=gray>''numero_Id_Form_da_inglobare''</font>, Me.Id, 10, 10)
 
   
 
   
 
  <FONT Color=gray>' ''Chiude la libreria:''</font>
 
  <FONT Color=gray>' ''Chiude la libreria:''</font>
  XCloseDisplay(disp)
+
  XCloseDisplay(disp)
 
   
 
   
 
  '''End'''
 
  '''End'''
 
  
  

Versione delle 12:48, 22 nov 2020

Per inglobare la finestra di un programma Gambas all'interno della finestra principale di un altro programma Gambas, si può utilizzare la funzione XReparentWindow() della libreria dinamica condivisa: "libX11.so.6.3.0".

Va precisto che il Form, che si intende inglobare, non deve possedere bordi.
Pertanto la Proprietà .Border del Form, che deve essere inglobato, va posta a False.

Tale funzione esterna richiede, fra l'altro, la specificazione del numero identificativo della finestra (il predetto "Form") del programma da inglobare.


Mostriamo un esempio essenziale, nel quale il codice del programma Gambas, di cui si vuole far inglobare il Form nel Form di un altro programma Gambas, è il seguente:

Public Sub Form_Open()
 
 With Me
   .W = 100
   .H = 100
 Me.Border = False
   .Background = Color.Yellow
 End With
 
 Print Me.Id
  
End


Il codice del programma Gambas che deve inglobare nel proprio Form il Form del precedente programma Gambas, è invece questo (è necessario in questo esempio attivare il Componente gb.desktop, per consentire a questo programma di individuare il numero identificativo della finestra del programma da inglobare):

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 String) As Pointer

' int XReparentWindow(Display *display, Window w, Window parent, int x, int y)
' Removes a window from its current position in the hierarchy, and inserts it as the child of the specified parent.
Private Extern XReparentWindow(display As Pointer, w As Long, parent As Long, x As Integer, y As Integer) As Integer

' int XCloseDisplay(Display *display)
' Closes the connection to the X server for the display specified in the Display structure and destroys all windows.
Private Extern XCloseDisplay(display As Pointer) As Integer


Public Sub Button1_Click()

 Dim disp As Pointer
 Dim id As Integer

' Connessione al server X ed impostazione di default:
 disp = XOpenDisplay(Null)
 If disp == 0 Then Error.Raise("Errore !")

 id = Desktop.FindWindow("nome_della_finestra_da_inglobare", Null, Null)[0]
 
' Ingloba nel Form principale del programma Gambas la finestra dell'altro programma Gambas identificata dal suo Id :
 XReparentWindow(disp, numero_Id_Form_da_inglobare, Me.Id, 10, 10)

' Chiude la libreria:
 XCloseDisplay(disp)

End


Riferimenti