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 | |
|
+12JL35 Oscaribout bignono Pedro pascal10000 silverman Jicehel papydall Minibug Marc Yannick Klaus 16 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 8 Mar 2019 - 1:26 | |
| D'autres nouveautés pour KGFGrid sont sur le feu - ça commence à devenir un très joli objet ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 8 Mar 2019 - 10:40 | |
| Nouvelle version: KGF.dll V8.81 du 07/03/2019Nouveautés: - Nouvelles fonctions: ExportKGFGridRangeDataAsCSV, ClearKGFGridRangeData, ImportKGFGridRangeDataFromCSVModules modifiés: KGF.dll KGF.chmLa doc est à jour, y compris a doc en ligne, et les sources sont inchangées. On peut maintenant exporter (et réimporter) tout ou partie des données d'un KGFGrid, vers (et à partir d')un fichier CSV. Avec cela, le lien vers un autre tableur (Excel, OpenOffice, ...) est facile. En plus, on peut effacer tout ou partie des données et autres contenus d'un KGFGrid, de faon très ciblée. Dans le programme de démo suivant (toujours la facture de plomberie...), il y a 3 boutons en-dessous des KGFGrids qui en font la démonstration. - Code:
-
' Test_InlineCodeAvecKGFGrid.bas
label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1 Types$(0) = "Inconnu (traité comme Integer)" Types$(1) = "Chaîne" Types$(2) = "Entier" Types$(3) = "Flottant" Types$(4) = "Booléen" Types$(5) = "Image" Types$(6) = "Mémo" Types$(7) = "Bouton" Types$(8) = "Combo"
full_space 0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130
dll_on "KGF.dll"
KG1% = dll_call3("CreateKGFGrid",handle(0),1,1) res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377) KG17% = dll_call3("CreateKGFGrid",handle(0),17,1) res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)
' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$)) ' ****** ici, placer les formules pour le prix HT par ligne clear 130 item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)" : ' calculer le total HT d'une ligne item_add 130,"store(1,0,4,Result)" f1$ = text$(130) ' calcul du prix HT par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) ' ****** ici, placer les formules pour le prix TTC par ligne clear 130 item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100" : ' calculer le total TTC d'une ligne item_add 130,"store(1,0,6,Result)" : ' placer dans le tableau item_add 130,"Exec(17,1,4)" : ' mettre le total HT général à jour item_add 130,"Exec(17,1,6)" : ' mettre le total TTC général à jour f1$ = text$(130) ' calcul du prix TTC par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$))
' total HT général clear 130 item_add 130,"Result := Sum(1,2,4,14,4)" f1$ = text$(130) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) ' total TTC général clear 130 item_add 130,"Result := Sum(1,2,6,14,6)" f1$ = text$(130) ' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$))
' rendre les colonnes libellé, quantité et prix unitaire éditables res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)
' la colonne des quantités contient des nombres possiblement signés res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)
' ****** cas spécial pour montrer une cellule "bouton" res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7) : ' cellule (8,4) est un bouton v$ = "Valeur de PI" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) f1$ = "display(pi)" res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))
' ****** cas spécial pour montrer une cellule "combo" res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8) : ' cellule (12,2) est une combo integer clear 130 item_add 130,"1" item_add 130,"2" item_add 130,"3" item_add 130,"4" item_add 130,"5" item_add 130,"10" item_add 130,"15" item_add 130,"20" item_add 130,"25" item_add 130,"30" res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130)) : ' charger le contenu de la combo, sélectionner ligne 6
' ****** maintenant, mettre les valeurs en place v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))
v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))
button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV" on_click 101,SauverCSV button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données" on_click 102,EffacerGrid button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV" on_click 103,RestaurerCSV
on_user_event UserEvent
end SauverCSV: ' exporter les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' exporter les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ExportKGFGridRangeDataAsCSV",KG1%,2,14,1,6,adr(v$)) return
EffacerGrid: ' effacer les données du Gid ' options d'effacement des données (ClearOption-xxx) ' coInteger = $001; // 1 ' coFloat = $002; // 2 ' coString = $004; // 4 ' coCheckBox = $008; // 8 ' coImage = $010; // 16 ' coMemo = $020; // 32 ' coComboIndex = $040; // 64 ' coComboText = $080; // 128 ' coButton = $100; // 256 ' coFormula = $200; // 512 ' effacer les données des lignes 2 à 14 et de toutes les colonnes ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos res% = dll_call6("ClearKGFGridRangeData",KG1%,2,14,1,6,1+2+4+64) return
RestaurerCSV: ' restaurer les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' restaurer les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ImportKGFGridRangeDataFromCSV",KG1%,2,14,1,6,adr(v$)) return
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")) ' delete 1 ' picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1 ' clear 2 type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 5: ' Image ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok ' clipboard_paste 1 case 6: ' Mémo ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok end_select
select event% case 1: ' cellule normale message "clic dans KGFGrid Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ case 2: ' cellule bouton message "clic dans KGFGrid Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%) exit_sub case 3: ' cellule combo Integer res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 4: ' cellule combo Floating res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 5: ' cellule combo String res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub end_select if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100)) res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110)) res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120)) if 1=2 : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture ! ' ici, retourner le contenu de la cellule cliquée par code Inline: clear 130 item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) message "Contenu numérique de la cellule cliquée: "+str$(value) ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline clear 130 item_add 130,"Sum(1,3,2,4,5)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker cette somme dans la cellule (8,6) clear 130 item_add 130,"store(1,8,6,"+str$(value)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition clear 130 item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)" item_add 130,"store(1,10,6,C)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) end_if end_sub
On a maintenant un outil très puissant. Juste pour mémoire: cet objet n'est pas basé sur l'objet GRID de Panoramic, ni sur l'objet TStringGrid de Delphi. C'est une création indépendante de ma propre conception. | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Kgf.dll Ven 8 Mar 2019 - 13:46 | |
| Bonjour Klaus.
J'ai vu hier sur le Forum, que tu avais ajouté une commande afin de pouvoir saisir directement sur un KGFGRID.
Aujourd'hui je n’arrive plus à le retrouver..
Peux tu STP me donner le lien.
Merci.
Lepetitmarocain | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 8 Mar 2019 - 14:12 | |
| - Citation :
- Peux tu STP me donner le lien.
Eh bien, en bas de la signature de chacun de mes posts, tu as un lien " KGF.dll (en format ZIP)". Un clic sur ce lien télécharge la DLL (dans un fichier ZIP). | |
| | | 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 Ven 8 Mar 2019 - 16:04 | |
| Remarque à tous et principalement à Lepetitmarocain : Les liens de la signature n’apparaissent que si l’on est connecté. | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: KGF.DLL Sam 9 Mar 2019 - 14:24 | |
| Bonjour à tous. Merci Klaus & Papydall pour vos explications. Par contre j'ai bien chargé la dernière version de KGF.DLL et mes programme plantent sans avoir fait aucune modif. J' avais conservé une ancienne version de cette DLL (Précaution d'un informaticien) et mes programmes refonctionnent. Y a t'il un Bug dans la DLL. Merci pour ta réponse Klaus | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 9 Mar 2019 - 14:33 | |
| Nouvelle version: KGF.dll V8.82 du 09/03/2019Nouveautés: - Nouvelle fonctions: KGFGridVisibleModules modifiés: KGF.dll KGF.chm
La doc est à jour, y compris a doc en ligne, et les sources sont inchangées. Cette fonction permet de rendre visible ou invisible un objet KGFGrid. C'est l'équivalent des commandes HIDE et SHOW de Panoramic. Ainsi, on peut même déclarer plusieurs KGFGrid au même endroit, dans une fenêtre, et rendre un de ces objets visible selon les besoins. Le programme de démo ci-après a été modifié pour montrer l'effet de cette commande. Un nouveau bouton en bas de la fenêtre permet de cacher et réafficher l'objet, en alternance. Si vous le cachez, un libellé normalement recouvert par le KGFGrid devient visible. Par ailleurs, le premier KGFGrid a été agrandi en nombre de lignes et colonnes, de sorte à ne plus tenir exactement dans la fenêtre d'affichage. Automatiquement, des ascenseurs apparaissent, et on peut déplacer le KGFGrid comme on veut. Un clic dans une cellule reste néanmoins indentifié correctement sans décalage. L'effet est assez sympa. Voici le code: - Code:
-
' Test_InlineCodeAvecKGFGrid.bas
label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV label CacherMontrer dim visib% visib% = 1 dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1 Types$(0) = "Inconnu (traité comme Integer)" Types$(1) = "Chaîne" Types$(2) = "Entier" Types$(3) = "Flottant" Types$(4) = "Booléen" Types$(5) = "Image" Types$(6) = "Mémo" Types$(7) = "Bouton" Types$(8) = "Combo"
full_space 0 ' color 0,255,0,0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130
dll_on "KGF.dll"
' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1) KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1) res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377) ' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1) KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1) res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)
' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC ' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25) : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25) : ' activer cette ligne pour un tableau plus grand avec ascenseurs res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$)) ' ****** ici, placer les formules pour le prix HT par ligne clear 130 item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)" : ' calculer le total HT d'une ligne item_add 130,"store(1,0,4,Result)" f1$ = text$(130) ' calcul du prix HT par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) ' ****** ici, placer les formules pour le prix TTC par ligne clear 130 item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100" : ' calculer le total TTC d'une ligne item_add 130,"store(1,0,6,Result)" : ' placer dans le tableau item_add 130,"Exec(17,1,4)" : ' mettre le total HT général à jour item_add 130,"Exec(17,1,6)" : ' mettre le total TTC général à jour f1$ = text$(130) ' calcul du prix TTC par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$))
' total HT général clear 130 item_add 130,"Result := Sum(1,2,4,14,4)" f1$ = text$(130) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) ' total TTC général clear 130 item_add 130,"Result := Sum(1,2,6,14,6)" f1$ = text$(130) ' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$))
' rendre les colonnes libellé, quantité et prix unitaire éditables res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)
' la colonne des quantités contient des nombres possiblement signés res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)
' ****** cas spécial pour montrer une cellule "bouton" res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7) : ' cellule (8,4) est un bouton v$ = "Valeur de PI" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) f1$ = "display(pi)" res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))
' ****** cas spécial pour montrer une cellule "combo" res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8) : ' cellule (12,2) est une combo integer clear 130 item_add 130,"1" item_add 130,"2" item_add 130,"3" item_add 130,"4" item_add 130,"5" item_add 130,"10" item_add 130,"15" item_add 130,"20" item_add 130,"25" item_add 130,"30" res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130)) : ' charger le contenu de la combo, sélectionner ligne 6
' ****** maintenant, mettre les valeurs en place v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))
v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))
button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV" on_click 101,SauverCSV button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données" on_click 102,EffacerGrid button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV" on_click 103,RestaurerCSV
button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer" on_click 104,CacherMontrer alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !" font_bold 106 : font_size 106,28
on_user_event UserEvent
end SauverCSV: ' exporter les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' exporter les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ExportKGFGridRangeDataAsCSV",KG1%,2,14,1,6,adr(v$)) return
EffacerGrid: ' effacer les données du Gid ' options d'effacement des données (ClearOption-xxx) ' coInteger = $001; // 1 ' coFloat = $002; // 2 ' coString = $004; // 4 ' coCheckBox = $008; // 8 ' coImage = $010; // 16 ' coMemo = $020; // 32 ' coComboIndex = $040; // 64 ' coComboText = $080; // 128 ' coButton = $100; // 256 ' coFormula = $200; // 512 ' effacer les données des lignes 2 à 14 et de toutes les colonnes ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos res% = dll_call6("ClearKGFGridRangeData",KG1%,2,14,1,6,1+2+4+64) return
RestaurerCSV: ' restaurer les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' restaurer les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ImportKGFGridRangeDataFromCSV",KG1%,2,14,1,6,adr(v$)) return CacherMontrer: visib% = 1 - visib% res% = DLL_call2("KGFGridVisible",KG1%,visib%) return 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")) ' delete 1 ' picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1 ' clear 2 type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 5: ' Image ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok ' clipboard_paste 1 case 6: ' Mémo ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok end_select
select event% case 1: ' cellule normale message "clic dans KGFGrid Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ case 2: ' cellule bouton message "clic dans KGFGrid Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%) exit_sub case 3: ' cellule combo Integer res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 4: ' cellule combo Floating res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 5: ' cellule combo String res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub end_select if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100)) res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110)) res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120)) if 1=2 : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture ! ' ici, retourner le contenu de la cellule cliquée par code Inline: clear 130 item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) message "Contenu numérique de la cellule cliquée: "+str$(value) ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline clear 130 item_add 130,"Sum(1,3,2,4,5)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker cette somme dans la cellule (8,6) clear 130 item_add 130,"store(1,8,6,"+str$(value)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition clear 130 item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)" item_add 130,"store(1,10,6,C)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) end_if end_sub
Les fonctionnalités me semblent assez complètes, maintenant. Pour d''éventuels ajout, j'attendrai vos commentaires et vos besoins... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 9 Mar 2019 - 14:40 | |
| On s'est croisé. Chez moi, tout fonctionne normalement. J'utilise la version Panoramic suivante: Voici le résultat: | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 9 Mar 2019 - 15:04 | |
| | |
| | | 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 Mar 2019 - 22:38 | |
| Nouvelle version: KGF.dll V8.83 du 11/03/2019Nouveautés: - Nouvelles fonctions: SetKGFGridRangeAlerts, GetKGFGridCellAlertModules modifiés: KGF.dll KGF.chmLa doc est à jour, y compris a doc en ligne, et les sources sont inchangées. Voici mon travail du week-end. La fonction SetKGFGridRangeAlerts permet de définir des contrôles sur des cellules numériques et les afficher avec une couleur de fond et/ou de police différentes si leur valeur n'est pas comprise dans une intervalle spécifiée dans la fonction. La fonction GetKGFGridCellAlert permet de retourner l'état d'alerte pour une cellule spécifique. Dans le programme de démo suivant (toujours l'éternelle facture), la colonne 3 est déclarée contrôlée sur une intervalle comprise entre 50 et 500, avec un fond jaune en cas d'anomalie. C'est la colonne des prix unitaires, donc cela a relativement peu de sens pratique, mais cela permet de mettre facilement le dispositif en évidence. Dans la facture, deux prix sur 3 sont en anomalie, et donc affichés sur fond jaune. Si vous faites un clic droit sur une de ces cellules et saisissez un montant valide entre 50 et 500, le fond jaune disparaît. Tout ceci est entièrement automatique. Voici le programme: - Code:
-
' Test_InlineCodeAvecKGFGrid.bas
label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV label CacherMontrer, SauverDansFichier dim visib% visib% = 1 dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1 Types$(0) = "Inconnu (traité comme Integer)" Types$(1) = "Chaîne" Types$(2) = "Entier" Types$(3) = "Flottant" Types$(4) = "Booléen" Types$(5) = "Image" Types$(6) = "Mémo" Types$(7) = "Bouton" Types$(8) = "Combo"
full_space 0 : to_foreground 0 ' color 0,255,0,0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130
dll_on "KGF.dll"
' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1) KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1) res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377) ' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1) KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1) res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)
' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC ' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25) : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25) : ' activer cette ligne pour un tableau plus grand avec ascenseurs res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))
' ****** mettre une alerte de valeurs sur la colonne 3 (prix unitaire): entre 50,00 et 500,00 v$ = "1, 50,500, 255,255,0, 0,0,0" res% = dll_call6("SetKGFGridRangeAlerts",KG1%,2,14,3,3,adr(v$))
' ****** ici, placer les formules pour le prix HT par ligne clear 130 item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)" : ' calculer le total HT d'une ligne item_add 130,"store(1,0,4,Result)" f1$ = text$(130) ' calcul du prix HT par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) ' ****** ici, placer les formules pour le prix TTC par ligne clear 130 item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100" : ' calculer le total TTC d'une ligne item_add 130,"store(1,0,6,Result)" : ' placer dans le tableau item_add 130,"Exec(17,1,4)" : ' mettre le total HT général à jour item_add 130,"Exec(17,1,6)" : ' mettre le total TTC général à jour f1$ = text$(130) ' calcul du prix TTC par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$))
' total HT général clear 130 item_add 130,"Result := Sum(1,2,4,14,4)" f1$ = text$(130) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) ' total TTC général clear 130 item_add 130,"Result := Sum(1,2,6,14,6)" f1$ = text$(130) ' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$))
' rendre les colonnes libellé, quantité et prix unitaire éditables res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)
' la colonne des quantités contient des nombres possiblement signés res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)
' ****** cas spécial pour montrer une cellule "bouton" res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7) : ' cellule (8,4) est un bouton v$ = "Valeur de PI" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) f1$ = "display(pi)" res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))
' ****** cas spécial pour montrer une cellule "combo" res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8) : ' cellule (12,2) est une combo integer clear 130 item_add 130,"1" item_add 130,"2" item_add 130,"3" item_add 130,"4" item_add 130,"5" item_add 130,"10" item_add 130,"15" item_add 130,"20" item_add 130,"25" item_add 130,"30" res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130)) : ' charger le contenu de la combo, sélectionner ligne 6
' ****** maintenant, mettre les valeurs en place v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))
v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))
button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV" on_click 101,SauverCSV button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données" on_click 102,EffacerGrid button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV" on_click 103,RestaurerCSV
button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer" on_click 104,CacherMontrer button 105 : top 105,580 : left 105,220 : width 105,200 : caption 105,"Sauver dans Fichier" on_click 105,SauverDansFichier alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !" font_bold 106 : font_size 106,28
on_user_event UserEvent
end SauverDansFichier: v$ = "KGFGrid_Alert.txt" res% = dll_call2("SaveKGFGridToFile",KG1%,adr(v$)) return
SauverCSV: ' exporter les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' exporter les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ExportKGFGridRangeDataAsCSV",KG1%,2,14,1,6,adr(v$)) return
EffacerGrid: ' effacer les données du Gid ' options d'effacement des données (ClearOption-xxx) ' coInteger = $001; // 1 ' coFloat = $002; // 2 ' coString = $004; // 4 ' coCheckBox = $008; // 8 ' coImage = $010; // 16 ' coMemo = $020; // 32 ' coComboIndex = $040; // 64 ' coComboText = $080; // 128 ' coButton = $100; // 256 ' coFormula = $200; // 512 ' effacer les données des lignes 2 à 14 et de toutes les colonnes ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos res% = dll_call6("ClearKGFGridRangeData",KG1%,2,14,1,6,1+2+4+64) return
RestaurerCSV: ' restaurer les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' restaurer les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ImportKGFGridRangeDataFromCSV",KG1%,2,14,1,6,adr(v$)) return CacherMontrer: visib% = 1 - visib% res% = DLL_call2("KGFGridVisible",KG1%,visib%) return 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")) ' delete 1 ' picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1 ' clear 2 type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 5: ' Image ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok ' clipboard_paste 1 case 6: ' Mémo ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok end_select
select event% case 1: ' cellule normale message "clic dans KGFGrid Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ case 2: ' cellule bouton message "clic dans KGFGrid Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%) exit_sub case 3: ' cellule combo Integer res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 4: ' cellule combo Floating res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 5: ' cellule combo String res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub end_select if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100)) res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110)) res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120)) if 1=2 : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture ! ' ici, retourner le contenu de la cellule cliquée par code Inline: clear 130 item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) message "Contenu numérique de la cellule cliquée: "+str$(value) ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline clear 130 item_add 130,"Sum(1,3,2,4,5)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker cette somme dans la cellule (8,6) clear 130 item_add 130,"store(1,8,6,"+str$(value)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition clear 130 item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)" item_add 130,"store(1,10,6,C)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) end_if end_sub
Et voici ce dont ça a l'air: | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 12 Mar 2019 - 17:13 | |
| Nouvelle version: KGF.dll V8.84 du 13/03/2019Nouveautés: - Nouvelle fonction: DownloadFileUrlISOModules modifiés: KGF.dll KGF.chmLa doc est à jour, y compris a doc en ligne, et les sources sont inchangées. Cette fonction est identique à l'ancienne fonction DownloadFile (qui continue d'exister !). La différence réside dans l'encodage de l'URL. Pour pouvoir tenir compte correctement des caractères accentués français, ceux-ci sont automatiquement convertis en codes ISO, avant l'envoi de l'URL. Voir la documentation pour plus d'informations. Une page d'information sur le codage: https://www.utf8-chartable.de/unicode-utf8-table.pl | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 13 Mar 2019 - 12:28 | |
| Nouvelle version: KGF.dll V8.85 du 13/03/2019Nouveautés: - renommer SetKGFGridRangeAlerts en SetKGFGridCellRangeAlerts - renommer ClearKGFGridRangeData en ClearKGFGridCellRangeData - renommer ExportKGFGridRangeDataAsCSV en ExportKGFGridCellRangeDataAsCSV - renommer ImportKGFGridRangeDataFromCSV en ImportKGFGridCellRangeDataFromCSVModules modifiés: KGF.dll KGF.chm
La doc est à jour, y compris a doc en ligne, et les sources sont inchangées. Ceci est une mise à jour technique, sans modification ni ajout de fonctionnalité. Mais j'ai noté que le nommage de ces fonctions n'était pas cohérent avec la règle appliquée pour les autres fonctions de ce groupe, et j'ai donc harmonisée cela. Voici le programme de démo, avec les corrections nécessaires: - Code:
-
' Test_InlineCodeAvecKGFGrid.bas
label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV label CacherMontrer, SauverDansFichier dim visib% visib% = 1 dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1 Types$(0) = "Inconnu (traité comme Integer)" Types$(1) = "Chaîne" Types$(2) = "Entier" Types$(3) = "Flottant" Types$(4) = "Booléen" Types$(5) = "Image" Types$(6) = "Mémo" Types$(7) = "Bouton" Types$(8) = "Combo"
full_space 0 : to_foreground 0 ' color 0,255,0,0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130
dll_on "KGF.dll"
' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1) KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1) res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377) ' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1) KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1) res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)
' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC ' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25) : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25) : ' activer cette ligne pour un tableau plus grand avec ascenseurs res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))
' ****** mettre une alerte de valeurs sur la colonne 3 (prix unitaire): entre 50,00 et 500,00 v$ = "1, 50,500, 255,255,0, 0,0,0" res% = dll_call6("SetKGFGridCellRangeAlerts",KG1%,2,14,3,3,adr(v$))
' ****** ici, placer les formules pour le prix HT par ligne clear 130 item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)" : ' calculer le total HT d'une ligne item_add 130,"store(1,0,4,Result)" f1$ = text$(130) ' calcul du prix HT par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) ' ****** ici, placer les formules pour le prix TTC par ligne clear 130 item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100" : ' calculer le total TTC d'une ligne item_add 130,"store(1,0,6,Result)" : ' placer dans le tableau item_add 130,"Exec(17,1,4)" : ' mettre le total HT général à jour item_add 130,"Exec(17,1,6)" : ' mettre le total TTC général à jour f1$ = text$(130) ' calcul du prix TTC par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$))
' total HT général clear 130 item_add 130,"Result := Sum(1,2,4,14,4)" f1$ = text$(130) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) ' total TTC général clear 130 item_add 130,"Result := Sum(1,2,6,14,6)" f1$ = text$(130) ' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$))
' rendre les colonnes libellé, quantité et prix unitaire éditables res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)
' la colonne des quantités contient des nombres possiblement signés res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)
' ****** cas spécial pour montrer une cellule "bouton" res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7) : ' cellule (8,4) est un bouton v$ = "Valeur de PI" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) f1$ = "display(pi)" res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))
' ****** cas spécial pour montrer une cellule "combo" res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8) : ' cellule (12,2) est une combo integer clear 130 item_add 130,"1" item_add 130,"2" item_add 130,"3" item_add 130,"4" item_add 130,"5" item_add 130,"10" item_add 130,"15" item_add 130,"20" item_add 130,"25" item_add 130,"30" res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130)) : ' charger le contenu de la combo, sélectionner ligne 6
' ****** maintenant, mettre les valeurs en place v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))
v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))
button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV" on_click 101,SauverCSV button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données" on_click 102,EffacerGrid button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV" on_click 103,RestaurerCSV
button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer" on_click 104,CacherMontrer button 105 : top 105,580 : left 105,220 : width 105,200 : caption 105,"Sauver dans Fichier" on_click 105,SauverDansFichier alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !" font_bold 106 : font_size 106,28
on_user_event UserEvent
end SauverDansFichier: v$ = "KGFGrid_Alert.txt" res% = dll_call2("SaveKGFGridToFile",KG1%,adr(v$)) return
SauverCSV: ' exporter les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' exporter les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ExportKGFGridCellRangeDataAsCSV",KG1%,2,14,1,6,adr(v$)) return
EffacerGrid: ' effacer les données du Gid ' options d'effacement des données (ClearOption-xxx) ' coInteger = $001; // 1 ' coFloat = $002; // 2 ' coString = $004; // 4 ' coCheckBox = $008; // 8 ' coImage = $010; // 16 ' coMemo = $020; // 32 ' coComboIndex = $040; // 64 ' coComboText = $080; // 128 ' coButton = $100; // 256 ' coFormula = $200; // 512 ' effacer les données des lignes 2 à 14 et de toutes les colonnes ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos res% = dll_call6("ClearKGFGridCellRangeData",KG1%,2,14,1,6,1+2+4+64) return
RestaurerCSV: ' restaurer les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' restaurer les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ImportKGFGridCellRangeDataFromCSV",KG1%,2,14,1,6,adr(v$)) return CacherMontrer: visib% = 1 - visib% res% = DLL_call2("KGFGridVisible",KG1%,visib%) return 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")) ' delete 1 ' picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1 ' clear 2 type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 5: ' Image ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok ' clipboard_paste 1 case 6: ' Mémo ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok end_select
select event% case 1: ' cellule normale message "clic dans KGFGrid Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ case 2: ' cellule bouton message "clic dans KGFGrid Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%) exit_sub case 3: ' cellule combo Integer res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 4: ' cellule combo Floating res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 5: ' cellule combo String res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub end_select if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100)) res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110)) res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120)) if 1=2 : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture ! ' ici, retourner le contenu de la cellule cliquée par code Inline: clear 130 item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) message "Contenu numérique de la cellule cliquée: "+str$(value) ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline clear 130 item_add 130,"Sum(1,3,2,4,5)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker cette somme dans la cellule (8,6) clear 130 item_add 130,"store(1,8,6,"+str$(value)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition clear 130 item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)" item_add 130,"store(1,10,6,C)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) end_if 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 Mer 13 Mar 2019 - 19:14 | |
| Je viens de republier la doc pour corriger une anomalie dans la doc de la fonction CreateKGFGrid.
EDIT . J'ai un autre conseil à te donner. Tes colonnes sont visiblement destinées à recevoir des données de nature et longueur différentes (D/C, libellé, montant, ...). Il seraqit judicieux de paramétrer la largeur des colonnes en fonction de la longueur des données censées être affichées dans ces colonnes. Sinon, cela risque dêtre assez illisible.
De manière générale, il faudrait se contraindre à une certaine rigueur et logique dans la configuration d'un tel objet, par nature très complexe: 1. création 2. positionnement dans la fenêtre et dimensions globales 3. définition du nombre de lignes et colonnes 4. définition de la largeur de chaque colonne, en fonction de ce qu'il y aura à y afficher 5. idem pour la hauteur des lignes, le cas échéant 6. Il serait judicieux de réserver la ligne 1 comme ligne de libellés dans laquelle on affiche des titres pour chaque colonne. Cette ligne ne devrait pas être "active" et, si possible, avoir une couleur de fond différente, potentiellement plus foncée, que les autres cellules. Elle devrait également avoir l'attribur texte "gras" afin de bien créer la différence visuelle 7. définir l'ensemble des bordures (présence, largeur, couleur, ...) pour mieux structurer le tableau. Ceci est particulièrement important pour des tableaux vastes comme le tien 8. définir les couleurs de fond et tous les attributs des polices des textes, pour chaque cellule, probablement par colonne dans ton cas 9. faire, de façon générale, toutes les configurations du tableau avant l'installation des données (alertes sur fourchette et autres...) 10. charger les formules de calcul (s'il y en a) dans les cellules concernées
Et c'est seulement après cela qu'il convient de charger les données.
Afin d'améliorer la lisibilité et la maintenabilité de ton programme, il serait utile de placer tout ce qui concerne les points 1 à 10 dans une SUB de configuration qui sera appelée une seule fois, au démarrage du programme. Ensuite, tu n'a plus qu'à t'occuper des données. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 14 Mar 2019 - 15:27 | |
| Nouvelle version: KGF.dll V8.86 du 14/03/2019Nouveautés: - nouvelles fonctions: SetKGFGridCellExternalEdit, ImportKGFGridCellRangeExternalEdit - doc: petite restructuration de la doc pour KGFGrid et correction de petites erreursModules modifiés: KGF.dll KGF.chmLa doc est à jour, y compris a doc en ligne, et les sources sont inchangées. Ces deux fonctions permettent, pour l'une, de lier une cellule à un objet EDIT de Panoramic, et pour l'autre, de charger automatiquement dans le KGFGrid, le contenu de tous les EDIT liés à des cellules du KGFGrid. Dans ce cas, tous les calculs se déclenchent automatiquement, et les alertes sont actualisées (s'il y en a). Voici le programme de démo, avec ces nouvelles fonctions: - Code:
-
' Test_InlineCodeAvecKGFGrid.bas
label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV, MiseAJour label CacherMontrer, SauverDansFichier dim visib% visib% = 1 dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1 Types$(0) = "Inconnu (traité comme Integer)" Types$(1) = "Chaîne" Types$(2) = "Entier" Types$(3) = "Flottant" Types$(4) = "Booléen" Types$(5) = "Image" Types$(6) = "Mémo" Types$(7) = "Bouton" Types$(8) = "Combo"
full_space 0 : to_foreground 0
alpha 80 : top 80,40 : left 80,10 : caption 80,"Ligne 2:" edit 81 : top 81,60 : left 81,10 : width 81,200 edit 82 : top 82,60 : left 82,210 : width 82,80 edit 83 : top 83,60 : left 83,290 : width 83,100 button 84 : top 84,60 : left 84,400 : caption 84,"Mise à jour" : on_click 84,MiseAJour
memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130
dll_on "KGF.dll"
' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1) KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1) res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377) ' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1) KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1) res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)
' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC ' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25) : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25) : ' activer cette ligne pour un tableau plus grand avec ascenseurs res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))
' ****** mettre une alerte de valeurs sur la colonne 3 (prix unitaire): entre 50,00 et 500,00 v$ = "1, 50,500, 255,255,0, 0,0,0" res% = dll_call6("SetKGFGridCellRangeAlerts",KG1%,2,14,3,3,adr(v$))
' ****** définir les cellules avec handle d'un EDIT externe res% = dll_call4("SetKGFGridCellExternalEdit",KG1%,2,1,handle(81)) res% = dll_call4("SetKGFGridCellExternalEdit",KG1%,2,2,handle(82)) res% = dll_call4("SetKGFGridCellExternalEdit",KG1%,2,3,handle(83))
' ****** ici, placer les formules pour le prix HT par ligne clear 130 item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)" : ' calculer le total HT d'une ligne item_add 130,"store(1,0,4,Result)" f1$ = text$(130) ' calcul du prix HT par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) ' ****** ici, placer les formules pour le prix TTC par ligne clear 130 item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100" : ' calculer le total TTC d'une ligne item_add 130,"store(1,0,6,Result)" : ' placer dans le tableau item_add 130,"Exec(17,1,4)" : ' mettre le total HT général à jour item_add 130,"Exec(17,1,6)" : ' mettre le total TTC général à jour f1$ = text$(130) ' calcul du prix TTC par ligne res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$))
' total HT général clear 130 item_add 130,"Result := Sum(1,2,4,14,4)" f1$ = text$(130) res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) ' total TTC général clear 130 item_add 130,"Result := Sum(1,2,6,14,6)" f1$ = text$(130) ' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0) res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$))
' rendre les colonnes libellé, quantité et prix unitaire éditables res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)
' la colonne des quantités contient des nombres possiblement signés res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)
' ****** cas spécial pour montrer une cellule "bouton" res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7) : ' cellule (8,4) est un bouton v$ = "Valeur de PI" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) f1$ = "display(pi)" res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))
' ****** cas spécial pour montrer une cellule "combo" res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8) : ' cellule (12,2) est une combo integer clear 130 item_add 130,"1" item_add 130,"2" item_add 130,"3" item_add 130,"4" item_add 130,"5" item_add 130,"10" item_add 130,"15" item_add 130,"20" item_add 130,"25" item_add 130,"30" res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130)) : ' charger le contenu de la combo, sélectionner ligne 6
' ****** maintenant, mettre les valeurs en place v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))
v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))
button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV" on_click 101,SauverCSV button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données" on_click 102,EffacerGrid button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV" on_click 103,RestaurerCSV
button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer" on_click 104,CacherMontrer button 105 : top 105,580 : left 105,220 : width 105,200 : caption 105,"Sauver dans Fichier" on_click 105,SauverDansFichier alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !" font_bold 106 : font_size 106,28
on_user_event UserEvent
end SauverDansFichier: v$ = "KGFGrid_Alert.txt" res% = dll_call2("SaveKGFGridToFile",KG1%,adr(v$)) return
SauverCSV: ' exporter les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' exporter les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ExportKGFGridCellRangeDataAsCSV",KG1%,2,14,1,6,adr(v$)) return
EffacerGrid: ' effacer les données du Gid ' options d'effacement des données (ClearOption-xxx) ' coInteger = $001; // 1 ' coFloat = $002; // 2 ' coString = $004; // 4 ' coCheckBox = $008; // 8 ' coImage = $010; // 16 ' coMemo = $020; // 32 ' coComboIndex = $040; // 64 ' coComboText = $080; // 128 ' coButton = $100; // 256 ' coFormula = $200; // 512 ' effacer les données des lignes 2 à 14 et de toutes les colonnes ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos res% = dll_call6("ClearKGFGridCellRangeData",KG1%,2,14,1,6,1+2+4+64) return
RestaurerCSV: ' restaurer les données en format CSV v$ = "ExportKGFGridDataAsCSV.txt" ' restaurer les données des lignes 2 à 14 et de toutes les colonnes res% = dll_call6("ImportKGFGridCellRangeDataFromCSV",KG1%,2,14,1,6,adr(v$)) return CacherMontrer: visib% = 1 - visib% res% = DLL_call2("KGFGridVisible",KG1%,visib%) return MiseAJour: res% = dll_call5("ImportKGFGridCellRangeExternalEdit",KG1%,2,14,1,6) return 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")) ' delete 1 ' picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1 ' clear 2 type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0) : ' ok res$ = str$(res%) case 5: ' Image ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok ' clipboard_paste 1 case 6: ' Mémo ' res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok end_select
select event% case 1: ' cellule normale message "clic dans KGFGrid Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ case 2: ' cellule bouton message "clic dans KGFGrid Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%) exit_sub case 3: ' cellule combo Integer res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 4: ' cellule combo Floating res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub case 5: ' cellule combo String res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%) message "clic dans KGFGrid Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$+" ligne sélectionnée: "+str$(res%) exit_sub end_select if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100)) res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110)) res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120)) if 1=2 : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture ! ' ici, retourner le contenu de la cellule cliquée par code Inline: clear 130 item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) message "Contenu numérique de la cellule cliquée: "+str$(value) ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline clear 130 item_add 130,"Sum(1,3,2,4,5)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker cette somme dans la cellule (8,6) clear 130 item_add 130,"store(1,8,6,"+str$(value)+")" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition clear 130 item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)" item_add 130,"store(1,10,6,C)" res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0) res% = dll_call1("GetInlineCodeResult",adr(value)) end_if 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 Mer 20 Mar 2019 - 0:24 | |
| Nouvelle version: KGF.dll V8.87 du 19/03/2019Nouveautés: - nouvel objet: PMatrix - nouvelles fonctions: CreateMatrix, DeleteMatrix, BuildElementaryMatrix, MultiplayMatrixByScalar, MultiplayMatrixByMatrix, TransposeMatrix, AddMatrixToMatrix, SubstractMatrixFromMatrix, GetMatrixDeterminant, BuildInverseMatrix, CopyMatrix - doc: en cours de préparationModules modifiés: KGF.dllLa doc est en cours de préparation. Les sources sont inchangées. C'est un tout nouveau chapître que j'ouvre ici - celui du traitement mathématique des matrices. La version présentée comprend une sélection d'opérations sur les matrices de deux dimensions, représentées par des tableaux Panoramic. Ces tableaux peuvent être de 3 types: 0=integer 1=string 2=flottant. Les types 1 et 3 permettent des calculs suivants: - définition de l'objet PMatrix - suppression de l'objet PMatrix - construction d'une matrice élémentaire (matrice carrée, zéro partout, des 1 en diagonale) - multiplication d'une matrice par un facteur scalaire (une valeur flottante) - addition de deux matrices - soustractionde deux matrices - multiplication de deux matrices - transposition d'une matrice - calcul de la déterminante d'une matrice - calcul de l'inversion d'une matrice (si la déterminante est <>0 !) - copie d'une matrice dans une autre - "dump" d'une matrice (listage des éléments, ligne par ligne, dans un MEMO) Pour les calculs, les dimensions maximales des matrices sont 20 lignes x 20 colonnes, donc des indices (19,19) dans la déclaration Panoramic. Dans mon esprit, ces fonctions pourront servir partout où le calcul matriciel est nécesaire: résolution de systèmes d'équations linéaires, et donc problèmes d'optimisation etc, calculs liés à la 3D (rotations etc), et beaucoup d'autres. Le programme suivant permet de montrer la plupart de ces fonctions. Les 5 premiers mémos correspondent aux matrices dont le nom est affiché au-dessus. Le 6ème mémo est le "dump" d'une matrice recevant les résultats des opérations. - Code:
-
' test_array.bas
label transposer, additionner, soustraire, multiplier25, multiplier, determinante, inverse, copieressai, copiertest
dim res%, valeurs%(17,8), i%, k%, test%(3,5), essai%(3,3), float(4,7), determinante, n%, resultat(19,19), fact, texte$(5,4) dim MA1%, MA2%, MA3%, MA4%, MA5%, MA6%
for i%=0 to 17 for k%=0 to 8 valeurs%(i%,k%) = i%*100 + k% next k% next i%
for i%=0 to 3 for k%=0 to 5 test%(i%,k%) = i%*1000 + k% next k% next i%
' essai% est inversible et a la déterminante 12 ! essai%(0,0) = 1 essai%(0,1) = 1 essai%(0,2) = 1 essai%(0,3) = 1 essai%(1,0) = 2 essai%(1,1) = 3 essai%(1,2) = 4 essai%(1,3) = 5 essai%(2,0) = 4 essai%(2,1) = 9 essai%(2,2) = 16 essai%(2,3) = 25 essai%(3,0) = 8 essai%(3,1) = 27 essai%(3,2) = 64 essai%(3,3) = 125
for i%=0 to 5 for k%=0 to 4 texte$(i%,k%) = str$(i%)+","+str$(k%) next k% next i%
for i%=0 to 4 for k%=0 to 7 float(i%,k%) = i%+k%/100 next k% next i%
for i%=0 to 19 for k%=0 to 19 resultat(i%,k%) = 0 next k% next i%
full_space 0
memo 1 : height 1,height_client(0)-30 : top 1,30 : width 1,150 : bar_both 1 memo 2 : height 2,height_client(0)-30 : top 2,30 : width 2,150 : bar_both 2 : left 2,left(1)+width(1)+10 memo 3 : height 3,height_client(0)-30 : top 3,30 : width 3,150 : bar_both 3 : left 3,left(2)+width(2)+10 memo 4 : height 4,height_client(0)-30 : top 4,30 : width 4,150 : bar_both 4 : left 4,left(3)+width(3)+10 memo 5 : height 5,height_client(0)-30 : top 5,30 : width 5,150 : bar_both 5 : left 5,left(4)+width(4)+10 memo 6 : height 6,height_client(0)-30 : top 6,30 : width 6,150 : bar_both 6 : left 6,left(5)+width(5)+10 alpha 31 : top 31,10 : left 31,left(1) : caption 31,"valeurs%" alpha 32 : top 32,10 : left 32,left(2) : caption 32,"test%" alpha 33 : top 33,10 : left 33,left(3) : caption 33,"essai%" alpha 34 : top 34,10 : left 34,left(4) : caption 34,"texte$" alpha 35 : top 35,10 : left 35,left(5) : caption 35,"float" alpha 36 : top 36,10 : left 36,left(6) : caption 36,"==> résultat"
button 11 : top 11,top(1) : left 11,left(6)+width(6)+20 : width 11,150 : caption 11,"Transposer essai%" : on_click 11,transposer button 12 : top 12,top(11)+height(11) : left 12,left(11) : width 12,150 : caption 12,"Additionner essai%" : on_click 12,additionner button 13 : top 13,top(12)+height(12) : left 13,left(11) : width 13,150 : caption 13,"Soustraire essai%" : on_click 13,soustraire button 14 : top 14,top(13)+height(13) : left 14,left(11) : width 14,150 : caption 14,"Mult essai%*2.5" : on_click 14,multiplier25 button 15 : top 15,top(14)+height(14) : left 15,left(11) : width 15,150 : caption 15,"Mult essai%*test%" : on_click 15,multiplier button 16 : top 16,top(15)+height(15) : left 16,left(11) : width 16,150 : caption 16,"Déterminate essai%" : on_click 16,determinante button 17 : top 17,top(16)+height(16) : left 17,left(11) : width 17,150 : caption 17,"Inverse de essai%" : on_click 17,inverse button 18 : top 18,top(17)+height(17) : left 18,left(11) : width 18,150 : caption 18,"Copier dans essai%" : on_click 18,copieressai button 19 : top 19,top(18)+height(18) : left 19,left(11) : width 19,150 : caption 19,"Copier dans test%" : on_click 19,copiertest
dll_on "KGF.dll"
res% = dll_call4("TestMatrix",adr(test%),0,4,6) res% = dll_call4("TestMatrix",adr(texte$),1,5,4) res% = dll_call4("TestMatrix",adr(float),2,4,7)
' T nL nC T: 0=integer 1=string 2=flottant res% = dll_call5("DumpMatrix",adr(valeurs%), 0, 17, 8, handle(1)) res% = dll_call5("DumpMatrix",adr(test%), 0, 3, 5, handle(2)) res% = dll_call5("DumpMatrix",adr(essai%), 0, 3, 3, handle(3)) res% = dll_call5("DumpMatrix",adr(texte$), 1, 5, 4, handle(4)) res% = dll_call5("DumpMatrix",adr(float), 2, 4, 7, handle(5)) res% = dll_call5("DumpMatrix",adr(resultat), 2, 19,19, handle(6))
MA1% = dll_call4("CreateMatrix",0,adr(valeurs%),17,8) ' message "MA1%="+str$(MA1%) MA2% = dll_call4("CreateMatrix",0,adr(test%),3,5) ' message "MA2%="+str$(MA2%) MA3% = dll_call4("CreateMatrix",0,adr(essai%),3,3) ' message "MA3%="+str$(MA3%) MA4% = dll_call4("CreateMatrix",1,adr(texte$),5,4) ' message "MA4%="+str$(MA4%) MA5% = dll_call4("CreateMatrix",2,adr(float),4,7) ' message "MA5%="+str$(MA5%) MA6% = dll_call4("CreateMatrix",2,adr(resultat),19,19) ' message "MA6%="+str$(MA6%) end
transposer: res% = dll_call2("TransposeMatrix",MA3%,MA6%) ' res% = dll_call2("TransposeMatrix",MA3%,MA3%) if res%<>0 then message "TransposeMatrix: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(resultat), 2, 19, 19, handle(6)) res% = dll_call5("DumpMatrix",adr(essai%), 0, 3, 3, handle(3)) return
additionner: res% = dll_call3("AddMatrixToMatrix",MA3%,MA3%,MA6%) if res%<>0 then message "AddMatrixToMatrix: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(resultat), 2, 19, 19, handle(6)) return soustraire: res% = dll_call3("SubstractMatrixFromMatrix",MA3%,MA3%,MA6%) if res%<>0 then message "SubstractMatrixFromMatrix: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(resultat), 2, 19, 19, handle(6)) return multiplier25: fact = 2.5 res% = dll_call3("MultiplayMatrixByScalar",MA3%,adr(fact),MA6%) if res%<>0 then message "MultiplayMatrixByScalar: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(resultat), 2, 19, 19, handle(6)) return multiplier: res% = dll_call3("MultiplayMatrixByMatrix",MA3%,MA2%,MA6%) if res%<>0 then message "MultiplayMatrixByMatrix: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(resultat), 2, 19, 19, handle(6)) return determinante: res% = dll_call2("GetMatrixDeterminant",MA3%,adr(determinante)) if res%<0 message "GetMatrixDeterminant: res%="+sr$(res%) else message "La déterminante est: "+str$(determinante) end_if return inverse: ' res% = dll_call2("BuildInverseMatrix",MA3%,MA3%) res% = dll_call2("BuildInverseMatrix",MA3%,MA6%) if res%<>0 then message "BuildInverseMatrix: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(resultat), 2, 19, 19, handle(6)) res% = dll_call5("DumpMatrix",adr(essai%), 0, 3, 3, handle(3)) return copieressai: res% = dll_call2("CopyMatrix",MA6%,MA3%) if res%<>0 then message "CopyMatrix: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(essai%), 0, 3, 3, handle(3)) return copiertest: res% = dll_call2("CopyMatrix",MA6%,MA2%) if res%<>0 then message "CopyMatrix: res%="+str$(res%) res% = dll_call5("DumpMatrix",adr(test%), 0, 3, 5, handle(2)) return
Note importante:Ce code a été développé suite à ma découverte de la position en mémoire des éléments des tableaux en deux dimensons. Ca a l'air de marcher, et je ne rencontre plus de problème en ce moment. Cependant, le tout est basé sur une recherche empirique de ma part, maheureusement sans aucune certitude technique. J'espère avoir un retour de Jack validant ou invalidant mon procédé, et selon les circonstances, j'adapterai mon code pour le fiabiliser. Autre note importante:La partie calcul matriciel proprement-dit est effectué par une unité Matrix.pas trouvée sur le net à cette adresse: http://mathmatrix.narod.ru/Basic.htmlNéanmoins, je l'ai largement adapté à mes besoins, changé les paramètres d'appel des fonctions, corrigé une erreur (!) dans le calcul du produit matriciel, intégration à KGF.dll et lien avec Panoramic, etc. | |
| | | 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 Mer 20 Mar 2019 - 2:06 | |
| Voilà un bon outil pour le calcul matriciel. Bravo Klaus. - Klaus a écrit:
- - construction d'une matrice élémentaire (matrice carrée, zéro partout, des 1 en diagonale)
Permet-moi d’apporter une petite précision pour l’emploi de certains termes. • On appelle matrice élémentaire toute matrice obtenue à partir de la matrice identité I par une opération élémentaire de lignes. • Une matrice identité ou matrice unité est une matrice carrée avec des 1 sur la diagonale et des 0 partout ailleurs. • On parle du calcul du déterminant d’une matrice et non de la déterminante d’une matrice. Mais je me trompe peut-être ! Merci Klaus pour toutes ces fonctions incorporées dans KGF.DLL | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 20 Mar 2019 - 8:50 | |
| Merci, Papydall, pour ces précisions de terminologie. En effet, j'ai fait mes études mathématiques en Allemagne, et ma terminologie en cette matière esn souvent fruit d'une traduction intuitive - dont acte. J'en tiendrai compte dans la documentation qui est en cours de réalisation.
Petite question: est-ce que la calcul avec des nombres imaginaires (j'espère que le terme est bon: un nombre comportant d'une part un réel normal et d'autre part un autre réel affublé de "i" - racine carrée de -1) ? Idem pour les "Quaternions" ? Le module que j'ai utilisé, comprend les fonctions nécessaires pour cela. Il faudrait juste que je crée l'interface (un wrapper) pour l'utiliser à partir de Panoramic... | |
| | | 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 Mer 20 Mar 2019 - 19:03 | |
| 1 ) Les nombres complexes sont de la forme : z = a + ib (ou x+iy) où a et b sont des nombres réels et i un « nombre imaginaire » tel que i² = -1 ou i = racine carrée de -1 a est la partie réelle du nombre complexe. b est la partie imaginaire du nombre complexe.
Si b est nulle, alors le nombre est réel. Si a est nulle, alors le nombre est appelé imaginaire pur
Pour la petite histoire : Les nombres complexes furent introduits au XVIe siècle par les mathématiciens italiens Jérôme Cardan, Nicolo Fontana, dit Tartaglia, et Ludovico Ferrari La première apparition de racine carrée d’un nombre négatif est due à Jerome Cardan. Carl Friedrich Gauss (qui n’aime sans doute pas l’imaginaire) renomma ces quantités a + ib en nombres complexes ( pas au sens de difficiles ou compliqués mais au sens de nombres composés).
2 ) Les nombres hypercomplexes : quaternions sont des nombres formés de quatre composantes. Ils sont dus à Hamilton qui a longtemps cherché un nombre formé de trois composantes mais comme il n’a pas trouvé une algèbre satisfaisante, il a eu l’idée d’ajouter une quatrième composante et tout est devenu bon (avec une petite exception : pas de commutativité). Donc l’ordre des termes est important. Forme d’un quaternions : q = a + ib + jc + kd a, b, c et d sont des nombres réels; et i, j, k sont des coefficients imaginaires qui possèdent les propriétés suivantes :
Les coefficients i, j, k sont tels que leurs produits donnent: i² = j² = k ² = i j k = – 1
ij = k = -ji jk = i = -kj ki = j = -ik
Un quaternion est donc composé d’un scalaire et d’un vecteur : q = a + ib + jc + kd Quaternion = Scalaire (le nombre a) + Vecteur (point dans l’espace)
Il existe aussi : • les octonions (appélés aussi les octaves): des nombres formant une algèbre à huit dimensions sur le corps des nombres réels. • Les sédénions qui forment une algèbre réelle de dimensions 16.
Mais tout ce beau monde est hors de ma culture algébrique.
Bon, j’espère que je n’ai pas fait du hors-sujet. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: KGF_dll - nouvelles versions Mer 20 Mar 2019 - 19:53 | |
| Il faut dire qu'on ne s'en sert pas très souvent dans la vie de tous les jours... | |
| | | 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 Mer 20 Mar 2019 - 23:35 | |
| - JL35 a écrit:
- Il faut dire qu'on ne s'en sert pas très souvent dans la vie de tous les jours...
Ça dépend du « on » c-à-d de celui qui s’en sert ou non. Wikipédia : « Les quaternions unitaires fournissent une notation mathématique commode pour représenter l'orientation et la rotation d'objets en trois dimensions. Comparés aux matrices de rotations, ils sont plus stables numériquement et peuvent se révéler plus efficaces. Les quaternions ont été adoptés dans des applications en infographie, robotique, navigation, dynamique moléculaire et la mécanique spatiale des satellites. » Désolé Klaus du hors-sujet , je sors sur la pointe des pieds. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 21 Mar 2019 - 2:52 | |
| Tout ceci est très intéressant. Mais j'en conclus que l'utilisation potentielle des quaternions est très marginale, pour notre commnauté Panoramic. Pour les calculs 3D, les matrices 4x4 de rotation, translation etc suffisent largement, et ces possibilités sont couvertes par les fonctions déjà implémentées. Eventuellement les nombres complexes - si le besoin se fait sentir. Pour le moment, j'en garde la possibilité mais je ne le mais pas en oeuvre.
Si toutefois il manque quelque chose d'important en matière de calcul de matrices, fais-le-moi savoir - j'essayerai de l'implémenter. | |
| | | jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: KGF_dll - nouvelles versions Sam 23 Mar 2019 - 9:26 | |
| Tu pourrais peut-être utiliser quelques-unes de mes procédures pour Delphi : https://sourceforge.net/projects/dmath/Il y a notamment : - les nombres complexes - diverses méthodes de résolution des systèmes d'équations linéaires - les valeurs propres et valeurs singulières - la régression linéaire et non linéaire etc. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 23 Mar 2019 - 11:19 | |
| Merci, Jean_Debord. Je vais regarder cela.
Pour le moment, je travaille à a sécurisation de l'interface entre Panoramic et ma DLL, à l'aide des informations fournies par Jack. Mon problème actuel est le caractère dynamique des différents tableaux ce qui rend difficile voire impossible de mémoriser des adresses de base. La création ou suppression dynamique de variables change la position des tableaux, y compris de la table de symboles elle-même.
Lorsque j'aurai résolu cet aspect, je verrai l'extension des fonctionnalités. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Mar 2019 - 11:38 | |
| J'ai enfin trouvé une parade aux variations dynamiques des adresses de la table des symboles de Panoramic et des adresses des tableaux.
Tout ceci fluctue, selon les créations (DIM et DIM_LOCAL) et suppressions (FREE) de variables et tableaux, car ces commandes DIM, DIM_LOCAL et FREE peuvent intervenir à tout moment.
Or, les tableaux concernés dans Panoramic sont des "arrays dynamiques" ce qui veut dire que non seulement leur longueur change (normal) mais également leur emplacement en mémoire, car en cas d'agrandissement, ces tableaux sont entièrement recopiées dans un espace différent, plus long, et donc toutes les adresses changent.
J'ai été obligé de créer une fonction qui restaure les adresses actuelles à un instant t, juste avant d'appeler une des fonctions de traitement des matrices. C'est lourd, certes, mais ça va marcher bientôt, lorsque j'aurai finalisé ces modules.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 27 Mar 2019 - 16:01 | |
| Nouvelle version: KGF.dll V8.88 du 27/03/2019
Nouveautés: - KGFGrid: lors d'un clic droit dans une cellule éditable, le curseur est maintenant placé dans la zone de saisie de la petite fenêtre de saisie qui s'ouve, juste derrière le dernier caractère présent dans cette zone.
Modules modifiés: KGF.dll
La doc et les sources sont inchangées.
Note: Comme les fonctions de gestion des matrices sont en cours de réfection suite aux derniers éléments découverts, elles restent présentes mais leurs résultats peuvent être aléatoires. | |
| | | 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
| |
| |
| |