[Gambas-user] GTK versus QT

Philippe Valarcher philippe.valarcher at free.fr
Thu Feb 23 12:51:38 CET 2023


I have a concern on a small program, with the component GB.QT The
Form_Keypress works well and does what I ask him when with GB.GTK or
even GB.GTK3 The keyboard entry takes only the last figure, The
concatenation of the figures is not done (we can check it by doing a
simple operation of the 11+1 style, under GTK it gives = 2 while under
QT it gives = 12.
There is certainly a way to turn around but I have not yet found.
I attach a text file with the incriminated procedures as well as the 47
version (under GB.GTK).

Thank you for your help.


-- 
Philippe Valarcher <philippe.valarcher at free.fr>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20230223/c3f30017/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: calc-scient_1.1.47.orig.tar.gz
Type: application/x-compressed-tar
Size: 296711 bytes
Desc: not available
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20230223/c3f30017/attachment-0001.bin>
-------------- next part --------------
Public Sub Form_KeyPress() '<---------------------------------------- saisie au clavier

   Dim vText As Variant
   Dim cChiffres As String[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",", "."]
   Dim cSignes As String[] = ["+", "-", "*", "x", "/", "^", Chr(92)]

   vText = Key.Text  '<---------------------------------------------- touche pressée

   If vText Match "." Then vText = Replace(vText, ".", ",") '<------- localisation Europa

   If Key.Code = key.Return Or Key.Code = key.Enter Then btnEgal_Click()
   If Key.Code = Key.Esc Then btnCancel_Click()
   If Key.Code = Key.Backspace Or Key.Code = Key.Delete Then btnEffacer_Click()
   If Key.Code = Key.ShiftKey Then btnMod.Text = "Div"
   If Key.Code = Key.AltKey Then btnMod.Text = "Mod"

   If cChiffres.Exist(vText) Then
      Last.text = vText
      Chiffres_Click()
   Endif

   If cSignes.Exist(vText) Then
      Last.text = vText
      Signes_Click()
   Endif

   If Not cSignes.Exist(Key.Text) Or Not cChiffres.Exist(Key.Text) Then Stop Event  '<--- rien d'autre que les signes et les chiffres autorisés

   Me.Text = ("Calculatrice ")  '<----------------------------------- pour ne pas afficher vText dans le titre du formulaire

Catch
   Message.Error(Str(Error.Class) & ", code : " & Error.Code & ",  " & Str(Error.Backtrace) & " à " & Error.Where & " | " & Error.Text)

End


Public Sub Chiffres_Click()   '<------------------------------------- évènement _Click() pour le Group Chiffres

   If $bDrap Then '<------------------------------------------------- le drapeau est levé quand calcul intermédiaire
      tbAffichage.Clear '<------------------------------------------- effacement du tbAffichage
      $bDrap = Not $bDrap  '<---------------------------------------- bascule du drapeau
      tbAffichage.Foreground = Color.Black   '<---------------------- on revient à la couleur de police noire
   Endif

   If Last.text = "." Or Last.text = "," Then $iVirgule += 1 '<------ une seule virgule possible

   If $iVirgule > 1 Then
      Return
   Else
      tbAffichage.Text &= Last.text '<------------------------------- concaténation dans textbox1
      Insertion() '<------------------------------------------------- insertion de la valeur dans tableau
      $bChiffres = True '<------------------------------------------- indique qu'un chiffre a été rentré
      testAjout() '<------------------------------------------------- vérification d'un ajout de chiffre
   Endif

Catch
   Message.Error(Str(Error.Class) & ", code : " & Error.Code & ",  " & Str(Error.Backtrace) & " à " & Error.Where & " | " & Error.Text)

End


Private Sub Insertion() '<------------------------------------------- insertion des valeurs dans tableau de float

   If IsNull(tbAffichage.text) Then Return

   If IsFloat(tbAffichage.Text) Then
      $fNombre = CFloat(Val(tbAffichage.Text))
      posVirgule(tbAffichage) '<------------------------------------- position de la virgule dans le mot
   Else
      Message.Info(("Erreur de format !") & gb.crlf & ("Corriger l'erreur !"))
      $bChiffres = False
   Endif

Catch
   Message.Error(Str(Error.Class) & ", code : " & Error.Code & ",  " & Str(Error.Backtrace) & " à " & Error.Where & " | " & Error.Text)

End



Private Sub testAjout() '<------------------------------------------- vérification d'un ajout de chiffre

   If $bAjout = True Then  '<---------------------------------------- obtenu après btnEgal_Click(
      $fMemNombre = 0
      $iSigne = 0
      $bAjout = False
   Endif

Catch
   Message.Error(Str(Error.Class) & ", code : " & Error.Code & ",  " & Str(Error.Backtrace) & " à " & Error.Where & " | " & Error.Text)

End


Public Sub tbAffichage_Change()

   Object.Lock(tbAffichage)   '<------------------------------------- évite le déclenchement de l'évnènement

   If tbAffichage.Text = Clipboard.Paste() And IsFloat(tbAffichage.Text) Then
      If $bDrap Then '<---------------------------------------------- le drapeau est levé quand calcul intermédiaire
         tbAffichage.Clear '<---------------------------------------- effacement du tbAffichage
         $bDrap = Not $bDrap  '<------------------------------------- bascule du drapeau
         tbAffichage.Foreground = Color.Black   '<------------------- on revient à la couleur de police noire
      Endif
      $iVirgule += 1
      Insertion() '<------------------------------------------------- insertion de la valeur dans tableau
      $bChiffres = True '<------------------------------------------- indique qu'un chiffre a été rentré
      ' $bDrap = False '<-------------------------------------------- pour ne pas bloquer l'opération éventuelle
      testAjout() '<------------------------------------------------- vérification d'un ajout de c
   Else
      If Not IsFloat(tbAffichage.Text) Then
         tbAffichage.Clear
      Endif
   Endif
   $bChange = True

   Object.Unlock(tbAffichage) '<------------------------------------- libère l'évènement

End

Public Sub Signes_Click()  '<---------------------------------------- évènement _Click() pour le Group Signes

   If $bChiffres = False Then Return   '<---------------------------- on n'entre pas si pas chiffres

   $sSigne = Last.Text '<-------------------------------------------- on récupère signe pour les opérations

   If $iSigne = 0 Then  '<------------------------------------------- ajout dans tableau premier signe (toujours + )
      $sMemSigne.Add("+", 0)
   Endif

   $iSigne += 1   '<------------------------------------------------- incrément de 1
   $sMemSigne.Add($sSigne, $iSigne) '<------------------------------- inscription du signe dans tableau
   ' If $sSigne = "Mod" Or $sSigne = "Div" Or $sSigne = Chr(92) And Not IsInteger(tbAffichage.text) Then tlCalcul.Text = ("Ne prend que la partie entère !")
   If $sSigne = "Mod" Or $sSigne = "Div" Or $sSigne = Chr(92) And Not IsInteger(tbAffichage.text) Then
      tbAffichage.Text = Str(Int(Val(tbAffichage.text)))
      Insertion()
   Endif

   Operations($sMemSigne[$iSigne - 1]) '<---------------------------- opération antérieure ( -1 )
   tbAffichage.Clear '<---------------------------------------------- effacement pour saisie suivante

   If $bChange = False Then
      CalcIntermed()
   Endif

   If $bAjout = True Then $bAjout = False '<------------------------- bascule drapeau boolean
   $iVirgule = 0  '<------------------------------------------------- réinitialisation du compteur pour un nouveau nombre

Catch
   Message.Error(Str(Error.Class) & ", code : " & Error.Code & ",  " & Str(Error.Backtrace) & " à " & Error.Where & " | " & Error.Text)

End



Public Sub Form_KeyPress() 

    Public Sub Chiffres_Click()

        Private Sub Insertion()
        Private Sub testAjout()

Public Sub Signes_Click()

Public Sub tbAffichage_Change()




More information about the User mailing list