tincho   23-09-2022, 20:24
#1
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.
Última modificación: 24-09-2022, 22:09 por tincho.

1 Saludo.
cogier   24-09-2022, 17:54
#2
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
tincho   24-09-2022, 21:35
#3
(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

1 Saludo.
Shell   26-09-2022, 14:29
#4
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.

[Imagen: 039Zy53.png]

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. Confused

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.