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

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(11 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
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''".
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 condivisa: "''libX11.so.6.4.0'' ".


Va precisto che il ''Form'', che si intende inglobare, <SPAN Style="text-decoration:underline">non deve possedere bordi</span>.
Va precisato che il ''Form'', che si intende inglobare, <U>non deve possedere bordi</u>.
<BR>Pertanto la Proprietà ''.Border'' del ''Form'', che deve essere inglobato, va posta a ''False''.
<BR>Pertanto alla Proprietà ".Border" del ''Form'', che deve essere inglobato, va assegnato il valore booleano ''False''.


Tale funzione esterna richiede, fra l'altro, la specificazione del numero identificativo della finestra (il predetto "Form") del programma da inglobare.
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'' <SPAN Style="text-decoration:underline">nel</span> ''Form'' di un <SPAN Style="text-decoration:underline">altro</span> programma Gambas, è il seguente:
Mostriamo un esempio essenziale, nel quale si hanno due programmi Gambas in ambiente grafico.
  '''Public''' Sub Form_Open()
<BR>La finestra (ossia il ''Form'') di un programma Gambas sarà inglobata nella finestra (ossia nel "Form") dell'altro programma Gambas. <SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 
Di seguito il codice del programma Gambas, di cui si vuole far inglobare il ''Form'' <SPAN Style="text-decoration:underline">nel</span> ''Form'' dell'<SPAN Style="text-decoration:underline">altro</span> programma Gambas:
  Public Sub Form_Open()
    
    
   <FONT Color=#B22222>Me.Border = False</font>
   With Me
    .W = 100
    .H = 100
    <FONT Color=#B22222>.Border = <B>False</b></font>
    .Background = Color.Yellow
  End With
    
    
   Print Me.Id
   Print Me.Id
    
    
  '''End'''
  End
 
Invece, ecco di seguito il codice del programma Gambas che nel proprio ''Form'' deve inglobare la finestra del precedente programma Gambas (è 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.4.0"
Il codice del programma Gambas che deve inglobare nel proprio ''Form'' il ''Form'' del precedente programma Gambas, è invece questo:
  Library "libX11:6.3.0"
   
   
  <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_name As String) As Pointer
  Private Extern XOpenDisplay(display_name As Pointer) As Pointer
   
   
  <FONT Color=gray>' ''int XReparentWindow(Display *display, Window w, Window parent, int x, int y)
  <FONT Color=gray>' ''int XReparentWindow(Display *display, Window w, Window parent, int x, int y)
Riga 33: Riga 39:
   
   
   
   
  '''Public''' Sub Button1_Click()
  Public Sub Button1_Click()
   
   
   Dim disp As Pointer
   Dim disp As Pointer
  Dim <FONT Color=#B22222>id</font> 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(0)
  If disp == 0 Then Error.Raise("Errore !")
   
   
  <FONT Color=gray>' ''Ingloba nel Form principale del programma Gambas la finestra dell'altro programma Gambas identificata dal suo Id :''</font>
<FONT Color=gray>' ''Individua il numero identificativo del nome della finestra del programma Gambas da inglobare:''</font>
  <FONT Color=#B22222>XReparentWindow</font>(disp, <FONT Color=gray>''numero_Id_Form_da_inglobare''</font>, Me.Id, 10, 10)
  <FONT Color=#B22222>id</font> = 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 individuata dal suo numero identificativo:''</font>
  <FONT Color=#B22222>XReparentWindow</font>(disp, <FONT Color=#B22222>id</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
 
 


=Note=
[1] Vedere anche questa pagina: [[Inglobare un Form o una finestra in un altro suo Form o finestra del medesimo programma]]





Versione attuale delle 16:19, 22 set 2025

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 condivisa: "libX11.so.6.4.0 ".

Va precisato che il Form, che si intende inglobare, non deve possedere bordi.
Pertanto alla Proprietà ".Border" del Form, che deve essere inglobato, va assegnato il valore booleano 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 si hanno due programmi Gambas in ambiente grafico.
La finestra (ossia il Form) di un programma Gambas sarà inglobata nella finestra (ossia nel "Form") dell'altro programma Gambas. [nota 1]

Di seguito il codice del programma Gambas, di cui si vuole far inglobare il Form nel Form dell'altro programma Gambas:

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

Invece, ecco di seguito il codice del programma Gambas che nel proprio Form deve inglobare la finestra del precedente programma Gambas (è 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.4.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 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(0)
 If disp == 0 Then Error.Raise("Errore !")

' Individua il numero identificativo del nome della finestra del programma Gambas da inglobare:
 id = Desktop.FindWindow("nome_della_finestra_da_inglobare", Null, Null)[0]
 
' Ingloba nel Form principale del programma Gambas la finestra dell'altro programma Gambas individuata dal suo numero identificativo:
 XReparentWindow(disp, id, Me.Id, 10, 10)

' Chiude la libreria:
 XCloseDisplay(disp)

End


Note

[1] Vedere anche questa pagina: Inglobare un Form o una finestra in un altro suo Form o finestra del medesimo programma


Riferimenti