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 |
|
|
| Exemple d'une nouvelle version d'un GRID | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mer 18 Avr 2018 - 10:08 | |
| Nouvelle version: on a maintenant une fonction permettant de retourner dans un mémo (qui peut être caché) l'ensemble des attributs d'une cellule, indiquée par ses coordonnées. Pour des raisons évidentes de cohérence de la configuration, il n'y aura pas la fonction symmétrique en écriture, mais on peut avpir ainsi facilement une vue générale du paramétrage d'une cellule. La nouvrlle version est dans mon WebDav dossier DLLs et sur les deux sites iinternet. Le programme de facture intègre cette fonction lors d'un clic sur une cellule active quelconque. Bien sûr, on peut appeler cette fonction pour toutes les cellules, y compris les cellules inactives et/ou invisibles. - Code:
-
' test_KGFGrid_facture.bas
label UserEvent dim res%, KG%, KGtot%, f1$, Types$(6), v$, f, img$ 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" full_space 0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 dll_on "KGF.dll"
KG% = dll_call2("CreateKGFGrid",handle(0),13) ' res% = dll_call5("LocateKGFGrid",KG%,10,100,652,377) : ' si l'on rend la ligne 15 visible res% = dll_call5("LocateKGFGrid",KG%,10,100,652,352) : ' si la ligne 15 est invisible KGtot% = dll_call2("CreateKGFGrid",handle(0),13) res% = dll_call5("LocateKGFGrid",KGtot%,10,490,652,27) ' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC res% = dll_call5("SetGlobalKGFGridDimensions",KG%,15,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KGtot%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KGtot%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KGtot%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KGtot%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KGtot%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KGtot%,1,1,1,1,adr(v$))
f1$ = "$RyC2^$RyC3^*;" : ' calcul du HT par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,4,4,hex("C0C0FF"))
f1$ = "$RyC4^$RyC5^V100^+*V100^/;" : ' calcul du TTC par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,6,6,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,6,6,hex("C0C0FF"))
f1$ = "cR2C2|cR14C2|RScR1C2^V"+str$(KGtot%)+"^@;" : ' calcul du nombre d'unités res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,2,2,adr(f1$))
f1$ = "cR2C4|cR14C4|RScR1C4^V"+str$(KGtot%)+"^@;" : ' calcul du total HT res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,4,4,adr(f1$))
f1$ = "cR2C6|cR14C6|RScR1C6^V"+str$(KGtot%)+"^@;" : ' calcul du total TTC res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,6,6,adr(f1$))
v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,5,5,adr(f)) v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,5,5,adr(f))
on_user_event UserEvent
end
UserEvent: UserEvent() return sub UserEvent() dim_local lig%, col%, 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") then exit_sub 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",KG%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG%,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 message "clic dans KGFGrid ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KG%,lig%,col%,handle(100)) end_sub
Et le résultat, en cliquant dans la ligne 3, colonne 2 (la quatité des raccords de cuivre): Dans les attributs visibles dans le mémo, on distingue, par exemple, la couleur bleue de la bordure ainsi que les épaisseurs. On voit aussi les cellules dépendantes dont les veleurs seront recalculées automatiquement si cette quantité est modifiée: la cellule R4C4 représente le total HT de cette ligne, et la cellule R15C2, située dans une ligne invisible, représente le cumul du nombre d'unités facturées. En cliquant dans la ligne 4 colonne 4 (total HT de cette ligne), on obtient les attributs suivants: On voit la formule de calcul dans sa version "brute" telle que programmée ainsi que sa version "compilée" telle qu'elle sera exécutée. Dans les dépendances, on constate que la cellule R4C6 (total TTC de la ligne) doit être recalculée, ainsi que R15C4 (total HT de la facture dans la ligne 15 qui est invisible). | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mer 18 Avr 2018 - 12:51 | |
| Voici une brève liste de l'état actuel des fonctions de cet objet: - Code:
-
KG% = dll_call2("CreateKGFGrid",handle(dest%),ID%) KG% = dll_call1("CreateKGFGrid",KG%) res% = dll_call5("LocateKGFGrid",KG%,nlig%,x%,y%,w%,h%) res% = dll_call5("SetGlobalKGFGridDimensions",KG%,nlig%,ncol%,cellW%,cellH%) res% = dll_call2("SetGlobalKGFGridColors",KG%,RGB%) res% = dll_call4("SetKGFGridRowRangeHeight",KG%,lig1%,lig2%,par%) res% = dll_call4("SetKGFGridRowRangeVisible",KG%,lig1%,lig2%,act%) act%: 0=ligne invisible 1=ligne visible res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,lig1%,lig2%,par%) res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,col1%,col2%,act%) act%: 0=colonne invisible 1=colonne visible res% = dll_call6("SetKGFGridCellRangeType",KG%,lig1%,lig2%,col1%,col2%,type%) type%: 0=aucun 1=chaîne 2=entier 3=flottant 4=booléen 5=image 6=mémo res% = dll_call6("SetKGFGridCellRangeJustification",KG%,lig1%,lig2%,col1%,col2%,par%) par%: type de justification: aucune (en haut à gauche), en haut à gauche, centré verticalement à gauche, en bas à gauche, en haut centré horizontalement, centré partout, en bas centré horizontalement, en haut à droite, centré verticalement à drote, en bas à droite res% = dll_call6("SetKGFGridCellRangeFormat",KG%,lig1%,lig2%,col1%,col2%,adr(format$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,lig1%,lig2%,col1%,col2%,RGB%) res% = dll_call6("SetKGFGridCellRangeValue",KG%,lig1%,lig2%,col1%,col2%,par%) par% en fonction du type de cellule: valeur%, adr(flottant), adr(fichier$), handle(memo%), ... res% = dll_call6("SetKGFGridCellRangeFontName",KG%,lig1%,lig2%,col1%,col2%,adr(police$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,lig1%,lig2%,col1%,col2%,size%) res% = dll_call6("SetKGFGridCellRangeFontColor",KG%,lig1%,lig2%,col1%,col2%,RGB%) res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,lig1%,lig2%,col1%,col2%,par%) par%: 0=normal 1=gras res% = dll_call6("SetKGFGridCellRangeFontItalic",KG%,lig1%,lig2%,col1%,col2%,par%) par%: 0=normal 1=italique res% = dll_call6("SetKGFGridCellRangeFontUnderline",KG%,lig1%,lig2%,col1%,col2%,par%) par%: 0=normal 1=souligné res% = dll_call6("SetKGFGridCellRangeFontStrikeout",KG%,lig1%,lig2%,col1%,col2%,par%) par%: 0=normal 1=barré res% = dll_call4("SetKGFGridCellType",KG%,lig%,col%,type%) type%: type de cellule 0=inconnu 1=string 2=integer 3=flottant 4=booléen 5=image 6=mémo res% = dll_call4("SetKGFGridCellValue",KG%,lig%,col%,par%) par% en fonction du type de cellule: valeur%, adr(flottant), adr(fichier$), handle(memo%), ... res% = dll_call4("SetKGFGridCellName",KG%,lig%,col%,adr(nom$)) res% = dll_call6("SetKGFGridCellRangeFormula",KG%,lig1%,lig2%,col1%,col2%,adr(formule$)) res% = dll_call6("SetKGFGridCellRangeActive",KG%,lig1%,lig2%,col1%,col2%,act%) act%: 0=cellule inactive 1=cellule active res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG%,lig1%,lig2%,col1%,col2%,act%) act%: 0="valeurs zéro afichées" 1="valeurs zéro non affichées' res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG%,lig1%,lig2%,col1%,col2%,style%) style%: 0=plat 1=3D res% = dll_call6("SetKGFGridCellRangeBorderColor",KG%,lig1%,lig2%,col1%,col2%,RGB%) RGB%: couleur des bordures si style=0 RGB% = hex("BBGGRR") res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG%,lig1%,lig2%,col1%,col2%,LTRB%) largeurs des bordures si style=0 LTRB% = hex("BBRRTTLL") si un des éléments est FF, la valeur est inchangée res% = dll_call4("GetKGFGridCellAtributes",KG%,lig%,col%,hmemo%)
Et voici les méta-codes utilisables dans les formules: - Code:
-
V ce qui suit est une valeur numérique jusqu'au signe ^, placer la valeur dans l'accumulateur jusqu'au signe ^ C ce qui suit est le nom d'une cellule jusqu'au signe ^, placer le contenu sur la pile c ce qui suit est le nom d'une cellule jusqu'au signe ^, placer lig puis col sur la pile $ comme C mais le nom a la structure RyCx avec y=numéro de ligne, x=numéro de colonne x et/ou y peuvent être des constantes ou réellement ces lettres, auquel cas elles seront remplacées par les vraies valeurs lors de la définition | délimiteur de nom de variable dans une fourchette ^ pousser l'accumulateur sur la pile v dépiler les deux derniers éléments de la pile, les utiliser comme lig,col d'une cellule et empiler le contenu de la cellule ATTENTION: si ces deux derniers éléments ne sont pas issus d'un méta-code "c" suivi d'un nom de cellule, alors la cellule source ainsi visée sera bien utilisée, mais la cellule actuelle ne figurera pas dans ses dépendances : +-*/ opération duale: r1:=@sp sp-- r2:=@sp @sp:=r2 oper r1 R range (fourchette): les 4 éléments sur la pile sont les identifiants lig0,col0,lig1,col1 d'un rectangle ce cellules dépiler et placer dans l'identifiant de fourchette ajouter la cellule actuelle dans les dépendances de toutes les cellules de la fourchette lors de l'exécution de R S somme: des cellules de la fourchette identifiée, à empiler dans la pile Z zéro: remettre les cellules de la fourchette identifiée à zéro ; fin de formule sp doit être 0 (pile vide) ou 1 (l'unique élémént de la pile sera copié dans la cellule actuelle) @ déposer une valeur dans un autre KGFGrid. La pile contient: @SP=ID du KGFGrid visé @SP-1=col de cellule (issue de c...^) @SP-2=lig de cellule (issue de c...^) @SP-3=valeur à déposer
Exemple: avec: Prix=(2,9)) Total=(3,9) Resultat=(4,9) Premier=(2,2) Dernier=(4,4) Suite=(5,9) V10^CPrix^*; VV2^V2^V2^V4^RS; cPremier|cDernier|RS; Compilé: V10^V9^V2^v*; V2^V2^V2^V4^RS V2^V2^V4^V4^RS;
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mer 18 Avr 2018 - 21:40 | |
| Nouvelle version: j'avais oublié une fonction de suppression d'un tel objet. Voilà qui est corrigé. La nouvelle version est dans mon WebDav dossier DLLs et sur les deux sites internet. Voici l'ancien programme de démo qui montre la création détaillée d'un KGFGrid, puis sa sauvegarde dans un fichier. Ensuite, il va supprimer l'objet complètement, avant de le restaurer à partir de la sauvegarde: - Code:
-
' test_KGFGrid.bas
label UserEvent dim res%, KG%, f1$, Types$(6), v$, f, img$ 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" picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1 memo 2 : top 2,10 : left 2,10 : width 2,400 : bar_both 2 dll_on "KGF.dll"
KG% = dll_call2("CreateKGFGrid",handle(0),13) : ' ok res% = dll_call2("SetGlobalKGFGridColors",KG%,hex("FFFF")) : ' ok res% = dll_call5("LocateKGFGrid",KG%,10,100,400,300) : ' ok res% = dll_call5("SetGlobalKGFGridDimensions",KG%,15,20,50,25) : ' ok res% = dll_call4("SetKGFGridRowRangeHeight",KG%,2,4,45) : ' ok res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,7,10,20) : ' ok res% = dll_call6("SetKGFGridCellRangeType",KG%,2,4,2,5,2) : ' ok res% = dll_call6("SetKGFGridCellRangeType",KG%,5,7,2,5,1) : ' ok res% = dll_call6("SetKGFGridCellRangeType",KG%,8,9,2,5,3) : ' ok res% = dll_call6("SetKGFGridCellRangeType",KG%,9,9,6,6,3) : ' ok res% = dll_call6("SetKGFGridCellRangeType",KG%,5,8,6,6,4) : ' ok res% = dll_call6("SetKGFGridCellRangeType",KG%,2,4,6,6,5) : ' ok res% = dll_call6("SetKGFGridCellRangeType",KG%,3,3,1,1,6) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,2,4,2,5,5) : ' ok res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,4,2,5,hex("FF8080")) : ' ok res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,2,2,4,hex("8080FF")) : ' ok res% = dll_call6("SetKGFGridCellRangeColor",KG%,3,3,2,2,hex("8080FF")) : ' ok res% = dll_call6("SetKGFGridCellRangeColor",KG%,3,3,4,4,hex("8080FF")) : ' ok res% = dll_call6("SetKGFGridCellRangeColor",KG%,4,4,2,4,hex("8080FF")) : ' ok
res% = dll_call6("SetKGFGridCellRangeJustification",KG%,2,2,2,2,1) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,3,3,2,2,2) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,4,4,2,2,3) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,2,2,3,3,4) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,4,4,3,3,6) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,2,2,4,4,7) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,3,3,4,4,8) : ' ok res% = dll_call6("SetKGFGridCellRangeJustification",KG%,4,4,4,4,9) : ' ok f1$ = "%d €" res% = dll_call6("SetKGFGridCellRangeFormat",KG%,2,4,2,5,adr(f1$)) : ' ok
res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,2,4,17) : ' ok res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,2,4,0-23) : ' ok res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,2,4,123) : ' ok res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,4,5,5,0-12) : ' ok v$ = "Salut" res% = dll_call6("SetKGFGridCellRangeValue",KG%,5,5,2,4,adr(v$)) : ' ok v$ = "les" res% = dll_call6("SetKGFGridCellRangeValue",KG%,6,6,2,4,adr(v$)) : ' ok v$ = "copains" res% = dll_call6("SetKGFGridCellRangeValue",KG%,7,7,2,4,adr(v$)) : ' ok f = pi res% = dll_call6("SetKGFGridCellRangeValue",KG%,8,8,2,4,adr(f)) : ' ok
img$ = "Android.bmp" res% = dll_call1("LoadAnyImageFile",adr(img$)) res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,6,6,0) : ' ok img$ = "marche_1_1_1_2.jpg" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,6,6,adr(img$)) : ' ok img$ = "crane.bmp" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,6,6,adr(img$)) : ' ok
font_names_load 2 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,1,1,handle(2)) : ' ok clear 2
res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,5,5,2,4,1) : ' ok res% = dll_call6("SetKGFGridCellRangeFontItalic",KG%,5,5,2,4,1) : ' ok
v$ = "Arial Black" res% = dll_call6("SetKGFGridCellRangeFontName",KG%,6,6,2,4,adr(v$)) : ' ok res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,6,6,2,4,12) : ' ok
res% = dll_call6("SetKGFGridCellRangeFontColor",KG%,7,7,2,4,hex("FF0000")) : ' ok
v$ = "Prix" res% = dll_call4("SetKGFGridCellName",KG%,9,2,adr(v$)) : ' ok v$ = "Total" res% = dll_call4("SetKGFGridCellName",KG%,9,3,adr(v$)) : ' ok v$ = "Resultat" res% = dll_call4("SetKGFGridCellName",KG%,9,4,adr(v$)) : ' ok v$ = "Premier" res% = dll_call4("SetKGFGridCellName",KG%,2,2,adr(v$)) : ' ok v$ = "Dernier" res% = dll_call4("SetKGFGridCellName",KG%,4,4,adr(v$)) : ' ok v$ = "Suite" res% = dll_call4("SetKGFGridCellName",KG%,9,5,adr(v$)) : ' ok
f1$ = "V10^CPrix^*;" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,9,9,3,3,adr(f1$)) : ' ok f1$ = "V2^V2^V2^V4^RS;" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,9,9,4,4,adr(f1$)) : ' ok f1$ = "cPremier|cDernier|RS;" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,9,9,5,5,adr(f1$)) : ' ok f1$ = "CTotal^V2^*;" res% = dll_call6("SetKGFGridCellRangeFormula",KG%,9,9,6,6,adr(f1$)) : ' ok
f = 23.45 res% = dll_call6("SetKGFGridCellRangeValue",KG%,9,9,2,2,adr(f)) : ' ok
message "Les lignes 2 et 3 vont disparaître..." res% = dll_call4("SetKGFGridRowRangeVisible",KG%,2,3,0) : ' ok message "Les lignes 2 et 3 on disparu, et vont réapparaître..." res% = dll_call4("SetKGFGridRowRangeVisible",KG%,2,3,1) : ' ok
message "Les colonnes 4 et 5 vont disparaître..." res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,4,5,0) : ' ok message "Les lignes 4 et 5 on disparu, et vont réapparaître..." res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,4,5,1) : ' ok
f1$ = "KGFGrid_backup.txt" res% = dll_call2("SaveKGFGridToFile",KG%,adr(f1$)) : ' ok if res%<0 message "Erreur en sauvegarde du KGFGrid" else message "Le KGFGrid est sauvegardé dans "+f1$ end_if
on_user_event UserEvent
message "On va supprimer le KGFGrid..." KG% = dll_call1("DeleteKGFGrid",KG%) message "Supprimé" KG% = dll_call2("CreateKGFGrid",handle(0),13) : ' ok f1$ = "KGFGrid_backup.txt" res% = dll_call2("LoadKGFGridFromFile",KG%,adr(f1$)) message "Recréé à partir de la sauvegarde"
end
UserEvent: UserEvent() return sub UserEvent() dim_local lig%, col%, 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") then exit_sub 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",KG%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG%,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 message "clic dans KGFGrid ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG%,lig%,lig%,col%,col%,1-res%) : ' ok end_if end_sub
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mar 24 Avr 2018 - 11:46 | |
| Rapport d'étape: Je travaille toujours sur l'objet KGFGrid. Les fonctions de calcul automatique marchent bien, y compris entre plusieurs objets KGFGrid. Mais il faut les coder en notation polonaise inverse ce qui peut être non intuitif pou certains (ceux qui ont eu le HP35 vont se régaler...). Mais je travaille sur une façon plus "intuitive" de coder ces formules, et j'ai réussi à mettre au point un interpréteur de formules arithmétiques dont j'ai trouvé sur le net de très anciennes sources (datant de la période entre 1993 et 1997). Je les ai adaptées à KGF.dll et j'ai étendu les fonctionnalités de sorte à pouvoir gérer les cellules de plusieurs KGFGrid. Tout cela marche maintenant, avec de très bonnes performances. Alors, maintenant, je suis en train d'y intégrer la gestion des dépendances entre les cellules, de sorte à avoir les actualisations automatiques telles qu'on les a aijourd'hui. Les deux types de formules (notation anti-polonaise et expression arithmétique) existeront simultanément. Cepdendant, pour chaque objet KGFGrid particulier, le choix du format de la formule est fait globalement et ne devra pas être modifié en cours d'existence du tableau. Je vous donne un avant-goût de ce nouveau type de formules. Dans le programme de démo de facture ci-dessus, on a deux objets KGFGrid: le premier est le tableau de 15 lignes dont la 15ème (les totaux) est invisible, et le second est un autre tableau contenant juste une seule ligne reprenant les titaux de la 15ème ligne du premier tableau. Alors, la formule writecell(grid(1)+CellValue(3,6),grid(2)+cellref(1,3))installée dans une des cellules du premier tableau fait ceci: - prendre le contenu de la cellule (3,6) du tableau 1 - copier cette valeur dans la cellule (1,3) du tableau 2 On disposera dans cette version des formules des opérations suivantes: + - * / ^DIV MODconstantes prédéfinies: PIet les fonctions intrinsèques suivantes: COS, SIN, SINH, COSH, TAN, COTAN, ARCTAN, ARG, EXP, LN, LOG10, LOG2, LOGN, SQRT, SQR, POWER, INTPOWER, MIN, MAX, ABS, TRUNC, INT, CEIL, FLOOR, HEAV (heav(x) is =1 for x>0 and =0 for x<=0), SIGN (sign(x) is 1 for x>1, 0 for x=0, -1 for x<0), ZERO (zero(x) is 0 for x=0, 1 for x<>0), PH (ph(x) = x - 2*pi*round(x/2/pi)) RND (rnd(x) = int(x) * Random) RANDOM (random(X) = Random; the argument X is not used) ainsi que des variables prééfinies: A, B, C, D, E, X, Y, TOn peut même définir ses propres variables avec des noms longs. On a des parenthèses (imbrication jusqu'à 20 parenthèses !) Fonctions spécifiques pour lien avec KGFGrid: CELLVALUE, CELLREF, CELLSUM, GRID, WRITECELLLa longueur des expressione n'est pas limitée. Cette version est disponible sur mon WebDav, dossier DLLs, et sur les deux sites internet. Et voici une version du programme de facturation pemettant de tester ces expressions. Ce n'est pas encore présent dans les formules de calcul des deux objets KGFGrid, mais on peut évaluer une formule directement, saisie dans un EDIT en bas de la fenêtre. Une formule par defaut est proposée, et dans le source, ligne 23, ul y en a une autre. Un bouton permet d'exécuter la formule et d'observer le résultat: - Code:
-
' test_KGFGrid_facture.bas
label UserEvent, TestParse
dim res%, KG%, KGtot%, f1$, Types$(6), v$, f, img$, expression$ 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" full_space 0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 alpha 201 : top 201,540 : left 201,10 : caption 201,"Ligne:" spin 202 : top 202,540 : left 202,60 : width 202,80 : min 202,2 : max 202,15 : position 202,2 alpha 203 : top 203,540 : left 203,170 : caption 203,"Colonne:" spin 204 : top 204,540 : left 204,220 : width 204,80 : min 204,2 : max 204,7 : position 204,2 alpha 205 : top 205,570 : left 205,10 : caption 205,"Formule:" edit 206 : top 206,570 : left 206,70 : width 206,300 ' text 206,"Cellsum(CellRef(2,2),CellRef(14,2))" text 206,"writecell(grid(1)+CellValue(3,6),grid(2)+cellref(1,3))" button 207 : top 207,570 : left 207,390 : caption 207,"Parse" : on_click 207,TestParse memo 208 : hide 208 : bar_both 208 dll_on "KGF.dll"
KG% = dll_call2("CreateKGFGrid",handle(0),13) ' res% = dll_call5("LocateKGFGrid",KG%,10,100,652,377) : ' si l'on rend la ligne 15 visible res% = dll_call5("LocateKGFGrid",KG%,10,100,652,352) : ' si la ligne 15 est invisible KGtot% = dll_call2("CreateKGFGrid",handle(0),17) res% = dll_call5("LocateKGFGrid",KGtot%,10,490,652,27) ' liens pour les formules item_add 208,str$(KG%) item_add 208,str$(KGtot%) ' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC res% = dll_call5("SetGlobalKGFGridDimensions",KG%,15,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KGtot%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KGtot%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KGtot%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KGtot%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KGtot%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KGtot%,1,1,1,1,adr(v$))
f1$ = "$RyC2^$RyC3^*;" : ' calcul du HT par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,4,4,hex("C0C0FF"))
f1$ = "$RyC4^$RyC5^V100^+*V100^/;" : ' calcul du TTC par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,6,6,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,6,6,hex("C0C0FF"))
f1$ = "cR2C2|cR14C2|RScR1C2^V"+str$(KGtot%)+"^@;" : ' calcul du nombre d'unités res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,2,2,adr(f1$))
f1$ = "cR2C4|cR14C4|RScR1C4^V"+str$(KGtot%)+"^@;" : ' calcul du total HT res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,4,4,adr(f1$))
f1$ = "cR2C6|cR14C6|RScR1C6^V"+str$(KGtot%)+"^@;" : ' calcul du total TTC res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,6,6,adr(f1$))
v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,5,5,adr(f)) v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,5,5,adr(f))
on_user_event UserEvent
end
UserEvent: UserEvent() return sub UserEvent() dim_local lig%, col%, id%, type%, res$, f, KGclick% if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then exit_sub id% = bin_and(user_event_wparam,hex("0000FFFF")) col% = user_event_lparam/65536 lig% = bin_and(user_event_lparam,hex("0000FFFF")) select id% case 13 KGclick% = KG% case 17 KGclick% = KGtot% end_select ' 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",KGclick%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KGclick%,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 message "clic dans KGFGrid ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KGclick%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KGclick%,lig%,col%,handle(100)) end_sub
TestParse: ' expression$ = "CellValue(CellRow,CellCol)" expression$ = text$(206) res% = dll_call4("TestParser",handle(208),adr(expression$),position(202),position(204)) return
Note supplémentaire:Je rendrai l'accès à ce type de formules accessible via une fonction spécifique, indépendante des objets KGFGrid, un peu à l'image de l'actuelle fonction TestParser. Ceci permettra d'avoir des formules de calcul dans n'importe quelle application, et même d'y accéder un KGFGrid ! | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mar 24 Avr 2018 - 18:50 | |
| bjr klaus ça a l’air intéressante je vais tenter de mettre ça dans mon programme TourD à la place du grid de panoramic merci a+ | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mar 24 Avr 2018 - 19:07 | |
| | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Ven 27 Avr 2018 - 20:59 | |
| bsr
Heuuu!!!!!!!!! Je n'ai pas trouvé KgfGrid dans kgf.dll et ni dans ton site aurais-je raté quelque chose? ou se trouve ta librairie pour la tetecharger?
j'ai telecharger kgf le 24 avr | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Ven 27 Avr 2018 - 21:16 | |
| C'est dans KGF.dll. La doc n'est pas encore faite - c'est en cours. Mais j'ai publié une liste synthétique des fonctions, et il y a le programme de démo. Voici celle liste synthétique à nouveau: - Code:
-
//KG% = dll_call5("CreateKGFGrid",handle(dest%),ID%) //KG% = dll_call1("DeleteKGFGrid",KG%) //res% = dll_call5("LocateKGFGrid",KG%,nlig%,x%,y%,w%,h%) //res% = dll_call5("SetGlobalKGFGridDimensions",KG%,nlig%,ncol%,cellW%,cellH%) //res% = dll_call2("SetGlobalKGFGridColors",KG%,RGB%) //res% = dll_call4("SetKGFGridRowRangeHeight",KG%,lig1%,lig2%,par%) //res% = dll_call4("SetKGFGridRowRangeVisible",KG%,lig1%,lig2%,act%) // act%: 0=ligne invisible 1=ligne visible //res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,lig1%,lig2%,par%) //res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,col1%,col2%,act%) // act%: 0=colonne invisible 1=colonne visible //res% = dll_call6("SetKGFGridCellRangeType",KG%,lig1%,lig2%,col1%,col2%,type%) // type%: 0=aucun 1=chaîne 2=entier 3=flottant 4=booléen 5=image 6=mémo //res% = dll_call6("SetKGFGridCellRangeJustification",KG%,lig1%,lig2%,col1%,col2%,par%) // par%: type de justification: // aucune (en haut à gauche), // en haut à gauche, centré verticalement à gauche, en bas à gauche, // en haut centré horizontalement, centré partout, en bas centré horizontalement, // en haut à droite, centré verticalement à drote, en bas à droite //res% = dll_call6("SetKGFGridCellRangeFormat",KG%,lig1%,lig2%,col1%,col2%,adr(format$)) //res% = dll_call6("SetKGFGridCellRangeColor",KG%,lig1%,lig2%,col1%,col2%,RGB%) //res% = dll_call6("SetKGFGridCellRangeValue",KG%,lig1%,lig2%,col1%,col2%,par%) // par% en fonction du type de cellule: valeur%, adr(flottant), adr(fichier$), handle(memo%), ... //res% = dll_call6("SetKGFGridCellRangeFontName",KG%,lig1%,lig2%,col1%,col2%,adr(police$)) //res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,lig1%,lig2%,col1%,col2%,size%) //res% = dll_call6("SetKGFGridCellRangeFontColor",KG%,lig1%,lig2%,col1%,col2%,RGB%) //res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,lig1%,lig2%,col1%,col2%,par%) // par%: 0=normal 1=gras //res% = dll_call6("SetKGFGridCellRangeFontItalic",KG%,lig1%,lig2%,col1%,col2%,par%) // par%: 0=normal 1=italique //res% = dll_call6("SetKGFGridCellRangeFontUnderline",KG%,lig1%,lig2%,col1%,col2%,par%) // par%: 0=normal 1=souligné //res% = dll_call6("SetKGFGridCellRangeFontStrikeout",KG%,lig1%,lig2%,col1%,col2%,par%) // par%: 0=normal 1=barré //res% = dll_call4("SetKGFGridCellType",KG%,lig%,col%,type%) // type%: type de cellule 0=inconnu 1=string 2=integer 3=flottant 4=booléen 5=image 6=mémo //res% = dll_call4("SetKGFGridCellValue",KG%,lig%,col%,par%) // par% en fonction du type de cellule: valeur%, adr(flottant), adr(fichier$), handle(memo%), ... //res% = dll_call4("SetKGFGridCellName",KG%,lig%,col%,adr(nom$)) //res% = dll_call6("SetKGFGridCellRangeFormula",KG%,lig1%,lig2%,col1%,col2%,adr(formule$)) //res% = dll_call6("SetKGFGridCellRangeActive",KG%,lig1%,lig2%,col1%,col2%,act%) // act%: 0=cellule inactive 1=cellule active //res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG%,lig1%,lig2%,col1%,col2%,act%) // act%: 0="valeurs zéro afichées" 1="valeurs zéro non affichées' //res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG%,lig1%,lig2%,col1%,col2%,style%) // style%: 0=plat 1=3D //res% = dll_call6("SetKGFGridCellRangeBorderColor",KG%,lig1%,lig2%,col1%,col2%,RGB%) // RGB%: couleur des bordures si style=0 // RGB% = hex("BBGGRR") //res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG%,lig1%,lig2%,col1%,col2%,LTRB%) // largeurs des bordures si style=0 // LTRB% = hex("BBRRTTLL") si un des éléments est FF, la valeur est inchangée // res% = dll_call4("GetKGFGridCellAtributes",KG%,lig%,col%,hmemo%) // res% = dll_call2("SaveKGFGridToFile(KG%,adr(fichier$)) // res% = dll_call2("LoadKGFGridFromFile(KG%,adr(fichier$))
Regarde les deux démos: - Code:
-
' test_KGFGrid_avec_LoadFromFile.bas
label UserEvent dim res%, KG%, f1$, Types$(6), v$, f, img$ 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" picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1 memo 2 : top 2,10 : left 2,10 : width 2,400 : bar_both 2 dll_on "KGF.dll"
KG% = dll_call2("CreateKGFGrid",handle(0),13) : ' ok
f1$ = "KGFGrid_backup.txt" res% = dll_call2("LoadKGFGridFromFile",KG%,adr(f1$)) message str$(res%)
on_user_event UserEvent
end
UserEvent: UserEvent() return sub UserEvent() dim_local lig%, col%, 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") then exit_sub 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",KG%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG%,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 message "clic dans KGFGrid ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG%,lig%,lig%,col%,col%,1-res%) : ' ok end_if end_sub
et - Code:
-
' test_KGFGrid_facture.bas
label UserEvent, TestParse
dim res%, KG%, KGtot%, f1$, Types$(6), v$, f, img$, expression$ 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" full_space 0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 alpha 201 : top 201,540 : left 201,10 : caption 201,"Ligne:" spin 202 : top 202,540 : left 202,60 : width 202,80 : min 202,2 : max 202,15 : position 202,2 alpha 203 : top 203,540 : left 203,170 : caption 203,"Colonne:" spin 204 : top 204,540 : left 204,220 : width 204,80 : min 204,2 : max 204,7 : position 204,2 alpha 205 : top 205,570 : left 205,10 : caption 205,"Formule:" edit 206 : top 206,570 : left 206,70 : width 206,300 ' text 206,"Cellsum(CellRef(2,2),CellRef(14,2))" text 206,"writecell(grid(1)+CellValue(3,6),grid(2)+cellref(1,3))" button 207 : top 207,570 : left 207,390 : caption 207,"Parse" : on_click 207,TestParse memo 208 : hide 208 : bar_both 208 dll_on "KGF.dll"
KG% = dll_call2("CreateKGFGrid",handle(0),13) ' res% = dll_call5("LocateKGFGrid",KG%,10,100,652,377) : ' si l'on rend la ligne 15 visible res% = dll_call5("LocateKGFGrid",KG%,10,100,652,352) : ' si la ligne 15 est invisible KGtot% = dll_call2("CreateKGFGrid",handle(0),17) res% = dll_call5("LocateKGFGrid",KGtot%,10,490,652,27) ' liens pour les formules item_add 208,str$(KG%) item_add 208,str$(KGtot%) ' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC res% = dll_call5("SetGlobalKGFGridDimensions",KG%,15,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KGtot%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KGtot%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KGtot%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KGtot%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KGtot%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KGtot%,1,1,1,1,adr(v$))
f1$ = "$RyC2^$RyC3^*;" : ' calcul du HT par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,4,4,hex("C0C0FF"))
f1$ = "$RyC4^$RyC5^V100^+*V100^/;" : ' calcul du TTC par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,6,6,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,6,6,hex("C0C0FF"))
f1$ = "cR2C2|cR14C2|RScR1C2^V"+str$(KGtot%)+"^@;" : ' calcul du nombre d'unités res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,2,2,adr(f1$))
f1$ = "cR2C4|cR14C4|RScR1C4^V"+str$(KGtot%)+"^@;" : ' calcul du total HT res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,4,4,adr(f1$))
f1$ = "cR2C6|cR14C6|RScR1C6^V"+str$(KGtot%)+"^@;" : ' calcul du total TTC res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,6,6,adr(f1$))
v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,5,5,adr(f)) v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,5,5,adr(f))
on_user_event UserEvent
end
UserEvent: UserEvent() return sub UserEvent() dim_local lig%, col%, id%, type%, res$, f, KGclick% if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then exit_sub id% = bin_and(user_event_wparam,hex("0000FFFF")) col% = user_event_lparam/65536 lig% = bin_and(user_event_lparam,hex("0000FFFF")) select id% case 13 KGclick% = KG% case 17 KGclick% = KGtot% end_select ' 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",KGclick%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KGclick%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KGclick%,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 message "clic dans KGFGrid ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KGclick%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KGclick%,lig%,col%,handle(100)) end_sub
TestParse: ' expression$ = "CellValue(CellRow,CellCol)" expression$ = text$(206) res% = dll_call4("TestParser",handle(208),adr(expression$),position(202),position(204)) return
| |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Ven 27 Avr 2018 - 21:47 | |
| ok voila le pourquoi je ne trouvai pas les commande dans la doc merci pour cette info bonsoir | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Sam 28 Avr 2018 - 21:47 | |
| Nouvelle version de l'objet KGFGrid. KGF.dll est à jour sur le WebDav dossier DLLs et sur les deux sites internet.
Cette version apporte une amélioration visuelle. Si l'on a défini un KGFGrid dont le contenu dépasse le rectangle de visualisation, des ascenseurs apparaissent et permettent de déplacer la grille à volonte. Mais si l'on clique dans une cellle qui n'est que partiellement visible, le clic et la celule sont bien identifiées, mais l'affichage est inchangé.
Maintenant, l'affichage est automatiquement déplacé de sorte à placer la cellule entière dans le cadre de visualisation, aussi bien horizontalement que verticalement. Ceci apporte un meilleur confort d'utilisation mais ne change rien en programmation Panoramic. Tout se joue à l'intérieur de KGF.dll. Donc, pas de nouvelles versions des programmes de démo. | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Documentation sur KFGRID Jeu 12 Juil 2018 - 13:38 | |
| Bonjour. J'ai essayé le Nouveau Grid, KFGRID, et je le trouve vraiment formidable. Y aurait il quelque part une Documentation. Il y a un fichier HLP, que je n'arrive pas à Lire sur Seven Merci beaucoup Lepetitmarocain | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Ven 13 Juil 2018 - 10:32 | |
| | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Grid KGF Mar 24 Juil 2018 - 16:39 | |
| bonjour je persiste à demander s'il y a un tuto du KFGRID, pour expliquer toutes les zones des différents appel dll_call6("SET...rangefontnam,Kg% dll_call4("Set... rangewith", KGtot%J’espère que ma demande est compréhensible. vous me direz qu'il faudrait que je lises tout pour trouver, mais je pense qu'il doit y avoir des âmes charitables Merci par avance lepetitmarocain : | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: KGFGRID Mar 11 Déc 2018 - 18:05 | |
| Bonjour Klaus.
Depuis quelques temps, en regardant tes exemples, j'essaie de créer un Grid simple en prenant ton
KGFgrid comme exemple.
J'y arrive mais en tâtonnant
Peux tu me dire STP à quel endroit nous pouvons avoir les explications pour avoir toutes les fonctions.
Y a t-il un PDF ou un Word.
Merci pour ta réponse.
Lepetitmarocain | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mar 11 Déc 2018 - 18:21 | |
| Salut Lepetitmarocain ! tu peux trouver toute l'aide sur KGF dans ce lien. J'espère que Klaus va nous redonner de ses nouvelles bientôt... | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: aide sur KGFGRID Jeu 13 Déc 2018 - 14:00 | |
| Bonjour Minibug.
Merci pour ta réponse, mais je ne trouve rien concernant le KGFGRID.
Vois je mal ou il n'y a rien?
Bonne journée à tous
Lepetitmarocain | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Jeu 13 Déc 2018 - 17:36 | |
| Hummm, tu as raison, je viens de passer toutes les fonctions du site et il n'y a rien sur le GRID. Attendons de revoir passer Klaus sur le site pour lui demander. Je pense que c'est la meilleure solution... | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: KFGRID Mer 19 Déc 2018 - 20:21 | |
| Bonsoir Minibug et bonsoir à tous
Je viens de trouver à la date du 27 avril, une explication mise par Klaus pour l'explication du KFGRID.
J' ai donc réussi à remplir un KFGRID avec couleurs etc etc ...,
et il ne me manque plus que la possibilité de saisie dans un KFGRID.
Merci pour ta réaction rapide.
Bonne soirée à tous
Lepetitmarocain | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Ecrire dans un KGFgrid directement Mer 16 Jan 2019 - 18:11 | |
| Bonjour à tous.
Tout d'abord je vous souhaite une très bonne Année 2019.
Du Bonheur et de L'amour.
Je suis toujours en attente de modifs pour le KGFGRID, afin de pouvoir écrire directement sur celui ci, (par exemple pour mettre un
code de suppression de ligne ou ajouter une ligne en plus), et de pouvoir le lire ligne par ligne.
Merci de toutes vos réponses qui pourront servir à toutes & à tous.
Lepetitmarocain | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Mer 16 Jan 2019 - 18:23 | |
| bonjour et bonne année a toi aussi lepetitmarocain. Pour ce qui est de KGFGRID, tu n'as pas de chance, car Klaus n'est plus vraiment présent actuellement sur le forum. Il faut dire qu'il a eu pas mal de soucis ces derniers temps ! Espérons que tout se passe bien pour lui. Peut être aura t-on des nouvelles bientôt... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Dim 27 Jan 2019 - 0:40 | |
| Klaus,
Comme tu es de retour et que tes outils sont opérationnels, tu pourrai peut être répondre aux différentes questions posés sur ce fil de discussion par lepetitmarocain au sujet de ta dernière réalisation KGFGRID... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Dim 27 Jan 2019 - 2:28 | |
| Oh la la, c'est vieux, ça ... Je vais regarder cela. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Dim 27 Jan 2019 - 11:10 | |
| A l'attention de lepetitmarocain: Il n'y a pas encore de documentation détaillée des fonctions de cet objet. Mais la documentation est contenue, de façon synthétique, dans ce fil de discussion: https://panoramic.1fr1.net/t5736p25-exemple-d-une-nouvelle-version-d-un-gridainsi que des programmes de démo assez complets et parlants. Je regrette de ne rien avoir de plus "accessible" à l'heure actuelle - j'ai été "descendu en plein vol" l'année dernière, et je ne reprends que petit à petit. Cependant, l'objet et les fonctions associées sont opérationnels, et c'est spectaclaire ! | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: KGFGRID Lun 28 Jan 2019 - 15:47 | |
| Bonjour KLAUS.
Merci pour ta réponse.
J' ai copié le programme qui permet de visualiser l'ensemble des attributs d'une cellule.
Mais il ne se passe rien lorsque je clique sur une ligne....
Est ce normal ou ne fais je pas ce qu'il faut.
Merci par avance.
Bien entendu lorsque tu auras du temps....
Lepetitmarocain | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Exemple d'une nouvelle version d'un GRID Lun 28 Jan 2019 - 15:58 | |
| Je viens de tester cela - tout marche bien, chez moi. Par sécurité, je te remets le programme (que je n'ai pas modifié !): - Code:
-
' test_KGFGrid_facture.bas
label UserEvent dim res%, KG%, KGtot%, f1$, Types$(6), v$, f, img$ 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" full_space 0 memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 dll_on "KGF.dll"
KG% = dll_call2("CreateKGFGrid",handle(0),13) ' res% = dll_call5("LocateKGFGrid",KG%,10,100,652,377) : ' si l'on rend la ligne 15 visible res% = dll_call5("LocateKGFGrid",KG%,10,100,652,352) : ' si la ligne 15 est invisible KGtot% = dll_call2("CreateKGFGrid",handle(0),13) res% = dll_call5("LocateKGFGrid",KGtot%,10,490,652,27) ' colonnes: ' Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC res% = dll_call5("SetGlobalKGFGridDimensions",KG%,15,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call4("SetKGFGridRowRangeVisible",KG%,15,15,0) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,1,6,hex("FFFFFF")) res% = dll_call5("SetGlobalKGFGridDimensions",KGtot%,1,7,50,25) res% = dll_call4("SetKGFGridColumnRangeVisible",KGtot%,7,7,0) : ' servira pour les liens vers une autre table res% = dll_call6("SetKGFGridCellRangeColor",KGtot%,1,11,1,6,hex("C0C0FF")) v$ = "Arial" res% = dll_call6("SetKGFGridCellRangeFontName",KG%,1,15,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,1,15,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,2,6,7) res% = dll_call6("SetKGFGridCellRangeFontName",KGtot%,1,1,1,6,adr(v$)) res% = dll_call6("SetKGFGridCellRangeFontSize",KGtot%,1,1,1,6,12) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,1,6,2) res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,2,6,7)
res% = dll_call6("SetKGFGridCellRangeType",KG%,1,1,1,6,1) : ' ligne des titres de colonnes res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeFontBold",KG%,1,1,1,6,1) res% = dll_call6("SetKGFGridCellRangeActive",KG%,1,1,1,6,0) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,1,1,200) : ' libellé res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,1,1,200) v$ = "Libellé" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,1,1,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,2,2,80) : ' quantité res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,2,2,80) v$ = "Qté" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,2,2,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,3,3,100) : ' prix unitaire res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,3,3,100) v$ = "Prix U." res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,3,3,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,4,4,100) : ' total HT res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,4,4,100) v$ = "Total HT" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,4,4,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,5,5,70) : ' taux TVA res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,5,5,70) v$ = "Tx TVA" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,5,5,adr(v$)) res% = dll_call4("SetKGFGridColumnRangeWidth",KG%,6,6,100) : ' total TTC res% = dll_call4("SetKGFGridColumnRangeWidth",KGtot%,6,6,100) v$ = "Total TTC" res% = dll_call6("SetKGFGridCellRangeValue",KG%,1,1,6,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KG%,2,15,2,7,3) : ' colonnes de valeurs res% = dll_call6("SetKGFGridCellRangeBorderColor",KG%,2,15,2,2,hex("FF0000")) : ' colonne des quantités: bordures bleues res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG%,2,15,2,2,hex("FF03FF03")) : ' largeurs des bordures colonne des quantités res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG%,2,15,2,7,1) : ' ne pas afficher les valeurs zéro res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,1,1,1) : ' colonne des libéllées res% = dll_call6("SetKGFGridCellRangeType",KGtot%,1,1,2,7,3) : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeActive",KG%,15,15,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux v$ = "Total" res% = dll_call6("SetKGFGridCellRangeValue",KG%,15,15,1,1,adr(v$)) res% = dll_call6("SetKGFGridCellRangeActive",KGtot%,1,11,1,6,0) : ' ligne des totaux res% = dll_call6("SetKGFGridCellRangeValue",KGtot%,1,1,1,1,adr(v$))
f1$ = "$RyC2^$RyC3^*;" : ' calcul du HT par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,4,4,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,4,4,hex("C0C0FF"))
f1$ = "$RyC4^$RyC5^V100^+*V100^/;" : ' calcul du TTC par ligne res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,6,6,adr(f1$)) res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,6,6,hex("C0C0FF"))
f1$ = "cR2C2|cR14C2|RScR1C2^V"+str$(KGtot%)+"^@;" : ' calcul du nombre d'unités res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,2,2,adr(f1$))
f1$ = "cR2C4|cR14C4|RScR1C4^V"+str$(KGtot%)+"^@;" : ' calcul du total HT res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,4,4,adr(f1$))
f1$ = "cR2C6|cR14C6|RScR1C6^V"+str$(KGtot%)+"^@;" : ' calcul du total TTC res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,6,6,adr(f1$))
v$ = "Robinets de lavabo" res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,1,1,adr(v$)) : ' chargement 1er produit f = 3 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,2,2,adr(f)) f = 17.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,2,2,5,5,adr(f)) v$ = "Parquet chêne" res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,1,1,adr(v$)) : ' chargement 2ème produit f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,2,2,adr(f)) f = 50 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,3,3,adr(f)) f = 20 res% = dll_call6("SetKGFGridCellRangeValue",KG%,3,3,5,5,adr(f))
v$ = "Raccords cuivre" res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,1,1,adr(v$)) : ' chargement 3ème produit f = 12 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,2,2,adr(f)) f = 2.5 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,3,3,adr(f)) f = 10 res% = dll_call6("SetKGFGridCellRangeValue",KG%,4,4,5,5,adr(f))
on_user_event UserEvent
end
UserEvent: UserEvent() return sub UserEvent() dim_local lig%, col%, 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") then exit_sub 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",KG%,lig%,col%) : ' ok select type% case 0: ' Inconnu res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 1: ' Chaîne res$ = string$(255," ") res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(res$)) : ' ok res$ = trim$(res$) case 2: ' Entier res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0) : ' ok res$ = str$(res%) case 3: ' flottant res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(f)) : ' ok res$ = str$(f) case 4: ' Booleen res% = dll_call4("GetKGFGridCellValue",KG%,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 message "clic dans KGFGrid ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+" valeur="+res$ if type%=4 res% = dll_call6("SetKGFGridCellRangeValue",KG%,lig%,lig%,col%,col%,1-res%) : ' ok end_if res% = dll_call4("GetKGFGridCellAtributes",KG%,lig%,col%,handle(100)) end_sub Et je te conseille de recharger KGF.dll à partir de mon site internet (pas le WebDav !) pour avoir la bonne version de la DLL. Pour cela, il suffit de cliquer sur l'icône à gauche du libellé " KGF.dll (en format ZIP)" dans ma signature. Notons que la version actuelle (datée de ce jour) contient une seule modification par rapport à la version précédente, et elle concerne la fonction SaveStringList, sans aucun rapport avec KGFGrig qui est inchangé. EDIT Le WebDav est à jour également. Donc, c'est au choix... Bonne chance ! | |
| | | Contenu sponsorisé
| Sujet: Re: Exemple d'une nouvelle version d'un GRID | |
| |
| | | | Exemple d'une nouvelle version d'un GRID | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |