Shell 20-02-2021, 17:00
Buenas!.

Dependiendo si en el sistema tengo qt4 o qt5, Gambas puede avisarme al abrir un proyecto de que falta
el componente gb.qt4 o gb.qt4.ext. No existía en esa epoca, gb.gui.qt.
Esto suele ocurrirme más en una Linux Mint 20.x que e una Linux Mint 19.x.

Pero una vez cargas el proyecto seleccionas gb.gui.qt y grabas.Se soluciona con normalidad.

( Esto de abajo no sé si ya lo comenté una vez).

Recordando un proyecto que hice en su día sobre una calculadora para el display usaba la clase "lcdnumber"
que estaba incorporada en gb.qt4.ext. Hoy en día usamos para esto el control lcdlabel sin la necesidad de hacer uso de gb.qtx.ext.

Desde la versión 3.4 usamos lcdlabel. La historia es que al abrir el proyecto en una Linux Mint 20 con QT5 por defecto,
comienzan a salir mensajes de problemas con que no encuentra el fichero...x..el control antiguo. La clase.

[Imagen: YYf5bhO.png]

El efecto es que al no poder acceder al diseño de formulario, no puedes acceder al menú de propiedades, con lo que
no puedes desde este, cambiar el control a otro.

No tuve más remedio que desde una Linux Mint 19 cambiar el control del lcdnumber por lcdlabel.
La cosa es esta. Se trataba de un proyecto pequeño, si fuera grande y solo tienes una distro que usa QT5, deja por obsoleta la QT4, ¿ qué haces ?. Confused

Desde un editor externo, ¿ hubieras editado el código del formulario y el texto del fuente ?.

Por ejemplo. ¿ Se podía cambiar manualmente algo como esto ?. Esto es la parte del formulario que puede abrirse como un archivo de texto.
 
Cita: { LCDPantalla LCDNumber
    Move(18,66,147,42)
    Background = &H808080&
    Digits = 10
    SmallDecimalPoint = True
    Style = LCDNumber.Flat
    Border = Border.Raised
  }

Principalmente ya que lo que es la parte del programa solo aparecería LCDPantalla para hacer uso del control.

He cambiado el texto del formulario desde una Linux Mint 20 y ha solucionado el problema.
Solo era un control, ahora multiplicar eso por varios controles, creaciones de objetos. Vaya trabajito que debe ser. Confused

Saludos
AlfredoSC 20-02-2021, 03:34
Hola Amigos:

Cuando era estudiante, allá por 1978 mis padres me compraron la calculadora Texas Instruments SR-51-II, la cual aún conservo, aunque tuve que ponerle un paquete de baterías adaptado. Bueno, ante el encierro de la pandemia, y salir de la monotonía me propuse hacer el proyecto de esta calculadora en Gambas3. Confieso que al programar cada función del teclado reconozco que para la época, los circuitos integrados de este calculador, debieron ser bastante desarrollados para su época. Aquí pongo el código resultante (que aún está inconcluso, pero funcional en un 95% diría yo) y una imagen. El manual se puede descargar de la web, por si alguien gusta consultarlo y seguir con la programación para mejorarla. 
 
Código:
 
[code]' Gambas class file

Public cuenta As Integer            ' Lleva la cuenta de digitos tecleados
Public acum As Float              ' valor del display completo
Public xx As Float            ' calcular potencias y raices
Public yy As Float
Public mem As Float
Public mem1 As Float
Public mem2 As Float
Public mem3 As Float ' Memorias 1,2 y 3
Public tempo1 As Float
Public tempo2 As Float
Public tempo3 As Float
Public tempo4 As Float    ' Temporales para c\E1lculos
Public fmemw As Boolean
Public fmemr As Boolean
Public fmems As Boolean
Public fmemp As Boolean
Public fmeme As Boolean ' Funciones de memoria
Public deg As Boolean
Public rad As Boolean
Public grad As Boolean    ' flags indican funciones aplicadas
Public suma As Boolean
Public resta As Boolean
Public divide As Boolean
Public multiplica As Boolean
Public raiz As Boolean
Public potencia As Boolean
Public sto As Boolean
Public rcl As Boolean
Public sum As Boolean
Public rest As Boolean
Public prod As Boolean
Public divi As Boolean
Public exc As Boolean
Public punto As Boolean
Public segunda As Boolean
Public inv As Boolean
Public fixes As Boolean
Public porciento As Boolean
Public deltaporc As Boolean
Public dato As New Float[]
Public numdato As Integer
Public mean As Float
Public varianza As Float
Public sdev As Float
Public decifix As String

Public Sub cmdInvX_Click()

If segunda = False Then
    acum = Val(lblDisplay.Text)
    If acum = 0 Then
        lblDisplay.Text = "Error"
    Else
        lblDisplay.Text = 1 / acum
    Endif
    acum = 0

Endif

If segunda = True Then
    lblDisplay.Text = varianza
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdRaizCuad_Click()
Dim modulo As Float
Dim ii As Integer

If segunda = False Then
    acum = Val(lblDisplay.Text)
    If acum >= 0 Then
        lblDisplay.Text = Sqr(acum)
        acum = 0
        cuenta = 0
    Else
        lblDisplay.Text = "Error"
    Endif
Endif

If segunda = True Then          ' Calculo de la desviaci\F3n Est\E1ndar
' La Desviaci\F3n Estandar (S. DEV) se calcula con la formula:
' SD = SQR((Sumatoria de (abs(x - promedio) ^ 2)) / numdatos)
' Calculamos la sumatoria. (El promedio MEAN ya lo tenemos)
    For ii = 0 To numdato - 1
    modulo = modulo + (Abs(dato[ii] - mean)) ^ 2
    Next
    
    If numdato > 0 Then
        varianza = modulo / numdato
        sdev = Sqr(modulo / numdato)
        lblDisplay.Text = sdev
    Endif

Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdSigma_Click()
dato[numdato] = Val(lblDisplay.Text)
mem1 = mem1 + dato[numdato]

If segunda = False Then
  numdato = numdato + 1
  lblDisplay.Text = numdato
  cuenta = 0
Endif

If segunda = True Then
'numdato = numdato - 1
Endif

End

Public Sub Form_Open()

fmemw = False
fmemr = False
fmems = False
fmemp = False
fmeme = False
deg = True
rad = False
grad = False
suma = False
resta = False
divide = False
multiplica = False
raiz = False
potencia = False
sto = False
rcl = False
sum = False
rest = False
prod = False
divi = False
deltaporc = False
porciento = False
exc = False
punto = False
segunda = False
inv = False
fixes = False
porciento = False

mem1 = 0
mem2 = 0
mem3 = 0
lblDisplay.Text = "0"
lblgrados.Caption = "DEG"
'Pi 3.141592654
dato = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
numdato = 0

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

Me.x = 1200
Me.y = 300

cmdProd.Background = Color.Orange
End

Public Sub cmd2nd_Click()
cmd2nd.Background = Color.Red
segunda = True
End Sub

Public Sub cmdAbreParent_Click()

If segunda = False Then
    tempo1 = Val(lblDisplay.Text)
Endif



If segunda = True Then

Endif


End

Public Sub cmdCE_Click()
cuenta = 0
lblDisplay.Text = "0"
End

Public Sub cmdCierraParent_Click()
If segunda = False Then
    cmdIgual_Click
    tempo1 = acum
    

Endif


If segunda = True Then
lblDisplay.Text = Pi

Endif

segunda = False
cmd2nd.Background = &H808080
End

Public Sub cmdCoseno_Click()
Dim valor As Float

If segunda = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = Cos(valor)
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Cos(valor)
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = Cos(valor)
    Endif

Endif

If segunda = True Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = (Exp(valor) + Exp(-valor)) / 2
    Endif

Endif

segunda = False
cmd2nd.Background = &H808080


End

Public Sub cmdDiv_Click()
If segunda = False Then
  punto = False
  acum = Val(lblDisplay.Text)
  divide = True
  cuenta = 0
Endif

If segunda = True Then
Dim valor As Integer
valor = Int(Val(lblDisplay.Text))
'lblDisplay.Text = fact(valor)

segunda = False
Endif
End

Public Sub cmdex_Click()
Dim valor As Float

If segunda = False And inv = False Then
    valor = Exp(Val(lblDisplay.Text))
    lblDisplay.Text = valor
Endif

If segunda = False And inv = True Then
    valor = Exp(Val(lblDisplay.Text))
    lblDisplay.Text = valor
Endif


If segunda = True And inv = False Then
    valor = 10 ^ Val(lblDisplay.Text)
    lblDisplay.Text = valor
Endif

If segunda = True And inv = True Then
    valor = 10 ^ Val(lblDisplay.Text)
    lblDisplay.Text = valor
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdINV_Click()
cmdINV.Background = Color.Red
inv = True
End

Public Sub cmdLnx_Click()
Dim valor As Float

If segunda = False Then
    valor = Val(lblDisplay.Text)
    If valor = 0 Then
        lblDisplay.Text = "Error"
    Else
        lblDisplay.Text = Log(valor)
    Endif
Endif


If segunda = True Then
    valor = Val(lblDisplay.Text)
    If valor = 0 Then
        lblDisplay.Text = "Error"
    Else
        lblDisplay.Text = Log(valor) / Log(10)
    Endif
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdMasMenos_Click()

If segunda = False Then
  lblDisplay.Text = Val(lblDisplay.Text) * (-1)
Endif

If segunda = True Then
  rad = True
  deg = False
  grad = False
  lblgrados.Caption = "RAD"
  segunda = False
Endif

cmd2nd.Background = &H808080

End

Public Sub cmdProd_Click()
If segunda = False Then
  punto = False
  acum = Val(lblDisplay.Text)
  multiplica = True
  cuenta = 0
Endif

If segunda = True Then
Dim valor As Integer
valor = Int(Val(lblDisplay.Text))
'lblDisplay.Text = fact(valor)

segunda = False
Endif
End

Public Sub cmdRaizxy_Click()
If segunda = False Then     ' Se introduce el n\FAmero, la tecla RAIZ y luego el radical
    acum = Val(lblDisplay.Text)
    raiz = True
    cuenta = 0
Endif


If segunda = True Then
    Dim valor As Float
    'Dim digi As Integer
    Dim factorial As Long
    Dim i As Integer
    factorial = 1
    
    valor = Int(Val(lblDisplay.Text))
    For i = 1 To valor
        factorial = factorial * i
    Next

    lblDisplay.Text = factorial
    segunda = False
Endif
cmd2nd.Background = &H808080

End

Public Sub cmdSUM_Click()
If segunda = False Then
    fmems = True
    acum = Val(lblDisplay.Text)
Endif

If segunda = True Then          ' PROD
    fmemp = True
    acum = Val(lblDisplay.Text)
Endif

End

Public Sub cmdTangente_Click()
Dim valor As Float

If segunda = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = Tan(valor)
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Tan(valor)
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 100
        lblDisplay.Text = Tan(valor)
    Endif

Endif

If segunda = True Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 100
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / (Exp(valor) + Exp(-valor))
    Endif

Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdX2_Click()

If segunda = False Then
    lblDisplay.Text = Val(lblDisplay.Text) ^ 2

Endif


If segunda = True Then              ' Calcula el promedio de datos MEAN
Dim cantidad, ii As Integer

    cantidad = numdato - 1
    mean = 0
    For ii = 0 To cantidad
        mean = mean + dato[ii]
    Next
    
    If numdato > 0 Then
        mean = mean / numdato
        lblDisplay.Text = mean
    Else
        lblDisplay.Text = "Error"
    Endif
    
Endif


inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdYaX_Click()

If segunda = False Then         ' Se prepara para calcular y ^ x
    potencia = True
    yy = Val(lblDisplay.Text)
    cuenta = 0
    acum = 0
Endif


If segunda = True Then          ' Calculo de CORR (Correlaci\F3n)


Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd0_Click()
If segunda = False And inv = False Then
    If fmemw = False And fmems = False Then
        If cuenta = 0 Then
            lblDisplay.Text = ""
            lblDisplay.Text = "0"
        Else
            lblDisplay.Text = lblDisplay.Text & "0"
        Endif
        cuenta = cuenta + 1
    Endif
        
        If potencia = True And fmems = False Then
            If cuenta = 0 Then
                acum = Val(lblDisplay.Text)
                xx = acum
            Endif
        Endif

Endif

If segunda = True Then
    acum = Val(lblDisplay.Text)
    tempo1 = acum - Int(acum)
    tempo2 = Int(acum) + (tempo1 * 100 / 60)
    lblDisplay.Text = tempo2
    tempo1 = 0
    tempo2 = 0
    acum = 0
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd1_Click()
'Esta tecla pone en display un 1
'Es Mem1 para STO
'Es Mem1 para RCL
'Es Mem1 para EXC con 2nd
'Es Mem1 para SUM
'Es Mem1 para RESTA con INV
'Es Mem1 para PROD con 2nd
'Es Mem1 para DIV con 2nd e INV
'Convierte de \B0F a \B0C con 2nd
'Convierte de \B0C a \B0F con 2nd e INV

If segunda = False And inv = False Then     ' Poner 1 en display
    If fmemw = False And fmems = False And fmems = False Then
        If cuenta = 0 Then
            lblDisplay.Text = "1"
        Else
            lblDisplay.Text = lblDisplay.Text & "1"
        Endif
    Endif
       
        cuenta = cuenta + 1
        
    If fmemw = True Then                        ' STO a Memoria 1
        mem1 = Val(lblDisplay.Text)
        fmemw = False
        cuenta = 0
    Endif
    
    If fmemr = True Then                        ' RCL de Memoria 1
        lblDisplay.Text = mem1
        fmemr = False
        cuenta = 0
    Endif
    
    If fmems = True Then                        ' SUM a Memoria1
        mem1 = mem1 + acum
        fmems = False
        cuenta = 0
    Endif
    
  
    If potencia = True Then                     ' x exp(y)
        acum = Val(lblDisplay.Text)
        xx = acum
    Endif

Endif

If segunda = True And inv = False Then       ' Conversion \B0F a \B0C o PROD a Memoria1
    If fmemp = False And fmeme = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = (acum - 32) * (5 / 9)
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True And fmeme = False Then  ' PROD acum con Memoria 1
        mem1 = mem1 * acum
        acum = 0
    Endif

    If fmeme = True Then                    ' Intercambia acum con Memoria 1
        tempo1 = mem1
        mem1 = Val(lblDisplay.Text)
        lblDisplay.Text = tempo1
        tempo1 = 0
        acum = 0
    Endif

    If fixes = True Then
        decifix = "0.0"
    
    Endif

Endif

If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria1



Endif

If segunda = True And inv = True Then       ' Conversion de \B0C a \B0F o DIV (INV PROD) a Memoria1
    If fmemp = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = (9 * acum / 5) + 32
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True Then
        acum = Val(lblDisplay.Text)
        mem1 = acum / mem1
        acum = 0
    Endif
  

Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd2_Click()
'Esta tecla pone en display un 2
'Es Mem2 para STO
'Es Mem2 para RCL
'Es Mem2 para EXC con 2nd
'Es Mem2 para SUM
'Es Mem2 para RESTA con INV
'Es Mem2 para PROD con 2nd
'Es Mem2 para DIV con 2nd e INV
'Convierte de DEG a RAD con 2nd
'Convierte de RAD a DEG con 2nd e INV

If segunda = False And inv = False Then
    If fmemw = False Then
        If fmems = False Then
            If cuenta = 0 Then
                lblDisplay.Text = "2"
            Else
                lblDisplay.Text = lblDisplay.Text & "2"
            Endif
            cuenta = cuenta + 1
        Endif
    Endif
    
    If fmemw = True Then
        mem2 = Val(lblDisplay.Text)
        fmemw = False
        cuenta = 0
    Endif
    
    If fmemr = True Then
        lblDisplay.Text = mem2
        fmemr = False
        cuenta = 0
    Endif
    
    If potencia = True Then
        acum = Val(lblDisplay.Text)
        xx = acum
        cuenta = 0
    Endif
    
    If fmems = True Then                ' Sumar una cantidad a la MEM 2
        mem2 = mem2 + acum
        fmems = False
        cuenta = 0
    Endif

Endif

If segunda = True And inv = False Then      ' Convierte DEG a RAD
    If fmemp = False And fmeme = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * Pi / 180
        acum = 0
        cuenta = 0
    Endif

    If fmemp = True And fmeme = False Then
        mem2 = mem2 * acum
        acum = 0
        cuenta = 0
    Endif
    
    If fmeme = True Then
        tempo1 = mem2
        mem2 = Val(lblDisplay.Text)
        lblDisplay.Text = tempo1
        tempo1 = 0
        acum = 0
    Endif

Endif

If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria2



Endif

If segunda = True And inv = True Then       '
    If fmemp = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * 180 / Pi
        acum = 0
        cuenta = 0
    Endif

    If fmemp = True Then                    ' DIV (INV PROD) a Memoria2
        acum = Val(lblDisplay.Text)
        mem2 = acum / mem2
        acum = 0
        cuenta = 0
    Endif


Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd3_Click()
'Esta tecla pone en display un 3
'Es Mem3 para STO
'Es Mem3 para RCL
'Es Mem3 para EXC con 2nd
'Es Mem3 para SUM
'Es Mem3 para RESTA con INV
'Es Mem3 para PROD con 2nd
'Es Mem3 para DIV con 2nd e INV
'Convierte de GRAD a RAD con 2nd
'Convierte de RAD a GRAD con 2nd e INV

If segunda = False And inv = False Then
    If fmemw = False Then
        If fmems = False Then
            If cuenta = 0 Then
                lblDisplay.Text = "3"
            Else
                lblDisplay.Text = lblDisplay.Text & "3"
            Endif
        cuenta = cuenta + 1
        Endif
    Endif
    
    If fmemw = True Then
        mem3 = Val(lblDisplay.Text)
        fmemw = False
        cuenta = 0
    Endif
    
    If fmemr = True Then
        lblDisplay.Text = mem3
        fmemr = False
        cuenta = 0
    Endif
    
    If potencia = True Then
        acum = Val(lblDisplay.Text)
        xx = acum
        cuenta = 0
    Endif
    
    If fmems = True Then        ' Sumar una cantidad a la MEM 3
        mem3 = mem3 + acum
        fmems = False
        cuenta = 0
    Endif

Endif

If segunda = True And inv = False Then      ' Convierte de GRAD a RAD
    If fmemp = False And fmeme = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * Pi / 200
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True And fmeme = False Then
        mem3 = mem3 * acum
        acum = 0
        cuenta = 0
    Endif
    
    If fmeme = True Then
        tempo1 = mem3
        mem3 = Val(lblDisplay.Text)
        lblDisplay.Text = tempo1
        tempo1 = 0
        acum = 0
    Endif
    
Endif

If segunda = False And inv = True Then      ' RESTA (INV SUM) a Memoria3



Endif

If segunda = True And inv = True Then       ' Convierte de RAD a GRAD o DIV (INV PROD) a Memoria1
    If fmemp = False Then
        acum = Val(lblDisplay.Text)
        lblDisplay.Text = acum * 200 / Pi
        acum = 0
        cuenta = 0
    Endif
    
    If fmemp = True Then                    ' DIV entre un numero y Memoria 3
        acum = Val(lblDisplay.Text)
        mem3 = acum / mem3
        acum = 0
        cuenta = 0
    Endif

Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd4_Click()
If segunda = False And inv = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "4"
    Else
        lblDisplay.Text = lblDisplay.Text & "4"
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True And inv = False Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum * 25.4
    acum = 0
Endif

If segunda = True And inv = True Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum / 25.4
    acum = 0
Endif



If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080
End

Public Sub cmd5_Click()
If segunda = False And inv = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "5"
    Else
        lblDisplay.Text = lblDisplay.Text & "5"
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True And inv = False Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum * 3.785411784
    acum = 0
Endif

If segunda = True And inv = True Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum / 3.785411784
    acum = 0
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd6_Click()
If segunda = False And inv = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "6"
    Else
        lblDisplay.Text = lblDisplay.Text & "6"
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True And inv = False Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum * 0.45359237
    acum = 0
Endif

If segunda = True And inv = True Then
    acum = Val(lblDisplay.Text)
    lblDisplay.Text = acum / 0.45359237
    acum = 0
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmd7_Click()
If cuenta = 0 Then
lblDisplay.Text = "7"
Else
lblDisplay.Text = lblDisplay.Text & "7"
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

cuenta = cuenta + 1


End

Public Sub cmd8_Click()
If cuenta = 0 Then
lblDisplay.Text = "8"
Else
lblDisplay.Text = lblDisplay.Text & "8"
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

cuenta = cuenta + 1


End

Public Sub cmd9_Click()
If cuenta = 0 Then
lblDisplay.Text = "9"
Else
lblDisplay.Text = lblDisplay.Text & "9"
Endif

If potencia = True Then
    acum = Val(lblDisplay.Text)
    xx = acum
Endif

cuenta = cuenta + 1


End

Public Sub cmdCLR_Click()
Dim ii As Integer

If segunda = False Then
    lblDisplay.Text = "0"
    cuenta = 0
    acum = 0
    
    punto = False
    suma = False
    resta = False
    multiplica = False
    divide = False
    raiz = False
    segunda = False
    inv = False
    
    cmdINV.Background = &H808080
    cmd2nd.Background = &H808080
Endif

If segunda = True Then

    mean = 0
    numdato = 0
    varianza = 0
    sdev = 0
    mem1 = 0
    cuenta = 0
        
    For ii = 0 To 31
    dato[ii] = 0
    Next
    
    deg = True
    grad = False
    rad = False
    
    lblDisplay.Text = "0"
    lblgrados.Caption = "DEG"
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdIgual_Click()
cuenta = 0
If segunda = False Then
    If suma = True And porciento = False Then
        acum = acum + Val(lblDisplay.Text)
        suma = False
        lblDisplay.Text = acum
    Endif
    
    If suma = True And porciento = True Then
      acum = Val(lblDisplay.text)
      acum = xx + acum
      lblDisplay.Text = acum
      acum = 0
      xx = 0
      yy = 0
      porciento = False
    Endif
        
    If resta = True Then
        acum = acum - Val(lblDisplay.Text)
        resta = False
        lblDisplay.Text = acum
    Endif
    
    If potencia = True Then
        acum = yy ^ Val(lblDisplay.Text)
        lblDisplay.Text = acum
    Endif
    
    If divide = True Then
        If Val(lblDisplay.Text) <> 0 Then
            acum = acum / Val(lblDisplay.Text)
            lblDisplay.Text = acum
            divide = False
        Else
            lblDisplay.Text = "Error"
        Endif
    Endif
    
    If multiplica = True Then
        acum = acum * Val(lblDisplay.Text)
        lblDisplay.Text = acum
        multiplica = False
    Endif
    
    If raiz = True Then
        tempo1 = Val(lblDisplay.Text)
        acum = acum ^ (1 / tempo1)
        lblDisplay.Text = acum
        tempo1 = 0
        acum = 0
    Endif
    
    If porciento = True And suma = False And resta = False Then
      If suma = False
        yy = Val(lblDisplay.Text)
        acum = (yy * 100 / xx) - 100
        lblDisplay.Text = acum
        acum = 0
        xx = 0
        yy = 0
        porciento = False
      Endif

      If suma = True And porciento = True Then
        yy = Val(lblDisplay.Text)
        acum = acum + (acum * Val(lblDisplay.Text))
        lblDisplay.Text = acum
        acum = 0
        xx = 0
        yy = 0
      Endif
      
    Endif
    
    punto = False
Endif

If segunda = True Then
grad = True
rad = False
deg = False
lblgrados.Caption = "GRAD"
segunda = False
Endif

segunda = False
cmd2nd.Background = &H808080
potencia = False
cmd2nd.Background = &H808080

End

Public Sub cmdMas_Click()
If segunda = False Then
    punto = False
    acum = Val(lblDisplay.Text)
    xx = acum
    suma = True
    cuenta = 0
Endif

If segunda = True Then
Dim valor As Integer
    valor = Int(Val(lblDisplay.Text))
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End Sub

Public Sub cmdMenos_Click()
punto = False
acum = Val(lblDisplay.Text)
resta = True
cuenta = 0

End

Public Sub cmdPunto_Click()
If segunda = False And punto = False Then
    If cuenta = 0 Then
        lblDisplay.Text = "0."
        punto = True
    Else
        If punto = False Then
            lblDisplay.Text = lblDisplay.Text & "."
            punto = True
        Endif
    Endif
    cuenta = cuenta + 1
Endif

If segunda = True Then
    lblgrados.Caption = "DEG"
    deg = True
    grad = False
    rad = False
Endif

segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdRCL_Click()
If segunda = False And inv = False Then     ' RCL
fmemr = True
Endif

If segunda = True And inv = False Then      ' EXC Intercambia Display con Memorias
fmeme = True
Endif

If segunda = False And inv = True Then     ' RCL
fmemr = True
Endif

If segunda = True And inv = True Then       ' EXC Intercambia Display con Memorias
fmeme = True
Endif


End


Public Sub cmdPorciento_Click()
If segunda = False And suma = False Then
  xx = Val(lblDisplay.Text)
  xx = xx * 0.01
  lblDisplay.Text = xx
  porciento = True
Endif

If segunda = False And suma = True Then
  yy = Val(lblDisplay.text)
  yy = xx * yy * 0.01
  lblDisplay.Text = yy
  porciento = True
Endif
  
If segunda = True Then
  deltaporc = True
  xx = Val(lblDisplay.Text)
  cuenta = 0
Endif

punto = False
segunda = False
cmd2nd.Background = &H808080

End


Public Sub cmdSeno_Click()
Dim valor As Float

If segunda = False And inv = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = Sin(valor)
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Sin(valor)
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = Sin(valor)
    Endif
Endif

If segunda = True And inv = False Then
    If deg = True Then
        valor = Val(lblDisplay.Text) * Pi / 180
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text) * Pi / 200
        lblDisplay.Text = (Exp(valor) - Exp(-valor)) / 2
    Endif
Endif

If segunda = False And inv = True Then      ' Angulo con INV sin x
    If deg = True Then
        valor = Val(lblDisplay.Text)
        acum = Atn(valor / Sqr(-valor * valor + 1)) * 180 / Pi
        lblDisplay.Text = acum
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        tempo1 = Sqr(-valor * valor + 1)
        If tempo1 > 0 Then
            lblDisplay.Text = Atn(valor / Sqr(-valor * valor + 1))
            valor = 0
            tempo1 = 0
        Else
            lblDisplay.Text = "Error"
            valor = 0
            tempo1 = 0
        Endif
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Atn(valor / Sqr(-valor * valor + 1)) * 200 / Pi
    Endif
Endif

If segunda = True And inv = True Then      ' Inversa sinh x
    If deg = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Log(valor * Sqr(valor * valor + 1)) * 180 / Pi
    Endif
    
    If rad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Log(valor * Sqr(valor * valor + 1))
    Endif
    
    If grad = True Then
        valor = Val(lblDisplay.Text)
        lblDisplay.Text = Log(valor * Sqr(valor * valor + 1)) * 200 / Pi
    Endif
Endif

inv = False
cmdINV.Background = &H808080
segunda = False
cmd2nd.Background = &H808080

End

Public Sub cmdSTO_Click()
If segunda = False Then
    'mem = Val(lblDisplay.Text)
    fmemw = True
Endif

If segunda = True Then
    fixes = True
Endif

End

Public Sub cmdSalir_Click()
Quit
End
 
[/code]

[Imagen: BXmpCA0.png]

Espero que haya entusiastas que les llame la atención este proyecto....Saludos.
alberto-moyano 19-02-2021, 23:16
Hola gente

empecé a desarrollar una interfaz para utilizar unos scripts (escritos en ruby) para automatizar el proceso de edición de libros (edición en terminos de publisher, no de autor), lo que adjunto es un prototipo, donde algunas cosas ya funcionan y otras solo son ideas que falta terminar de pulir, Ramiro (el autor de Pecas) está reecribiendo parte de los scripts para que se ajusten mejor a esta interfaz (el lenguaje que utiliza es ruby).

La idea es simple, partiendo de un solo formato (word convertido a markdown) se va a varios formatos de salida: pdf (vía LaTeX), ePub y docx (este último con todas las correcciones que sufrió el libro), una página html y un archivo XML.

Pecas (https://programando.li/bros/index.html) funciona bastante bien pero tiene limitaciones propias de un mal diseño y vamos a aprovechar el desarrollo de esta interfaz para mejorar los scripts que ya existen, todavía falta decidir si las nuevas funciones se hacen desde gambas o en ruby como el resto de los scripts.

Este proyecto sale con licencia GPL y pronto lo tendremos en git para que más personas se sumen, disculpen la perorata.

Como este software es muy específico a un oficio, talvez algunas cosas no se entiendan, si quieren puedo hacer un video cortito explicando la lógica de trabajo de un publisher.

Espero puedan verlo, criticarlo y ayudar si lo desean.
Archivos adjuntos
.gz
Manutius-0.0.47.tar.gz (Tamaño: 58.52 KB Descargas: 8)
Páginas (551):    1 465 466 467 468 469 551   
Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.
Recordarme?
Miembros: 279
Último miembro: pepe70
Temas del foro: 1,699
Mensajes del foro: 8,822
Últimos temas
Gambas + ERP = GamERP.
Foro: Aplicaciones/Fragmentos de Código
Último mensaje por: tincho, Hace 54 minutos
Respuestas: 24 - Vistas: 1,897
Manejando imágenes desde ...
Foro: Videotutoriales
Último mensaje por: Shordi, Hace 5 horas
Respuestas: 2 - Vistas: 55
gb.db2: columnas calculad...
Foro: Bases de Datos
Último mensaje por: Shordi, Ayer, 20:04
Respuestas: 9 - Vistas: 373
Imprimir resultados en el...
Foro: General
Último mensaje por: Turriano, 28-04-2025, 11:53
Respuestas: 5 - Vistas: 128
¿ Qué hay de nuevo en la ...
Foro: Instalación
Último mensaje por: tercoide, 27-04-2025, 15:20
Respuestas: 2 - Vistas: 101
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.