¿Como determinar si un programa usa GTK o QT? - tincho - 23-09-2022
Hola.
¿Alguien podria decir como saber en tiempo de ejecución que componente usa un programa?
Busco una forma similar a como se hace para saber si el tema de escritorio es dark o no.
Ej:
Código: If Application.DarkTheme Then
Print "Hi Anakin"
Else
Print "Hi Obi-Wan"
Endif
Nota: Existen algunas llamadas (no se si es el temino correcto) a OpenGL que no funcionan en GTK3 mientras que en QT5 si lo hacen. Entonces deseo eludir lo que no funciona cuando el programa corre.
Ademas de la solucion que propuso Charly, agrego dos maneras mas de abordar el tema que recibi por la lista internacional de gambas:
Código: If Component.IsLoaded("gb.gtk3") Then
Print "Benoit dice que el toolkit es:" & "gb.gtk3"
Endif
Print "Bruce dice que el toolkit es:" & Env["GB_GUI"]
Gracias.
RE: ¿Como determinar si un programa usa GTK o QT? - cogier - 24-09-2022
Espero que este código haga lo que quieres.
Código: ' Gambas class file
Public Sub Form_Open()
Dim GridView1 As GridView
Dim sData As New String[]
Dim MyComponent As Component
Dim sLib As String
Dim iCol, iRow As Integer
Dim sHeader As String[] = ["Component.Name", "Component.Version", "Component.Library"]
For Each MyComponent In Components
If MyComponent.Library = True Then sLib = "True" Else sLib = "False"
sData.Add(MyComponent.Name & "," & MyComponent.Version & "," & sLib)
Next
With Me
.Height = 400
.Width = 450
.Padding = 5
.Arrangement = Arrange.Vertical
.Center
End With
With GridView1 = New GridView(Me) As "Gridview1"
.Clear
.Rows.Count = sData.Count
.Columns.Count = 3
.Expand = True
.Header = Gridview.both
End With
For iCol = 0 To 2
Gridview1.Columns[iCol].Title = sHeader[iCol]
Next
For iRow = 0 To sData.Max
For iCol = 0 To 2
Gridview1[iRow, iCol].Text = Split(sData[iRow])[iCol]
Next
Next
GridView1.Columns.Width = -1
End
RE: ¿Como determinar si un programa usa GTK o QT? - tincho - 24-09-2022
(24-09-2022, 17:54)cogier escribió: Espero que este código haga lo que quieres.
Si, muy didactico, le agregue una funcion y un panel con un boton para mostrar que toolkit usa el programa.
Código: ' Gambas class file
Public Sub Form_Open()
Dim GridView1 As GridView
Dim sData As New String[]
Dim MyComponent As Component
Dim sLib As String
Dim iCol, iRow As Integer
Dim sHeader As String[] = ["Component.Name", "Component.Version", "Component.Library"]
Dim pnl As Panel
Dim btn As Button
For Each MyComponent In Components
If MyComponent.Library = True Then sLib = "True" Else sLib = "False"
sData.Add(MyComponent.Name & "," & MyComponent.Version & "," & sLib)
Next
With pnl = New Panel(Me) As "Panel1"
.h = 42
.w = 120
.Arrangement = Arrange.Horizontal
.Margin = True
End With
With btn = New Button(pnl) As "Button11"
.h = 42
.w = 60
If gtkToolkit() Then
.Text = "GTK"
Else
.Text = "QT"
Endif
End With
With Me
.Height = 400
.Width = 450
.Padding = 5
.Arrangement = Arrange.Vertical
.Center
End With
With GridView1 = New GridView(Me) As "Gridview1"
.Clear
.Rows.Count = sData.Count
.Columns.Count = 3
.Expand = True
.Header = Gridview.both
End With
For iCol = 0 To 2
Gridview1.Columns[iCol].Title = sHeader[iCol]
Next
For iRow = 0 To sData.Max
For iCol = 0 To 2
Gridview1[iRow, iCol].Text = Split(sData[iRow])[iCol]
Next
Next
GridView1.Columns.Width = -1
End
Public Function gtkToolkit() As Boolean
Dim MyComponent As Component
Dim bgtk As Boolean
For Each MyComponent In Components
If MyComponent.Name = "gb.gtk3" Then
bgtk = True
Break
Endif
Next
Return bgtk
End
RE: ¿Como determinar si un programa usa GTK o QT? - Shell - 26-09-2022
Buenas!.
Tengo un proyecto que está hecho para QT5. Los componentes que están en uso o cargados son: (por defecto).
gb.form
gb.gui.qt
gb.image
He seleccionado que el gui que se inicie con QT5 en cambio aparece gb.gui.qt (eso es raro) y también he seleccionado el componente qt5 manualmente
para ver la diferencia. La respuesta en la lista del GridView en la columna de Component.Library siempre es Falso.Que no son librerías.
Incluso he probado con el componente gb.cairo que dice que es una "librería gráfica", pero luego me dice el ejemplo que no es una librería.
Saludos
|