FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Planétarium virtuel.
par Pedro Alvarez Hier à 16:57

» Roues dentées
par jean_debord Hier à 10:40

» Attention arnaque !
par mindstorm Jeu 19 Juil 2018 - 19:18

» Qui fait quoi ?
par silverman Mer 18 Juil 2018 - 15:21

» ITEM_SELECT N,L pour synedit
par silverman Mer 18 Juil 2018 - 15:20

» Boussole
par jean_debord Mer 18 Juil 2018 - 11:06

» Roue à n faces
par Marc Dim 15 Juil 2018 - 22:16

» Exemple d'une nouvelle version d'un GRID
par Jean Claude Ven 13 Juil 2018 - 10:32

» Une simple question
par Oscaribout Sam 7 Juil 2018 - 23:20

» BUG sur l'objet TAB
par Jack Sam 7 Juil 2018 - 21:12

» Monopoly moderne
par jjn4 Sam 7 Juil 2018 - 15:06

» Récapitulatif ludothèque panoramic jjn4
par jjn4 Ven 6 Juil 2018 - 17:41

» Lignes ondulées
par JL35 Ven 6 Juil 2018 - 17:39

» bug off_activate 0 : sans d'effet
par silverman Ven 6 Juil 2018 - 13:02

» Position des objets d'un conteneur dans FBPano et Panoramic
par Navigateur Ven 6 Juil 2018 - 12:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2018
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Exemple d'une nouvelle version d'un GRID

Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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;
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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 MOD
constantes prédéfinies:
   PI
et 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, T
On 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, WRITECELL

La 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
pascal10000

avatar

Nombre de messages : 703
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Minibug

avatar

Nombre de messages : 2979
Age : 51
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

MessageSujet: Re: Exemple d'une nouvelle version d'un GRID   Mar 24 Avr 2018 - 19:07

Houlala, là c'est trop pour moi ! Tu m'as perdu Klaus. Wink

Maintenant avec tout cela tu va pouvoir nous créer un super tableur ! Laughing Laughing Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://gpp.panoramic.free.fr
pascal10000

avatar

Nombre de messages : 703
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
pascal10000

avatar

Nombre de messages : 703
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11088
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
lepetitmarocain



Nombre de messages : 2
Date d'inscription : 04/07/2018

MessageSujet: 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. Question  Question

Il y a un fichier HLP, que je n'arrive pas à Lire sur Seven

Merci beaucoup

Lepetitmarocain
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5527
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Exemple d'une nouvelle version d'un GRID   Ven 13 Juil 2018 - 10:32

Bonjour Lepetitmarocain,

Quand tu es connecté, tu trouves tout ce dont tu as besoin dans la signature de Klaus.

Pour l'aide de KGF c'est ici => http://klauspanoramic.esy.es/KGF.html?SommaireIndex.html

A+

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Exemple d'une nouvelle version d'un GRID   

Revenir en haut Aller en bas
 
Exemple d'une nouvelle version d'un GRID
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» [résolu]Nouvelle version: fichier .bat
» Roboform, Nouvelle version
» Problème: pourquoi Base C. crée t-il une nouvelle version à chaque chargement de fichier .gpx
» Nouvelle version de Garmin Express (3.6.2 pour Mac)-Resolu
» Basecamp - nouvelle version [Résolu]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: