Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 16 Juil 2020 - 1:56 | |
| Nouvelle version: KGF.dll V9.17 du 15/07/2020Nouveautés: - SparseGrid: générer un USER_EVENT lors d'un changement de contenuModules modifiés: KGF.dll KGF.chmLa doc est à jour. Cette version est complète et exploitable en l'état. On pourra imaginer d'autres ajouts, mais la structure est complète et solide, et avec le USER_EVENT, on peut même prévenir le programme Panoramic si le contenu d'une cellule spécifique a changé. D'ailleurs, plusieurs cellules peuvent être génératrices de USER_EVENT - c'est une question de paramétrage, via la fonction SetSparseCellEvents. La documentation de l'objet SparseGrid est complète, et la doc en téléchargement ainsi que la doc en ligne est à jour. Dans le programme de démo ci-après, j'ai aouté un USER_EVENT sur le champ [9,5] nommé "Tota". Et dans le petit mémo d'information, chaque fois qu'un tel évènement arrive, ceci est signalé avec les coordonnées de la cellule. - Code:
-
' test_SparceGrid.bas
' ce programme est une démonstration des capacités de l'objet SparseGrid. ' Il représente une version rudimentaire d'une facture, avec 3 lignes de produits. ' Chaque ligne contient 3 champs: prix (à saisir), TVA 20 % et total ligne (calculés automatiquement) ' Dans la form séparée, il y a une cellule de total général qui est la somme des totaux des 3 lignes ' et qui est calculée automatiquement également. ' ' Le tableau est défini par 9 lignes et 5 colonnes, mais tout n'est pas utilise. ' Les lignes 1 à 3 sont les lignes "produit", la ligne 9 est la ligne du total général. Les autres lignes sont indéfinies. ' La colonne 1 est le prix (à saisir). Les colonnes 2 et 3 sont calculées automatiquement. ' La colonne 5 représente les totaux et est calculée automatiquement. Les autres colonnes sont indéfinies. ' ' Un clic sur le bouton "Créer" crée toute la structure. Dans un mémo à droite, on affiche le plan du SparseGrid, ' avec des X à la place des cellules non définies. ' ' On peut maintenant saisir des valeurs dans la première colonne, et on observe les autres cellules ' qui se mettent à jour automatiquement. Les cellules de la première colonne acceptent des valeurs flottantes ' composes de chiffres, du point ou de la virgule décimale (indifféremment !) et éventuellement du signe "-" en première ' position. La saisie dans les autres cellules est bloquée. ' ' Le bouton "Configurer" change la présentation de la preière cellule de la première ligne, à titre d'exemple. ' ' Le bouton "Supprimer" supprime l'ensemble de l'objet SparseGrid. Il peut être récréé, vide, prê à l'emploi. ' ' Le bouton "Calculer" calcule le total des lignes de la colonne 5, identique à ce qui apparaît dans le champ "Tolal".
label userevent, creer, supprimer, configurer, somme
dim SG%, res%, nom$, nom1$, ind1%, data$, fontname$, attrib$, somme, formule$, i%, ident%, lig%, col%
' *** boutons des opérations dll_on "KGF.dll"
height 0,screen_y : width 0,900 button 1 : top 1,0 : left 1,0 : caption 1,"Créer" : on_click 1,creer button 2 : top 2,height(1) : left 2,0 : caption 2,"Supprimer" : on_click 2,supprimer button 3 : top 3,0 : left 3,left(1)+width(1) : caption 3,"Configurer" : on_click 3,configurer button 4 : top 4,height(3) : left 4,left(3) : caption 4,"Somme" : on_click 4,somme
' *** containers pour les cellules container 20 : top 20,100 : left 20,10 : width 20,600 : height 20,80 : caption 20,"Ligne 1" container 21 : top 21,190 : left 21,10 : width 21,600 : height 21,80 : caption 21,"Ligne 2" container 22 : top 22,280 : left 22,10 : width 22,600 : height 22,80 : caption 22,"Ligne 3"
' *** form et container pour la cellule de totalisation form 31 : top 31,80 : left 31,width(0)+10 : width 31,400 : height 31,200 : caption 31,"Total colonne 3" container 29 : parent 29,31 : top 29,20 : left 29,20 : width 29,300 : height 29,80 : caption 29,"Total"
memo 99 : top 99,10 : left 99,620 : width 99,250 : height 99,300 : bar_both 99
on_user_event userevent
caption 0,str$(handle(0))+" "+str$(handle(31)) end
creer: SG% = dll_call1("CreateSparseGrid",17) : ' créer un SparseGrid avec l'identifiant 1 ' message "CreateSparseGrid: "+str$(SG%)
fontname$ = "Arial" attrib$ = "BI" res% = dll_call6("SetSparseGridAttributes",SG%,adr(fontname$),16,adr(attrib$),hex("FFFFFF"),hex("FF")) ' message "SetSparseGridAttributes: "+str$(res%)
for i%=1 to 3 : ' 3 lignes ' *** ligne i% nom$ = "Edit"+str$(i%*10+1) ' res% = dll_call6("CreateSparseCell",SG%,adr(nom$),0,handle(0),i%,1) : ' text ' res% = dll_call6("CreateSparseCell",SG%,adr(nom$),1,handle(0),i%,1) : ' integer ' res% = dll_call6("CreateSparseCell",SG%,adr(nom$),2,handle(0),i%,1) : ' float res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(19+i%),i%,1) : ' money ' message "CreateSparseCell: "+str$(res%)
res% = dll_call5("PositionSparseCell",SG%,i%,1,20,20) ' message "PositionSparseCell: "+str$(res%)
nom$ = "Edit"+str$(i%*10+2) res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(19+i%),i%,2) : ' money res% = dll_call5("PositionSparseCell",SG%,i%,2,200,20)
nom$ = "Edit"+str$(i%*10+3) res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(19+i%),i%,5) : ' money res% = dll_call5("PositionSparseCell",SG%,i%,5,380,20) ' nom$ = "Edit"+str$(i%)+"1" ' nom1$ = "Edit"+str$(i%)+"2" formule$ = "$cell["+str$(i%)+",1]*0.20" res% = dll_call6("AddSparceCellDependancyFormula",SG%,i%,1,i%,2,adr(formule$)) ' message "AddSparceCellDependancyFormula: "+str$(res%)
nom$ = "Edit"+str$(i%)+"2" nom1$ = "Edit"+str$(i%)+"3" formule$ = "$cell[i%,1]+$cell[edit"+str$(i%)+"2]" formule$ = "$sum[edit"+str$(i%)+"1,edit"+str$(i%)+"2]" : ' nom1,nom2 formule$ = "$sum[edit"+str$(i%)+"1,"+str$(i%)+",2]" : ' nom,lig2,col2 formule$ = "$sum["+str$(i%)+",1,edit"+str$(i%)+"2]" : ' lig1,col1,nom2 formule$ = "$sum["+str$(i%)+",1,"+str$(i%)+",2]" : ' lig1,col1,lig2,col2 res% = dll_call6("AddSparceCellDependancyFormula",SG%,i%,2,i%,5,adr(formule$)) ' message "AddSparceCellDependancyFormula: "+str$(res%) next i% ' *** ligne du total nom$ = "Total' res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(29),9,5) : ' money ' message "CreateSparseCell: "+str$(res%)
res% = dll_call5("PositionSparseCell",SG%,9,5,20,20) ' message "PositionSparseCell: "+str$(res%)
' *** gérer le total général for i%=1 to 3 formule$ = "$sum[1,5,3,5]" res% = dll_call6("AddSparceCellDependancyFormula",SG%,i%,5,9,5,adr(formule$)) next i% ' *** bloquer les cellules calculées res% = dll_call6("BlockSparseCells",SG%,1,2,9,5,1) ' message "BlockSparseCells: "+str$(res%) ' *** autoriser USER_EVENT sur cellule (9,5) res% = dll_call6("SetSparseCellEvents",SG%,9,5,9,5,1) ' message "SetSparseCellEvents: "+str$(res%) res% = dll_call2("TestSparseGrid",SG%,handle(99))
return
supprimer: SG% = dll_call1("DeleteSparseGrid",SG%) ' message "DeleteSparseGrid: "+str$(SG%) clear 99 return
configurer: res% = dll_call5("ResizeSparseCell",SG%,1,1,150,50) ' message "ResizeSparseCell: "+str$(res%) data$ = "11.23" res% = dll_call4("SetSparseCellData",SG%,1,1,adr(data$)) ' message "SetSparseCellData: "+str$(res%)
fontname$ = "Courier" attrib$ = "BU" res% = dll_call6("SetSparseCellAttributes",SG%,adr(fontname$),24,adr(attrib$),1,1) ' message "SetSparseCellAttributes: "+str$(res%)
res% = dll_call5("SetSparseCellColors",SG%,hex("FF0000"),hex("0"),1,1) ' message "SetSparseCellColors: "+str$(res%)
return
somme: res% = dll_call6("CalculateSparseCellSum",SG%,1,1,2,2,adr(somme)) message "CalculateSparseCellSum: "+str$(res%)+" somme="+str$(somme) return
userevent: if bin_and(user_event_wparam,hex("FFFF0000"))=hex("10010000") ident% = bin_and(user_event_wparam,hex("FFFF")) lig% = int(user_event_lparam / 65536) col% = bin_and(user_event_lparam,hex("FFFF")) item_add 99,"Change: ["+str$(lig%)+","+str$(col%)+"]" end_if return
data$ = string$(255," ") res% = dll_call4("GetSparseCellData",SG%,1,1,adr(data$)) data$ = trim$(data$) message "GetSparseCellData: "+str$(res%)+" = "+data$
res% = dll_call2("GetAllSparceCellContents",SG%,handle(99)) message "GetAllSparceCellContents: "+str$(res%)
Le SparseGrid, tel qu'il est actuellement, me donne entière satisfaction jusqu'à maintenant. Il couvre parfaitement mes besoins - cellules indépendantes d'une organisation visuelle en tableau (bien qu'on puisse le faire en jouant sur les positionnements !), cellules pouvant apparaître dans des objets et même des fenêtres différentes, cellules invisibles et cellules bloquées (saisie interdite), cellules de natures différentes avec contrôle immédiat lors de la saisie, et pour finir, l'effet tableur avec la mise à jour de cellules par des calculs de dépendance, façon tableur. Je reste ouvert, comme d'habitude, à des suggestions ou des demandes pouvant faire progresser cet outil. | |
|