Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+6papydall Marc jean_debord Minibug JP06 Klaus 10 participants | |
Auteur | Message |
---|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mar 14 Nov 2023 - 17:36 | |
| C'est parfait Klaus Le chargement d'une sauvegarde fonctionne bien ! Restera éventuellement à voir le fonctionnement de l'EDIT qui refuse l'action des touches DEL et BACKSPACE. KGFGrid est un bel outil de travail ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 14 Nov 2023 - 18:01 | |
| Merci beaucoup, Marc ! Petit constat: - shift/Suppr efface le caractère à gauche du curseur. - Suppr efface le caractère à droite du curseur - déplacement du curseur avec les flèches est opérationnel La saisie est effectuée via un composant MaskEdit. Je n'ai pas la main sur son fonctionnement interne. Je l'utilie pour pouvoir tester la validité des caractères saisis selon le type de champ (entier, flottant, texte, ...). Essaie de saisir des lettres dans un champ numérique... Et cette démo ne montre même pas les capacités de calcul façon tableur ! On peut définir des formules de calcul pour les cellules, et la modification de la valeur d'une cellule se répercute automatiquement vers les autres cellules dependantes... A titre d'exemple,, je publie à nouveau une petite calculette réalisée avec KGFGrid et des formules de calcul: - Code:
-
' test_Calculette_avec_KGFGrid.bas
label UserEvent
dim X, Y, F1, F2, DEC, SIG, OP, result dim res%, KG%, v$, f1$
dll_on "KGF.dll" height 0,500 : width 0,290
edit 1 : top 1,30 : left 1,10 : width 1,242 : height 1,30 : font_size 1,20 text 1,"0"
KG% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1) res% = dll_call5("LocateKGFGrid",KG%,10,80,242,362) res% = dll_call5("SetGlobalKGFGridDimensions",KG%,6,4,60,60) res% = dll_call6("SetKGFGridCellRangeType",KG%,1,6,1,4,7) res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,1,6,1,4,20) res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,1,6,1,4,1) v$ = "%" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,1,1,adr(v$)) v$ = "SQR" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,2,2,adr(v$)) v$ = "X²" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,3,3,adr(v$)) v$ = "1/X" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,4,4,adr(v$))
v$ = "CE" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,1,1,adr(v$)) v$ = "C" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,2,2,adr(v$)) v$ = "<X" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,3,3,adr(v$)) v$ = "/" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,4,4,adr(v$))
v$ = "7" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,1,1,adr(v$)) v$ = "8" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,2,2,adr(v$)) v$ = "9" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,3,3,adr(v$)) v$ = "*" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,4,4,adr(v$))
v$ = "4" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,1,1,adr(v$)) v$ = "5" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,2,2,adr(v$)) v$ = "6" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,3,3,adr(v$)) v$ = "-" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,4,4,adr(v$))
v$ = "1" res% = dll_call6("SetKGFGridCellRangeValue",KG%,5,5,1,1,adr(v$)) v$ = "2" res% = dll_call6("SetKGFGridCellRangeValue",KG%,5,5,2,2,adr(v$)) v$ = "3" res% = dll_call6("SetKGFGridCellRangeValue",KG%,5,5,3,3,adr(v$)) v$ = "+" res% = dll_call6("SetKGFGridCellRangeValue",KG%,5,5,4,4,adr(v$))
v$ = "+/-" res% = dll_call6("SetKGFGridCellRangeValue",KG%,6,6,1,1,adr(v$)) v$ = "0" res% = dll_call6("SetKGFGridCellRangeValue",KG%,6,6,2,2,adr(v$)) v$ = "." res% = dll_call6("SetKGFGridCellRangeValue",KG%,6,6,3,3,adr(v$)) v$ = "=" res% = dll_call6("SetKGFGridCellRangeValue",KG%,6,6,4,4,adr(v$))
X = 0 Y = 0 F1 = 10 F2 = 1 DEC = 1 SIG = 1 OP = 0
v$ = "X" res% = dll_call2("DefineInlineCodeVariable",adr(v$),adr(X)) v$ = "Y" res% = dll_call2("DefineInlineCodeVariable",adr(v$),adr(Y)) v$ = "F1" res% = dll_call2("DefineInlineCodeVariable",adr(v$),adr(F1)) v$ = "F2" res% = dll_call2("DefineInlineCodeVariable",adr(v$),adr(F2)) v$ = "DEC" res% = dll_call2("DefineInlineCodeVariable",adr(v$),adr(DEC)) v$ = "SIG" res% = dll_call2("DefineInlineCodeVariable",adr(v$),adr(DEC)) v$ = "OP" res% = dll_call2("DefineInlineCodeVariable",adr(v$),adr(DEC))
f1$ = "X := 0-X" +chr$(13)+chr$(10)+ "SIG := 0-1" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,6,6,1,1,adr(f1$)) f1$ = "X := X*F1 + 0*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,6,6,2,2,adr(f1$)) f1$ = "ifgoto(DEC-1,2,4,2)" +chr$(13)+chr$(10)+ "X := X" +chr$(13)+chr$(10)+ "stop" +chr$(13)+chr$(10)+ "F1 := 1" +chr$(13)+chr$(10)+ "F2 := 1/100" +chr$(13)+chr$(10)+ "DEC := 10" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,6,6,3,3,adr(f1$))
f1$ = "X := X*F1 + 1*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,5,5,1,1,adr(f1$)) f1$ = "X := X*F1 + 2*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,5,5,2,2,adr(f1$)) f1$ = "X := X*F1 + 3*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,5,5,3,3,adr(f1$))
f1$ = "X := X*F1 + 4*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,4,4,1,1,adr(f1$)) f1$ = "X := X*F1 + 5*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,4,4,2,2,adr(f1$)) f1$ = "X := X*F1 + 6*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,4,4,3,3,adr(f1$))
f1$ = "X := X*F1 + 7*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(10)+chr$(13)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,3,3,1,1,adr(f1$)) f1$ = "X := X*F1 + 8*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(10)+chr$(13)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,3,3,2,2,adr(f1$)) f1$ = "X := X*F1 + 9*SIG*F2" +chr$(13)+chr$(10)+ "F2 := F2/DEC" +chr$(10)+chr$(13)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,3,3,3,3,adr(f1$)) ' "%" f1$ = "" f1$ = f1$ + "ifgoto(OP,4,2,4)" +chr$(13)+chr$(10) : ' 1 f1$ = f1$ + "X := X/100" +chr$(13)+chr$(10) : ' 2 f1$ = f1$ + "goto(16)" +chr$(13)+chr$(10) : ' 3 f1$ = f1$ + "ifgoto(OP-1,7,5,7)" +chr$(13)+chr$(10) : ' 4 f1$ = f1$ + "X := Y + Y*X/100" +chr$(13)+chr$(10) : ' 5 f1$ = f1$ + "goto(15)" +chr$(13)+chr$(10) : ' 6 f1$ = f1$ + "ifgoto(OP-2,10,8,10)" +chr$(13)+chr$(10) : ' 7 f1$ = f1$ + "X := Y - Y*X/100" +chr$(13)+chr$(10) : ' 8 f1$ = f1$ + "goto(15)" +chr$(13)+chr$(10) : ' 9 f1$ = f1$ + "ifgoto(OP-3,13,11,13)" +chr$(13)+chr$(10) : ' 10 f1$ = f1$ + "X := Y*X/100" +chr$(13)+chr$(10) : ' 11 f1$ = f1$ + "goto(15)" +chr$(13)+chr$(10) : ' 12 f1$ = f1$ + "ifgoto(OP-4,15,14,15)" +chr$(13)+chr$(10) : ' 13 f1$ = f1$ + "X := Y/X*100" +chr$(13)+chr$(10) : ' 14 f1$ = f1$ + "Y := 0" +chr$(13)+chr$(10) : ' 15 f1$ = f1$ + "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "OP := 0" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,1,1,1,1,adr(f1$)) ' "SQR" f1$ = "OP := 0" +chr$(13)+chr$(10)+ "X := sqrt(X)" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,1,1,2,2,adr(f1$)) ' "X²" f1$ = "OP := 0" +chr$(13)+chr$(10)+ "X := X*X" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,1,1,3,3,adr(f1$)) ' "1/X" f1$ = "OP := 0" +chr$(13)+chr$(10)+ "X := 1/X" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,1,1,4,4,adr(f1$))
' "CE" f1$ = "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := 0" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,2,1,1,adr(f1$)) ' "C" f1$ = "OP := 0" +chr$(13)+chr$(10)+ "Y := 0" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := 0" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,2,2,2,adr(f1$))
' "/" f1$ = "OP := 4" +chr$(13)+chr$(10)+ "Y := Y/X" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := 0" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,4,4,4,4,adr(f1$)) ' "*" f1$ = "OP := 3" +chr$(13)+chr$(10)+ "Y := Y*X" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := 0" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,4,4,4,4,adr(f1$)) ' "-" f1$ = "OP := 2" +chr$(13)+chr$(10)+ "Y := Y-X" +chr$(13)+chr$(10)+ "SIG := 0-1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := 0" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,4,4,4,4,adr(f1$)) ' "+" f1$ = "OP := 1" +chr$(13)+chr$(10)+ "Y := Y+X" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := 0" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,5,5,4,4,adr(f1$)) ' "=" f1$ = "" f1$ = f1$ + "ifgoto(OP,4,2,4)" +chr$(13)+chr$(10) : ' 1 f1$ = f1$ + "X := X" +chr$(13)+chr$(10) : ' 2 f1$ = f1$ + "goto(16)" +chr$(13)+chr$(10) : ' 3 f1$ = f1$ + "ifgoto(OP-1,7,5,7)" +chr$(13)+chr$(10) : ' 4 f1$ = f1$ + "X := Y + X" +chr$(13)+chr$(10) : ' 5 f1$ = f1$ + "goto(15)" +chr$(13)+chr$(10) : ' 6 f1$ = f1$ + "ifgoto(OP-2,10,8,10)" +chr$(13)+chr$(10) : ' 7 f1$ = f1$ + "X := Y - Y" +chr$(13)+chr$(10) : ' 8 f1$ = f1$ + "goto(15)" +chr$(13)+chr$(10) : ' 9 f1$ = f1$ + "ifgoto(OP-3,13,11,13)" +chr$(13)+chr$(10) : ' 10 f1$ = f1$ + "X := Y*X" +chr$(13)+chr$(10) : ' 11 f1$ = f1$ + "goto(15)" +chr$(13)+chr$(10) : ' 12 f1$ = f1$ + "ifgoto(OP-4,15,14,15)" +chr$(13)+chr$(10) : ' 13 f1$ = f1$ + "X := Y/X" +chr$(13)+chr$(10) : ' 14 f1$ = f1$ + "Y := 0" +chr$(13)+chr$(10) : ' 15 f1$ = f1$ + "OP := 0" +chr$(13)+chr$(10)+ "Y := 0" +chr$(13)+chr$(10)+ "SIG := 1" +chr$(13)+chr$(10)+ "DEC := 1" +chr$(13)+chr$(10)+ "F1 := 10" +chr$(13)+chr$(10)+ "F2 := 1" +chr$(13)+chr$(10)+ "X := X" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,6,6,4,4,adr(f1$))
on_user_event UserEvent
end
UserEvent: UserEvent() return sub UserEvent() dim_local lig%, col%, event%, id%, type%, res$, f if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub if (bin_and(user_event_wparam,hex("00FF0000"))<hex("00010000")) and (bin_and(user_event_wparam,hex("00FF0000"))>hex("00050000")) then exit_sub event% = bin_and(user_event_wparam,hex("00FF0000"))/65536 id% = bin_and(user_event_wparam,hex("0000FFFF")) col% = user_event_lparam/65536 lig% = bin_and(user_event_lparam,hex("0000FFFF"))
type% = dll_call3("GetKGFGridCellType",KG%,lig%,col%) ' pause 300 res% = dll_call1("GetInlineCodeResult",adr(result))
text 1,str$(result) end_sub
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 1:09 | |
| KGF.dll V9.92 du 15/11/2023Nouveautés: - nouvelles fonctions de calcul avec des entiers multi-précisionModules modifiés: KGF.dllLa doc est inchangée. Ces fonctions permettent de faire des opérations arithmétiques sur des entiers de plus de 32 bits. actuellement, la limite est de 4096 mots de 32 bits (si, si,, c'est exact !). On utilise pour cela un module en utilisation libre, personnelle ou commerciale, réalisé par - Citation :
- {********************************************************************************************}
{ Développer par Faraoun Kamel Mohamed } { Université Djilali Liabes -Sidi Bel Abbes - Algérie } { kamel_mh@yahoo.fr ] { } { Adapté à KGF.dll par Klaus le 15/11/2023 } {********************************************************************************************} Dont j'ai eu connaissance grâce à Papydall que je remercie chaleureusement. A ce jour, les fonctions suivantes sont disponibles; - Code:
-
res% = dll_call3("HugeInteger_Add",adr(a$),adr(b$),adr(s$)) res% = dll_call3("HugeInteger_Sub",adr(a$),adr(b$),adr(s$)) res% = dll_call3("HugeInteger_Mul",adr(a$),adr(b$),adr(s$)) res% = dll_call4("HugeInteger_Div",adr(a$),adr(b$),adr(s$),adr(s1$)) res% = dll_call3("HugeInteger_Mod",adr(a$),adr(b$),adr(s$)) res% = dll_call3("HugeInteger_Exp",adr(a$),adr(b$),adr(s$)) res% = dll_call2("HugeInteger_Sqr",adr(a$),adr(s$)) res% = dll_call2("HugeInteger_Fac",adr(a$),adr(s$))
Voici un programme de démo, qui s'étoffera encore un peu avec l'ajout d'autres fonctions: - Code:
-
' Demo_HugeInteger.bas
label l_add, l_sub, l_mul, l_div, l_mod, l_exp, l_sqr, l_fac
dim res%, a$, b$, s$, s1$
full_space 0 caption 0,"Demo HugeInteger - calcul avec des entiers très longs" alpha 1 : top 1,10 : left 1,10 : caption 1,"A:" alpha 2 : top 2,35 : left 2,10 : caption 2,"B:" alpha 3 : top 3,70 : left 3,10 : caption 3,"Résultat:" edit 11 : top 11,10 : left 11,60 : width 11,width_client(0)-left(11) edit 12 : top 12,35 : left 12,60 : width 12,width_client(0)-left(12) edit 13 : top 13,70 : left 13,60 : width 13,width_client(0)-left(13) button 21 : top 21,110 : left 21,10 : caption 21,"A + B" : on_click 21,l_add button 22 : top 22,110 : left 22,left(21)+width(21) : caption 22,"A - B" : on_click 22,l_sub button 23 : top 23,110 : left 23,left(22)+width(22) : caption 23,"A * B" : on_click 23,l_mul button 24 : top 24,110 : left 24,left(23)+width(23) : caption 24,"A \ B" : on_click 24,l_div button 25 : top 25,110 : left 25,left(24)+width(24) : caption 25,"A mod B" : on_click 25,l_mod button 26 : top 26,110 : left 26,left(25)+width(25) : caption 26,"A ^^ B" : on_click 26,l_exp button 27 : top 27,110 : left 27,left(26)+width(26) : caption 27,"sqrt(A)" : on_click 27,l_sqr button 28 : top 28,110 : left 28,left(27)+width(27) : caption 28,"A!" : on_click 28,l_fac dll_on "KGF.dll" end l_add: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Add",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ return l_sub: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Sub",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ return l_mul: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mul",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ return l_div: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") s1$ = string$(2000," ") res% = dll_call4("HugeInteger_Div",adr(a$),adr(b$),adr(s$),adr(s1$)) s$ = trim$(s$) s1$ = trim$(s1$) if res%<>len(s$) then message "Anomalie en opération "+str$(res%) if res%>0 then text 13,s$+" reste "+s1$ return l_mod: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mod",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ return l_exp: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Exp",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ return l_sqr: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Sqr",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ return l_fac: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Fac",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ return
Mode d'emploi: - rentrer la valeur décimale du ou des paramètres dans les champs A et B - cliquer sur le bouton d'opération choisi - voir le résultat dans le champ Résultat Voici la capture pour une multiplication: | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 5:58 | |
| Merci Klaus! C'est parfaitement parfait J'ai modifié ton code exemple pour afficher le nombre de chiffres que comporte le résultat. J'ai constaté que le plus grand nombre pour le calcul de la factorielle est 807 ! qui comporte 1998 chiffres Beaucoup plus modeste, j'ai écris un code en pur panoramic pour calculer la factorielle d'un entier. En comparant ton code et le mien (pour n!) , je constate avec joie la parfaite concordance. Voici ton code modifié - Code:
-
' Demo_HugeInteger.bas
label l_add, l_sub, l_mul, l_div, l_mod, l_exp, l_sqr, l_fac
dim res%, a$, b$, s$, s1$
width 0,screen_x-100 : height 0,400 font_bold 0 caption 0,"Demo HugeInteger - calcul avec des entiers très longs" alpha 1 : top 1,10 : left 1,10 : caption 1,"A:" alpha 2 : top 2,35 : left 2,10 : caption 2,"B:" alpha 3 : top 3,70 : left 3,10 : caption 3,"Résultat:" edit 11 : top 11,10 : left 11,60 : width 11,width_client(0)-left(11) edit 12 : top 12,35 : left 12,60 : width 12,width_client(0)-left(12) edit 13 : top 13,70 : left 13,60 : width 13,width_client(0)-left(13) button 21 : top 21,110 : left 21,10 : caption 21,"A + B" : on_click 21,l_add button 22 : top 22,110 : left 22,left(21)+width(21) : caption 22,"A - B" : on_click 22,l_sub button 23 : top 23,110 : left 23,left(22)+width(22) : caption 23,"A * B" : on_click 23,l_mul button 24 : top 24,110 : left 24,left(23)+width(23) : caption 24,"A \ B" : on_click 24,l_div button 25 : top 25,110 : left 25,left(24)+width(24) : caption 25,"A mod B" : on_click 25,l_mod button 26 : top 26,110 : left 26,left(25)+width(25) : caption 26,"A ^^ B" : on_click 26,l_exp button 27 : top 27,110 : left 27,left(26)+width(26) : caption 27,"sqrt(A)" : on_click 27,l_sqr button 28 : top 28,110 : left 28,left(27)+width(27) : caption 28,"A!" : on_click 28,l_fac dll_on "KGF.dll" end l_add: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Add",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(len(s$)) + " chiffres" return l_sub: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Sub",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(len(s$)) + " chiffres" return l_mul: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mul",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(len(s$)) + " chiffres" return l_div: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") s1$ = string$(2000," ") res% = dll_call4("HugeInteger_Div",adr(a$),adr(b$),adr(s$),adr(s1$)) s$ = trim$(s$) s1$ = trim$(s1$) if res%<>len(s$) then message "Anomalie en opération "+str$(res%) if res%>0 then text 13,s$+" reste "+s1$ print_locate 50,200 : print "Le résultat comporte " + str$(len(s$)) + " chiffres" return l_mod: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mod",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(len(s$)) + " chiffres" return l_exp: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Exp",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(len(s$)) + " chiffres" return l_sqr: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Sqr",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(len(s$)) + " chiffres" return l_fac: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Fac",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print a$ + " ! comporte " + str$(len(s$)) + " chiffres" return
Je posterai le mien dans un instant | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 9:35 | |
| Merci, Papydall ! Je reprends ta modification ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 13:32 | |
| Petite info supplémentaire (qui figurera dans la doc): toutes ces fonctions retournent -1 en cas d'erreur. Sinon, la valeur de retour est le nombre de caractères du résultat... Il faut aussi effacer la fin de l'impression précédente. Ainsi, la version définitive est: - Code:
-
' Demo_HugeInteger.bas
label l_add, l_sub, l_mul, l_div, l_mod, l_exp, l_sqr, l_fac
dim res%, a$, b$, s$, s1$
width 0,screen_x-100 : height 0,400 font_bold 0 caption 0,"Demo HugeInteger - calcul avec des entiers très longs" alpha 1 : top 1,10 : left 1,10 : caption 1,"A:" alpha 2 : top 2,35 : left 2,10 : caption 2,"B:" alpha 3 : top 3,70 : left 3,10 : caption 3,"Résultat:" edit 11 : top 11,10 : left 11,60 : width 11,width_client(0)-left(11) edit 12 : top 12,35 : left 12,60 : width 12,width_client(0)-left(12) edit 13 : top 13,70 : left 13,60 : width 13,width_client(0)-left(13) button 21 : top 21,110 : left 21,10 : caption 21,"A + B" : on_click 21,l_add button 22 : top 22,110 : left 22,left(21)+width(21) : caption 22,"A - B" : on_click 22,l_sub button 23 : top 23,110 : left 23,left(22)+width(22) : caption 23,"A * B" : on_click 23,l_mul button 24 : top 24,110 : left 24,left(23)+width(23) : caption 24,"A \ B" : on_click 24,l_div button 25 : top 25,110 : left 25,left(24)+width(24) : caption 25,"A mod B" : on_click 25,l_mod button 26 : top 26,110 : left 26,left(25)+width(25) : caption 26,"A ^^ B" : on_click 26,l_exp button 27 : top 27,110 : left 27,left(26)+width(26) : caption 27,"sqrt(A)" : on_click 27,l_sqr button 28 : top 28,110 : left 28,left(27)+width(27) : caption 28,"A!" : on_click 28,l_fac dll_on "KGF.dll" end l_add: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Add",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres " return l_sub: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Sub",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres " return l_mul: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mul",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres " return l_div: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") s1$ = string$(2000," ") res% = dll_call4("HugeInteger_Div",adr(a$),adr(b$),adr(s$),adr(s1$)) s$ = trim$(s$) s1$ = trim$(s1$) if res%<>len(s$) then message "Anomalie en opération "+str$(res%) if res%>0 then text 13,s$+" reste "+s1$ print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres " return l_mod: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mod",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres " return l_exp: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Exp",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres " return l_sqr: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Sqr",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres " return l_fac: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Fac",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" if res%>0 then text 13,s$ print_locate 50,200 : print a$ + " ! comporte " + str$(res%) + " chiffres " return | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 14:16 | |
| Bien vu Klaus, mais il reste parfois des traces. Fais un calcul avec comme résultat un grand nombre de chiffres puis par exemple fais factorielle 1. C'est mieux comme ceci - Code:
-
print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffres" + string$(50," ")
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 14:32 | |
| | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 15:11 | |
| @Klaus J'ai constaté un mini bug dans le code exemple A propos, notre ami MiniBug ne s'est pas manifesté depuis longtemps. Espérons qu'il va bien et qu'il nous revient très bientôt! Bon, essaie de mettre un nombre négatif dans A puis demande le calcul de la factorielle et c'est le crache! La solution est d'ajouter un test dans l_fac:Autre chose : il vaut mieux sortir du sous-programme quand on est devant Anomalie en opération pour éviter l"affichage : ... comporte - 1 chiffresIl ne faut pas afficher un s final à 1 chiffreEn fin, il est préférable de donner le focus à l'EDIT 11 en debut de programme. Voici le nouveau code revu et modifié - Code:
-
' Demo_HugeInteger.bas
label l_add, l_sub, l_mul, l_div, l_mod, l_exp, l_sqr, l_fac
dim res%, a$, b$, s$, s1$ dim pluriel$
width 0,screen_x-100 : height 0,400 font_bold 0 caption 0,"Demo HugeInteger - calcul avec des entiers très longs" alpha 1 : top 1,10 : left 1,10 : caption 1,"A:" alpha 2 : top 2,35 : left 2,10 : caption 2,"B:" alpha 3 : top 3,70 : left 3,10 : caption 3,"Résultat:" edit 11 : top 11,10 : left 11,60 : width 11,width_client(0)-left(11) edit 12 : top 12,35 : left 12,60 : width 12,width_client(0)-left(12) edit 13 : top 13,70 : left 13,60 : width 13,width_client(0)-left(13) button 21 : top 21,110 : left 21,10 : caption 21,"A + B" : on_click 21,l_add button 22 : top 22,110 : left 22,left(21)+width(21) : caption 22,"A - B" : on_click 22,l_sub button 23 : top 23,110 : left 23,left(22)+width(22) : caption 23,"A * B" : on_click 23,l_mul button 24 : top 24,110 : left 24,left(23)+width(23) : caption 24,"A \ B" : on_click 24,l_div button 25 : top 25,110 : left 25,left(24)+width(24) : caption 25,"A mod B" : on_click 25,l_mod button 26 : top 26,110 : left 26,left(25)+width(25) : caption 26,"A ^^ B" : on_click 26,l_exp button 27 : top 27,110 : left 27,left(26)+width(26) : caption 27,"sqrt(A)" : on_click 27,l_sqr button 28 : top 28,110 : left 28,left(27)+width(27) : caption 28,"A!" : on_click 28,l_fac set_focus 11 dll_on "KGF.dll" end l_add: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Add",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_sub: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Sub",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_mul: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mul",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_div: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") s1$ = string$(2000," ") res% = dll_call4("HugeInteger_Div",adr(a$),adr(b$),adr(s$),adr(s1$)) s$ = trim$(s$) s1$ = trim$(s1$) if res%<>len(s$) then message "Anomalie en opération "+str$(res%) : return if res%>0 then text 13,s$+" reste "+s1$ Afficher_Longueur() return l_mod: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mod",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_exp: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Exp",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_sqr: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Sqr",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_fac: a$ = text$(11) if left$(a$,1) = "-" then message "A doit être positif ou nul" : return s$ = string$(2000," ") res% = dll_call2("HugeInteger_Fac",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return rem ============================================================================ SUB Afficher_Longueur() if res% = 1 then pluriel$ = "" : else : pluriel$ = "s" print_locate 50,200 : print "Le résultat comporte " + str$(res%) + " chiffre" + pluriel$ + string$(50," ") END_SUB rem ============================================================================
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Nov 2023 - 18:31 | |
| Merci, Papydall : Je prends tout. Voici une autre capture (calcul de puissance de 2): 151 chiffres, c'est pas mal, non ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 18 Nov 2023 - 11:20 | |
| KGF.dll V9.93 du 18/11/2023Nouveautés: - nouvelles fonctions de calcul avec des valeurs "fixed point decimals" multi-précisionModules modifiés: KGF.dllLa doc est inchangée. Cette version ajoute 4 fonctions permettant les 4 opérations de base avec des valeurs ayant des chiffres après la virgule. Ces valeurs sont appelées "fixed point décimals" ou décimales à virgule fixe. Dans cette représentation, il y a toujours n chiffres après la virgule, quelque soit la valeur. Exemple, pour 5 chiffres après la virgule: 3,00000 1234567,00123 etc Le programme de démo ci-après montre un champ spin permettant de choisir le nombre de chiffres après la virgule. Ce nombre peut être assez important (20, 80, ...). Par défaut, il est fixé à 5. - Code:
-
' Demo_HugeInteger.bas
label l_add, l_sub, l_mul, l_div, l_mod, l_exp, l_sqr, l_fac label l_fadd, l_fsub, l_fmul, l_fdiv label newspin
dim res%, a$, b$, s$, s1$, FixedPoint% dim pluriel$
width 0,screen_x-100 : height 0,400 font_bold 0 caption 0,"Demo HugeInteger - calcul avec des entiers très longs" alpha 1 : top 1,10 : left 1,10 : caption 1,"A:" alpha 2 : top 2,35 : left 2,10 : caption 2,"B:" alpha 3 : top 3,70 : left 3,10 : caption 3,"Résultat:" edit 11 : top 11,10 : left 11,60 : width 11,width_client(0)-left(11) edit 12 : top 12,35 : left 12,60 : width 12,width_client(0)-left(12) edit 13 : top 13,70 : left 13,60 : width 13,width_client(0)-left(13) button 21 : top 21,110 : left 21,10 : caption 21,"A + B" : on_click 21,l_add button 22 : top 22,110 : left 22,left(21)+width(21) : caption 22,"A - B" : on_click 22,l_sub button 23 : top 23,110 : left 23,left(22)+width(22) : caption 23,"A * B" : on_click 23,l_mul button 24 : top 24,110 : left 24,left(23)+width(23) : caption 24,"A \ B" : on_click 24,l_div button 25 : top 25,110 : left 25,left(24)+width(24) : caption 25,"A mod B" : on_click 25,l_mod button 26 : top 26,110 : left 26,left(25)+width(25) : caption 26,"A ^^ B" : on_click 26,l_exp button 27 : top 27,110 : left 27,left(26)+width(26) : caption 27,"sqrt(A)" : on_click 27,l_sqr button 28 : top 28,110 : left 28,left(27)+width(27) : caption 28,"A!" : on_click 28,l_fac
button 31 : top 31,140 : left 31,10 : caption 31,"FA + FB" : on_click 31,l_fadd button 32 : top 32,140 : left 32,left(31)+width(31) : caption 32,"FA - FB" : on_click 32,l_fsub button 33 : top 33,140 : left 33,left(32)+width(32) : caption 33,"FA * FB" : on_click 33,l_fmul button 34 : top 34,140 : left 34,left(33)+width(33) : caption 34,"FA \ FB" : on_click 34,l_fdiv alpha 40 : top 40,190 : left 40,10 : caption 40,"Chiffres décimales:" spin 41 : top 41,190 : left 41,150 : width 41,100 position 41,5 : text 41,"5" : on_change 41,newspin set_focus 11 dll_on "KGF.dll" end l_add: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Add",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_fadd: FixedPoint% = position(41) res% = dll_call1("HugeFixed_CommaPosition",FixedPoint%) a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeFixed_Add",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_sub: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Sub",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_fsub: FixedPoint% = position(41) res% = dll_call1("HugeFixed_CommaPosition",FixedPoint%) a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeFixed_Sub",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération "+str$(res%)+" "+s$ : return if res%>0 then text 13,s$ Afficher_Longueur() return l_mul: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mul",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_fmul: FixedPoint% = position(41) res% = dll_call1("HugeFixed_CommaPosition",FixedPoint%) a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeFixed_Mul",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return
l_div: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") s1$ = string$(2000," ") res% = dll_call4("HugeInteger_Div",adr(a$),adr(b$),adr(s$),adr(s1$)) s$ = trim$(s$) s1$ = trim$(s1$) if res%<>len(s$) then message "Anomalie en opération "+str$(res%) : return if res%>0 then text 13,s$+" reste "+s1$ Afficher_Longueur() return
l_fdiv: FixedPoint% = position(41) res% = dll_call1("HugeFixed_CommaPosition",FixedPoint%) a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") s1$ = string$(2000," ") res% = dll_call4("HugeFixed_Div",adr(a$),adr(b$),adr(s$),adr(s1$)) s$ = trim$(s$) s1$ = trim$(s1$) if res%<>len(s$) then message "Anomalie en opération "+str$(res%)+" "+s$ : return if res%>0 then text 13,s$+" reste "+s1$ Afficher_Longueur() return l_mod: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Mod",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_exp: a$ = text$(11) b$ = text$(12) s$ = string$(2000," ") res% = dll_call3("HugeInteger_Exp",adr(a$),adr(b$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_sqr: a$ = text$(11) s$ = string$(2000," ") res% = dll_call2("HugeInteger_Sqr",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return l_fac: a$ = text$(11) if left$(a$,1) = "-" then message "A doit être positif ou nul" : return s$ = string$(2000," ") res% = dll_call2("HugeInteger_Fac",adr(a$),adr(s$)) s$ = trim$(s$) if res%<>len(s$) then message "Anomalie en opération" : return if res%>0 then text 13,s$ Afficher_Longueur() return newspin: res% = position(41) if res%<1 position 41,1 text 41,"1" end_if return rem ============================================================================ SUB Afficher_Longueur() if res% = 1 then pluriel$ = "" : else : pluriel$ = "s" print_locate 50,250 : print "Le résultat comporte " + str$(res%) + " chiffre" + pluriel$ + string$(50," ") END_SUB rem ============================================================================ Et voici ce que donne une division par 7 avec 10 chiffres après la virgule: | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Re: KGF_dll - nouvelles versions Dim 19 Nov 2023 - 14:13 | |
| Bonjour à tous
@Klaus.
Mème un dimanche, je me permets de te déranger.
Concernant la saisie de texte sur un KGFGRID, j'aurais besoin de contrôler certaines saisies.
Par exemple si c'est une date, j'aimerais contrôler la validité (Etc.. etc..).
serait t'il possible sur la validation d'effectuer des contrôles.
Merci d'avance
Bon dimanche à tous | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 19 Nov 2023 - 15:16 | |
| La date, c'est compliqué. Il faudrait intriduire un nouveau type"DAte" de cellule (actuellement, il y a Texte, Integer, Float, Boolean pour ce qui concerne les types numériques).
Ce n'est pas simpe, mais je vais regarder ce que cela représente. En attendant, tu peux utiliser le USER_EVENT pour contrôler le contenu de la cellule après saisie et le changer si besoin. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 19 Nov 2023 - 23:32 | |
| @Lepetitmarocain: J'ai trouvé comment faire. Je vais ajouter un nouveau type de champ nomme "Date" et dont la saisie sera pilotée par un format indiquée par le format d'affichage de cette cellule. Ce sera un champ dont la valeur sera traitée comme un flottant.
Exemples de format: dd/mm/yyyy ==> 01/05/2023 m-MMM-yy ==> 1-Mai-23 Beaucoup de formats seront possibles - ils seront documentés lors de la publication de la nouvelle version. | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Re: KGF_dll - nouvelles versions Mar 21 Nov 2023 - 14:19 | |
| Bonjour à tous
@Klaus
Merci beaucoup de ton implication pour effectuer les Modifs rapidement.
Prends tout de même ton temps, car rien n'est pressé.
Bonne après midi à tous | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Re: KGF_dll - nouvelles versions Sam 2 Déc 2023 - 20:27 | |
| Bonsoir à tous.
@Klaus.
Bonsoir.
J'ai un problème avec le KGFGRID.
Lorsque je veux saisir (double click gauche) dans le grid, le grid se déplace vers la droite.
Du coup lorsque je suis vers la fin du grid qui a un ascenseur horizontal, je ne peux saisir ni valider, et le
programme est planté.
Peux tu STP voir ce qui se passe.
Merci.
Bonne soirée à tous | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 3 Déc 2023 - 0:36 | |
| Si j'essaie cela chez moi, voici ce que j'obtiens: et on ne peut pas cliquer dans le GRID sans avoir validé ou fermé la fenêtre de saisie. Il y a bien un ascenseur en bas, et un autre à droite. Mais tout reste en place... Je n'ai pas d'éléments pour tenter de reproduire ton problème. | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Re: KGF_dll - nouvelles versions Mar 5 Déc 2023 - 10:21 | |
| Bonjour à tous
@Klaus.
Je vais faire des captures d'écran, et te donner plus d'explications,
afin que tu puisses te faire une idée de ce qui se passe.
Merci.
Bonne journée pluvieuse à tous | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Re: KGF_dll - nouvelles versions Mer 6 Déc 2023 - 20:15 | |
| Bonsoir à tous. @Klaus j'ai fait des captures d’écran pour tenter d'expliquer ce qui se passe Si je saisis sur cet écran, tout va bien. sur ce deuxième écran, je me positionnes sur la dernière colonne visible, et sur le suivant on voit qu'avant de saisir, le grid s'est déplacé vers la gauche je ne peux expliquer ce qui se passe. Peut être auras tu une idée. Merci. Bonne soirée à tous | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 6 Déc 2023 - 23:56 | |
| La dernière colonne visible (partiellement) est "Dst env. ...". Si tu cliques sur cette colonne, KGFGrid se repositionne en effet pour que la colonne entière soit visible. Ceci est le fonctionnement normal. | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Re: KGF_dll - nouvelles versions Lun 11 Déc 2023 - 10:36 | |
| Bonjour à tous.
@Klaus.
Merci Pour ton explication..
Je ne suis pas convaincu, car certaines fois, le grid se déplaçant sur la gauche,fait que la zone de saisie n'est plus visible sur l'ecran,
Donc le programme est planté.
Bonne journée | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 11 Déc 2023 - 13:17 | |
| Je vais faire quelques essais avec un GRID plus vaste que lazone d'affichage. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 16 Déc 2023 - 1:02 | |
| KGF.dll V9.95 du 15/12/2023Nouveautés: - SQLite3: nouvelle fonction GetSQLite3TableDefinitions - nouvel objet: KGFTabModules modifiés: KGF.dllLa doc est inchangée - elle suivra. SQLite3: - Code:
-
res% = dll_call1("GetSQLite3TableDefinitions",SQL%) Cette fonction retourne des informations sur la structure de la base de donées dans le mémo associé à elle. objet KGFTabCeci est l'ajout majeur à KGF.dll. Il s'agit d'une version personnelle des objets CONTAINER_TAB et TAB, entièrement réalisée par moi sans utilisation de logiciels tiers - uniquement des composants standard Delphi et du code Delphi. Imaginez un cadre avec des onglets (le nombre est libre), dont les onglets cliquables sont des boutons avec des libellés ET avec des icônes réagissant au clic... Chaque onglet (bouton) est associé à une "page", et seule la page de l'onglet "sélectionné" est affichée, bien sûr. Mieux: les boutons, placés par défaut en haut horizontalement, peuvent être également placés en bas horizontalement, ou à gauche ou à droite, verticalement ! Et ceci dynamiquement, sans perturber la structure des pages de l'objet? Les boutons et les pages se redimensionnent et se repositionnent automatiquement, en tenant compte du contenu de chaque page, à chaque changement de disposition... Encore mieux: On peut, là encore dynamiquement, changer la hauteur et la largeur des boutons, et tout se reconfigure automatiquement ! On peut même activer ou désactiver un ou plusieurs onglets, simplement par une commande script. On peut évidemment avoir plusieurs objets KGFTab dans un même programme - ce n'est pas limité. Bien sûr, on peut placer des objets Panoramic dans ces pages (sinon, ça n'aurait pas grand intérêt). Maus surtout,, j'ai appliqué ici le principe du "scripting" tel qu'on le voit avec l'objet SQLITE3 (et généralement beaucoup de bases de données) qui sont pilotées par des scripts SQL. Ceci permet d'avoir une quinzaine ouune vingtaine de fonctions différentes pour configurer un tel objet - il suffit de passer un script avec les bonnes commandes à une unique fonction. En clair, il n'y a que 4 fonctions pour gérer un objet KGFTab: - Code:
-
dim res%, KT% KT% = dll_call1("CreateKGFTab",handle(dest%)) : ' dest% est le numéro de l'objet dans lequel le KGFTab doir apparaître KT% = dll_call1("DeleteKGFTab",KT%) : ' suppression de l'objet (dans on ON_CLOSE de la form 0) res% = dll_call2("ConfigureKGFTab",KT%,handle(script%)) : exécuter un script (dans un memo par exemple) res% = dll_call2("GetKGFTabHandles",KT%,adr(s$)) : ' retourner la liste des handles des pages du KGFTab
Les commandes disponibles pour un script sont les suivantes: - Citation :
- actuellement, les commandes suivantes sont disponibles dans un script (insensibles à la casse):
(les signes <...> indiquent la plade d'une valeur numérique ou textuelle, selon les circonstances) Les paramères sont séparées par des virgules et la commande est terminée par un sémicolon. Tout ce qui suit un ";" est ignoré et considéré comme commentaire. parent,<handle>; handle de l'objegt dans lequel le TKGFTab doit apparaître left,<position>; position gauche en pixels du TKGFTab top,<position>; position haute en pixels du TKGFTab width,<dimension>; largeur en pixels du TKGFTab height,<dimension>; hauteur en pixels du TKGFTab label,<ind>,<libellé>; index et libelle d'un bouton existant addtab,<libellé>; libellé du nouveau bouton inserttab,<ind>,<libellé>; index d'un bouton existant pour l'insertion et le nouveau libellé deletetab,<Ind>; index du bouton et de la feuille à supprimer insertcontrol,<ind>,<contrôle>; indice de la page, contrôle (integer(Control) ou Object_Internal(n) ou handle ) glyph,<ind>,<fichier>; index (0...3) de la partie du glupf à charger par l'image dans le fichier buttonglyph,<ind>; index du bouton dans lequel installer le glyph assemblé avec 4 images tabhandles; (retourne la liste des handles des pages) buttonheight,<dimension>; hauteur des boutons buttonwidth,<dimension>; largeur des boutons buttonposition,<choix>; choix de la position des boutons (0...3) tabcolor,<ind>,<couleur>; index d'une page et sa culeur de fond (RGB en hexa précédé par un "$") tabactivate,<ind>,<état> index d'une page et état d'activation (0 ou <>0) De façon interne, un TKGFTab contient 4 petites images invisibles servant à construire un glyph. Il faut charger les 4 images par des fichiers BMP toutes de la même dimension ( 16 x 16 par exemple), commande "glyph" Lorsque les 4 images sont chargées, on peut charger le glyph par la commande "buttonglyph" Les positions possibles des boutons sont 0=Top 1=Left 2=Bottom 3=Right Les couleurs sont par exemple: $FF pour Rouge, $FF0000 pour Bleu, etc On comprend aisément que cette liste est facile à élargir, selon les besoins, et SANS créer de nouvelles fonctions ! Mais assez parlé de théorie. Voici une démo très simple. Téléchargez KGF.dll, puis les 4 images BMP suivantes: Ces images doivent être enregsitrés en format BMP, sous les noms suivants: adroid.bmp, android(90).bmp, android(180).bmp et android(270).bmp Ou alors, utilisez 4 de vos propres BMP en format carré, au choix. Ensuite, voici le code de la démo: - Code:
-
' test_KGFTab.bas
label close0, demo, script, test
dim res%, KT%, s$, hnd%
dll_on "KGF.dll"
full_space 0 : on_close 0,close0 memo 1 : top 1,10 : left 1,900 : width 1,300 : height 1,400 : bar_both 1 button 2 : top 2,440 : left 2,900 : caption 2,"Démo" : on_click 2,demo button 3 : top 3,440 : left 3,900+width(2) : caption 3,"Script" : on_click 3,script button 4 : top 4,470 : left 4,900+width(2) : caption 4,"Test" : on_click 4,test
memo 10 : hide 10 end
close0: KT% = dll_call1("DeleteKGFTab",KT%) return demo: KT% = dll_call1("CreateKGFTab",handle(0))
clear 1 item_add 1,"; ligne commentaire" item_add 1,"Width,500;" item_add 1,"Height,400;" item_add 1,"Label,0,Clients;" item_add 1,"AddTab,Products;" item_add 1,"AddTab,Wagons;" item_add 1,"InsertTab,1,Insertion;" Item_add 1,"Glyph,0,android.bmp; définir le glyph 0" Item_add 1,"Glyph,1,android(90).bmp; définir le glyph 1" Item_add 1,"Glyph,2,android(180).bmp; définir le glyph 2" Item_add 1,"Glyph,3,android(270).bmp; définir le glyph 3" Item_add 1,"ButtonGlyph,1; installer les 4 glyphes dans le bouton 2ème bouton" item_add 1,"TabHandles; retourner la liste des handles des TABs" item_add 1,"TabColor,2,$FF; colorer la 3ème page en rouge (valeur RBG en hexa précédée par $)"
script: res% = dll_call2("ConfigureKGFTab",KT%,handle(1)) if res%<>0 then message "Erreur dans le script à la ligne "+str$(res%)+chr$(13)+chr$(10)+item_read$(1,res%) return test: ' récupére les handles des pages dans un memo invisible s$ = string$(500," ") res% = dll_call2("GetKGFTabHandles",KT%,adr(s$)) ' message s$ text 10,s$ ' ce qui suit, marche pour tous les objets fenêtrés (ayant un handle) comme Edit, Button, Memo, ... Edit 14 : Text 14,"Premier edit" Top 14,80 : Left 14,50 hnd% = val(item_read$(10,2)) res% = DLL_call3("SetFormParent",handle(14),hnd%,0) ' ce qui suit, peut être utilisé pour les objets ALPHA (remplacer ALPHA par Panel) panel 20 : width 20,100 : height 20,20 caption 20,"Démo ALPHA" top 20,30 : left 20,50 hnd% = val(item_read$(10,3)) res% = DLL_call3("SetFormParent",handle(20),hnd%,0) ' pour les autres objets sans handle (PICTURE, ...), ' les placer dans un PANEL et coller le PANEL dans le KGFTab. panel 21 : width 21,32 : height 21,32 : top 21,30 : left 21,100 picture 22 : parent 22,21 : width 22,32 : height 22,32 : stretch_on 22 file_load 22,"android.bmp" hnd% = val(item_read$(10,4)) res% = DLL_call3("SetFormParent",handle(21),hnd%,0) return
Mode d'emploi: Au démarrage, rien de se passe. Cliquez sur "Démo" ==> un KGFTab avec 4 onglets va s'afficher. Un onglet porte les icônes android (qui réagissent au clic !), et la page d'un aurte onglet esr rouge. On voit, dans le mémo à droite, que toute la démo est réalisée par un script... Puis, cliquez sur "Test" ==> quelques objets Panoramic seront chargées dans les pages. Vous pouvez cliquer sur les boutons pour voir le contenu des pages... Ensuite, effacez le contenu du mémo et rentrez vos propres scripts qui seront exécutés par un clic sur "Script". Je vous suggère d'effectuer au début des scripts d'une seule ligne pour mieux voir les effets. Faits, dans l'ordre: buttonposition,1; buttonposition,2; buttonposition,3; buttonposition,0; buttonheight,18; buttonheight,48; buttonwidth,120; buttonwidth,20;etc | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Dim 17 Déc 2023 - 2:09 | |
| Bonjour à tous ! Bravo et merci Klaus ! J’ai testé le nouvel objet KGFTab. Il est parfaitement fonctionnel ! La programmation par script est très conviviale. C’est ultra simple et très rapide à mettre en œuvre. Le scripting permet de réduire considérablement les erreurs de code. A vérifier : la commande ButtonGlyph ne fonctionne que si au moins 4 onglets sont créés. Encore bravo Klaus, c’est un super objet ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 17 Déc 2023 - 2:24 | |
| Merci beaucoup, Marc ! - Citation :
- A vérifier : la commande ButtonGlyph ne fonctionne que si au moins 4 onglets sont créés.
Oui, c'est normal. Il faut bien les 4 images pour constituer. D'ailleurs, dans mon post avec la liste des commandes, il est bien spécifie: - Citation :
- buttonglyph,<ind>; index du bouton dans lequel installer le glyph assemblé avec 4 images
Je suis en train de le faire évoluer, pour définit la largeur et/ou la hauteur des boutons et pour pouvoir afficher plusieurs lignes ou colonnes de boutons. Ca comme à marcher comme le montre la capture suivante: avec le script suivant: - Citation :
- Width,300;
Height,400; ButtonWidth,30; Label,0,A; AddTab,B; AddTab,C; AddTab,D; AddTab,E; AddTab,F; AddTab,G; AddTab,H; AddTab,I; AddTab,J; AddTab,K; AddTab,L; AddTab,M; AddTab,N; AddTab,O; AddTab,P; AddTab,Q; AddTab,R; AddTab,S; AddTab,T; AddTab,U; AddTab,V; AddTab,W; AddTab,X; AddTab,Y; AddTab,Z; MultiRow,1; Encore un peu de patience... | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |