[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