FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
KGF_dll - nouvelles versions - Page 36 Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
KGF_dll - nouvelles versions - Page 36 Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
KGF_dll - nouvelles versions - Page 36 Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
KGF_dll - nouvelles versions - Page 36 Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
KGF_dll - nouvelles versions - Page 36 Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
KGF_dll - nouvelles versions - Page 36 Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
KGF_dll - nouvelles versions - Page 36 Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
KGF_dll - nouvelles versions - Page 36 Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
KGF_dll - nouvelles versions - Page 36 Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
KGF_dll - nouvelles versions - Page 36 Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
KGF_dll - nouvelles versions - Page 36 Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
KGF_dll - nouvelles versions - Page 36 Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
KGF_dll - nouvelles versions - Page 36 Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
KGF_dll - nouvelles versions - Page 36 Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
KGF_dll - nouvelles versions - Page 36 Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -21%
LEGO® Icons 10329 Les Plantes Miniatures, ...
Voir le deal
39.59 €

 

 KGF_dll - nouvelles versions

Aller en bas 
+12
JL35
Oscaribout
bignono
Pedro
pascal10000
silverman
Jicehel
papydall
Minibug
Marc
Yannick
Klaus
16 participants
Aller à la page : Précédent  1 ... 19 ... 35, 36, 37, 38, 39, 40  Suivant
AuteurMessage
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyVen 17 Juil 2020 - 1:09

KGF.dll V9.18 du 16/07/2020

Nouveautés:
- nouvelles fonctions: OrganizeSparseGridAsArray, SetSparseGridColumnWidth, SetSparseGridRowHeight

Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour.

Ces fonctions agissent globalement sur un SparseGrid en entier pour la première fonction, et sur une ligne ou une colonne respectivement pour les autres.

La fonction OrganizeSparseGrid permet, en une seule opération, de rassembler l'ensemble des cellules dans un seul objet parent, sous forme d'un tableau compact en deux dimensions, à la manière d'un objet GRID.

Les deux autres fonctions changent la largeur ou la hauteur de toutes les cellules d'une ligne ou d'une colonne. Elles permettent en même temps de décaler les cellules à droite ou en-dessous de la cellule modifiée pour éviter des chevauchements si une représentation en tableau est en place, tellle qu'à l'issue de la fonction OrganizeSparseGridAsArray par exemple. De plus, ces valeurs de largeur de cellule pour une colonne sera mémorisée dans le SparseGrid de sorte que toutes les cellules créées dans celle colonne auront cette largeur par défaut. Idem pour la hauteur des cellules dans une ligne.

Voici, pour mémoire,, le programme de démo (fonctionnellement inchangé par rapport à la version précédente):
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))

  ' res% = dll_call4("SetSparseGridColumnWidth",SG%,2,30,1)
  ' message "SetSparseGridColumnWidth: "+str$(res%)

  ' res% = dll_call4("SetSparseGridRowHeight",SG%,1,50,1)
  ' message "SetSparseGridRowHeight: "+str$(res%)

  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%)

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptySam 18 Juil 2020 - 18:42

KGF.dll V9.19 du 1/07/2020

Nouveautés:
- SparseGrid: correction d'un bug dans le calcul des formules de dépendances
- SparseGrid: gestion de la touche TAB pour passer au champ suivant actif et nonh bloqué


Modules modifiés:
KGF.dll

La doc est à jour.

Et voici une autre démo, plus realiste celle-ci. C'est un formulaire de facture de 10 lognes produit, avec 6 colonnes:
- quantité (laissée en flottant pour pouvoir saisier 2.5 par exemple, pour les produits en vrac)
- libelle (texte libre)
- prix unitaire
- taux de TVA
- montant de la TVA de la ligne
- totel TTC de la ligne
En-desous de ce tableau, il y a une autre ligne (faisant partie du SparseGrid). Pour cette 11ème ligne, seuls les colonnes 5 et 6 sont définis, affichant respectivement le total de la TVA et total TTC. La touche TAB permet de passer d'un champ à l'autre.

Voici le code:
Code:
' Facture_avec_SparseGrid.bas

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"

full_space 0
caption 0,"Facture"

on_user_event userevent

gosub creer
            
end

creer:
  SG% = dll_call1("CreateSparseGrid",17)         : ' créer un SparseGrid avec l'identifiant 1
  ' message "CreateSparseGrid: "+str$(SG%)
  
  alpha 1 : top 1,40 : left 1,25 : caption 1,"Quantité"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,1,60,0)
  alpha 2 : top 2,40 : left 2,80 : caption 2,"Libellé"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,2,200,0)
  alpha 3 : top 3,40 : left 3,355 : caption 3,"Prix unitaire"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,3,120,0)
  alpha 4 : top 4,40 : left 4,450 : caption 4,"Taux TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,4,80,0)
  alpha 5 : top 5,40 : left 5,600 : caption 5,"TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,5,120,0)
  alpha 6 : top 6,40 : left 6,760 : caption 6,"Prix"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,6,120,0)
  alpha 7 : top 7,30+12*30 : left 7,460 : caption 7,"Totaux:"
 
  for i%=1 to 10          : ' 10 lignes
  ' *** ligne i%
    nom$ = "Quantité"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,1)         : ' integer
    res% = dll_call5("PositionSparseCell",SG%,i%,1,10,30+30*i%)

    nom$ = "Libellé"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),0,handle(0),i%,2)         : ' text
    res% = dll_call5("PositionSparseCell",SG%,i%,2,80,30+30*i%)

    nom$ = "PrixUnit"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,3)         : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,3,290,30+30*i%)

    nom$ = "TauxTVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,4)         : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,4,420,30+30*i%)

    nom$ = "TVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,5)         : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,5,510,30+30*i%)

    nom$ = "Prix"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,6)         : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,6,660,30+30*i%)

  next i%
  
  nom$ = "TotalTVA"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,5)         : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,5,510,30+30*12)

  nom$ = "TotalHT"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,6)         : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,6,660,30+30*12)

  res% = dll_call6("BlockSparseCells",SG%,1,5,12,6,1)
  for i%=1 to 11
    res% = dll_call5("SetSparseCellColors",SG%,0,hex("FFFF00"),i%,5)
    res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),i%,6)
  next i%
  
  for i%=1 to 10
    formule$ = "$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]*$cell["+str$(i%)+",4]/100"        
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,1,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,3,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,4,i%,5,adr(formule$))
    formule$ = "$cell["+str$(i%)+",5]+$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,i%,6,adr(formule$))

    formule$ = "$sum[1,5,10,5]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,11,5,adr(formule$))
    formule$ = "$sum[1,6,10,6]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,6,11,6,adr(formule$))
  next i%

  
  return
  
' *** gérer le total général
  for i%=1 to 3
    formule$ = "$sum[1,5,3,5]"      
    res% = dll_call6("AddSparseCellDependancyFormula",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_call5("SetSparseCellComboData",SG%,1,1,handle(98),3)
  
  res% = dll_call2("TestSparseGrid",SG%,handle(99))

  ' res% = dll_call4("SetSparseGridColumnWidth",SG%,2,30,1)
  ' message "SetSparseGridColumnWidth: "+str$(res%)

  ' res% = dll_call4("SetSparseGridRowHeight",SG%,1,50,1)
  ' message "SetSparseGridRowHeight: "+str$(res%)

  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
[url=https://servimg.com/view/18686814/634][img]https://i.servimg.com/u/f28/18/68/68/14/aa136.png[/img][/url]


data$ = string$(255," ")
res% = dll_call4("GetSparseCellData",SG%,1,1,adr(data$))
data$ = trim$(data$)
message "GetSparseCellData: "+str$(res%)+" = "+data$


res% = dll_call2("GetAllSparseCellContents",SG%,handle(99))
message "GetAllSparseCellContents: "+str$(res%)


Et voici de quoi ça a l'air:
KGF_dll - nouvelles versions - Page 36 Aa137

Sympa, non ? La modification de n'importe quel champ entraîne aussitôt le recalcul de l'ensemble, à chaque touche frappée.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptySam 18 Juil 2020 - 19:36

Klaus a écrit:
Sympa, non ? La modification de n'importe quel champ entraîne aussitôt le recalcul de l'ensemble, à chaque touche frappée.
Oui ! C'est très pro !
J'ai testé : R.A.S.  C'est excellent!
Bravo Klaus !
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptySam 18 Juil 2020 - 20:24

Merci beaucoup, Marc !

La beauté de la chose, c'est que le code Panoramic sert uniquement à créer les objets. Les calculs sont entièrement automatiés au assurés par l'objet SparseGrid, en s'aidant des formules de calcul passées à l'objet. aucun évènement à gérer, aucun crontrôle de cohérence des données à programmer.

Pour obtenir une application réelle, il suffit d'utiliser les fonctions disponibles (voir l'aide !) pour charger éventuellement les données initiales, puis récupérer les données du tableau par le même moyen, en vue d'un enregistrement ou d'une impression, par exemple.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 26 Juil 2020 - 12:39

KGF.dll V9.20 du 26/07/2020

Nouveautés:
-SparseGrid: nouveau type de cellule "Combo"
- nouvelle fonction: LoadSparseGridComboCell


Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour.

Cette version apporte le type de cellule "Combo". On peut y charger des textes ou des valeurs numériques. Dans le programme de démo ci-après (la maquette de facture déjà publiée), j'ai changé le type des cellules "Taux de TVA" en combo contenant la liste des taix de TVA pour loa France. J'ai également activé l'interception des USER_EVENT et on reconnaît bien le changement de taix de TVA et le changement du contenu de la somme totale:
Code:
' Facture_avec_SparseGrid.bas

label userevent, creer

dim SG%, res%, nom$, nom1$, ind1%, data$, fontname$, attrib$, somme, formule$, i%, ident%, lig%, col%, s$

' *** boutons des opérations
dll_on "KGF.dll"

full_space 0
caption 0,"Facture"
memo 98 : hide 98 : bar_both 98            : ' pour contenir les taux possibles de TVA
  clear 98
  item_add 98,"20" 
  item_add 98,"10" 
  item_add 98,"5.5" 
  item_add 98,"2.1"
memo 99 : top 99,400 : left 99,10 : bar_both 99 : width 99,300 : height 99,300

on_user_event userevent

gosub creer
           
end

creer:
  SG% = dll_call1("CreateSparseGrid",17)        : ' créer un SparseGrid avec l'identifiant 1
  ' message "CreateSparseGrid: "+str$(SG%)
 
  alpha 1 : top 1,40 : left 1,25 : caption 1,"Quantité"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,1,60,0)
  alpha 2 : top 2,40 : left 2,80 : caption 2,"Libellé"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,2,200,0)
  alpha 3 : top 3,40 : left 3,355 : caption 3,"Prix unitaire"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,3,120,0)
  alpha 4 : top 4,40 : left 4,450 : caption 4,"Taux TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,4,80,0)
  alpha 5 : top 5,40 : left 5,600 : caption 5,"TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,5,120,0)
  alpha 6 : top 6,40 : left 6,760 : caption 6,"Prix"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,6,120,0)
  alpha 7 : top 7,30+12*30 : left 7,460 : caption 7,"Totaux:"
 
  for i%=1 to 10          : ' 10 lignes
  ' *** ligne i%
    nom$ = "Quantité"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,1)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,1,10,30+30*i%)

    nom$ = "Libellé"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),0,handle(0),i%,2)        : ' text
    res% = dll_call5("PositionSparseCell",SG%,i%,2,80,30+30*i%)

    nom$ = "PrixUnit"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,3)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,3,290,30+30*i%)

    nom$ = "TauxTVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),4,handle(0),i%,4)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,4,420,30+30*i%)
    res% = dll_call5("LoadSparseComboCell",SG%,i%,4,1,handle(98))              : ' charger les taux TVA, sélectionner ligne 1

    nom$ = "TVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,5)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,5,510,30+30*i%)

    nom$ = "Prix"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,6)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,6,660,30+30*i%)

  next i%
 
  nom$ = "TotalTVA"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,5)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,5,510,30+30*12)

  nom$ = "TotalHT"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,6,660,30+30*12)

  for i%=1 to 11
    res% = dll_call5("SetSparseCellColors",SG%,0,hex("FFFF00"),i%,5)
    res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),i%,6)
  next i%
 
  for i%=1 to 10
    formule$ = "$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]*$cell["+str$(i%)+",4]/100"       
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,1,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,3,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,4,i%,5,adr(formule$))
    formule$ = "$cell["+str$(i%)+",5]+$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,i%,6,adr(formule$))

    formule$ = "$sum[1,5,10,5]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,11,5,adr(formule$))
    formule$ = "$sum[1,6,10,6]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,6,11,6,adr(formule$))
  next i%
 
  ' bloquer les cellules calculées 
  res% = dll_call6("BlockSparseCells",SG%,1,5,11,6,1)
  ' message "BlockSparseCells: "+str$(res%)

  ' autoriser USER_EVENT sur lec combos et le total général
  res% = dll_call6("SetSparseCellEvents",SG%,1,4,10,4,1)
  res% = dll_call6("SetSparseCellEvents",SG%,11,6,11,6,1)
 
 
  return
 

' traiter USER_EVENT ici
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
  if bin_and(user_event_wparam,hex("FFFF0000"))=hex("10020000")
    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,"Combo sélection: ["+str$(lig%)+","+str$(col%)+"]"
  end_if
 
  return

Et voici le résulgtat:
KGF_dll - nouvelles versions - Page 36 Aa138
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 28 Juil 2020 - 10:53

Sans changement dans KGF.dll, juste en déclarant 2 champs supplémentaires et une formule de calcul supplémentaire, j'ai ajouté le traitement d'unacompte versé qui sera déduit du total général pour établir le montant à payer réel:
Code:
' Facture_avec_SparseGrid.bas

label userevent, creer

dim SG%, res%, nom$, nom1$, ind1%, data$, fontname$, attrib$, somme, formule$, i%, ident%, lig%, col%, s$

' *** boutons des opérations
dll_on "KGF.dll"

full_space 0
caption 0,"Facture"
memo 98 : hide 98 : bar_both 98            : ' pour contenir les taux possibles de TVA
  clear 98
  item_add 98,"20" 
  item_add 98,"10" 
  item_add 98,"5.5" 
  item_add 98,"2.1"
memo 99 : top 99,400 : left 99,10 : bar_both 99 : width 99,300 : height 99,300

on_user_event userevent

gosub creer
           
end

creer:
  SG% = dll_call1("CreateSparseGrid",17)        : ' créer un SparseGrid avec l'identifiant 1
  ' message "CreateSparseGrid: "+str$(SG%)
 
  alpha 1 : top 1,40 : left 1,25 : caption 1,"Quantité"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,1,60,0)
  alpha 2 : top 2,40 : left 2,80 : caption 2,"Libellé"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,2,200,0)
  alpha 3 : top 3,40 : left 3,355 : caption 3,"Prix unitaire"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,3,120,0)
  alpha 4 : top 4,40 : left 4,450 : caption 4,"Taux TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,4,80,0)
  alpha 5 : top 5,40 : left 5,600 : caption 5,"TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,5,120,0)
  alpha 6 : top 6,40 : left 6,760 : caption 6,"Prix"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,6,120,0)
  alpha 7 : top 7,30+12*30 : left 7,460 : caption 7,"Totaux:"
  alpha 8 : top 8,30+14*30 : left 8,460 : caption 8,"Acompte: "
  alpha 9 : top 9,30+16*30 : left 9,460 : caption 9,"A payer: "
 
  for i%=1 to 10          : ' 10 lignes
  ' *** ligne i%
    nom$ = "Quantité"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,1)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,1,10,30+30*i%)

    nom$ = "Libellé"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),0,handle(0),i%,2)        : ' text
    res% = dll_call5("PositionSparseCell",SG%,i%,2,80,30+30*i%)

    nom$ = "PrixUnit"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,3)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,3,290,30+30*i%)

    nom$ = "TauxTVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),4,handle(0),i%,4)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,4,420,30+30*i%)
    res% = dll_call5("LoadSparseComboCell",SG%,i%,4,1,handle(98))              : ' charger les taux TVA, sélectionner ligne 1

    nom$ = "TVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,5)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,5,510,30+30*i%)

    nom$ = "Prix"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,6)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,6,660,30+30*i%)

  next i%
 
  nom$ = "TotalTVA"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,5)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,5,510,30+30*12)

  nom$ = "TotalTTC"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,6,660,30+30*12)

  nom$ = "Acompte"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),12,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,12,6,660,30+30*14)

  nom$ = "APayer"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),13,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,13,6,660,30+30*16)

  for i%=1 to 11
    res% = dll_call5("SetSparseCellColors",SG%,0,hex("FFFF00"),i%,5)
    res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),i%,6)
  next i%
  res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),13,6)
 
  for i%=1 to 10
    formule$ = "$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]*$cell["+str$(i%)+",4]/100"       
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,1,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,3,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,4,i%,5,adr(formule$))
    formule$ = "$cell["+str$(i%)+",5]+$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,i%,6,adr(formule$))

    formule$ = "$sum[1,5,10,5]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,11,5,adr(formule$))
    formule$ = "$sum[1,6,10,6]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,6,11,6,adr(formule$))
  next i%

  formule$ = "$cell[11,6]-$cell[12,6]"
  res% = dll_call6("AddSparseCellDependancyFormula",SG%,11,6,13,6,adr(formule$))
  formule$ = "$cell[11,6]-$cell[12,6]"
  res% = dll_call6("AddSparseCellDependancyFormula",SG%,12,6,13,6,adr(formule$))
 
  ' bloquer les cellules calculées 
  res% = dll_call6("BlockSparseCells",SG%,1,5,11,6,1)
  res% = dll_call6("BlockSparseCells",SG%,13,6,13,6,1)
  ' message "BlockSparseCells: "+str$(res%)

  ' autoriser USER_EVENT sur les combos et le total à payer
  res% = dll_call6("SetSparseCellEvents",SG%,1,4,10,4,1)
  res% = dll_call6("SetSparseCellEvents",SG%,13,6,13,6,1)
 
 
  return
 

' traiter USER_EVENT ici
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
  if bin_and(user_event_wparam,hex("FFFF0000"))=hex("10020000")
    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,"Combo sélection: ["+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("GetAllSparseCellContents",SG%,handle(99))
message "GetAllSparseCellContents: "+str$(res%)


Et voici ce que ça donne:
KGF_dll - nouvelles versions - Page 36 Aa139
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptySam 1 Aoû 2020 - 11:53

KGF.dll V9.21 du 31/07/2020

Nouveautés:
-Nouvelles fonctions: Nouvelles fonctions: GetSparseCellIndexFromName, GetSparseCellDataFromName
- IconListBox: ignorer le double clic


Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour.

Les nouvelles fonctions permettent d'interroger le SparseGrid en donnant le nom d'une cellule. Dans la démo, j'au ajouté une combo donnant le nom de 4 cellules signiicatives. En choisissant un de ces noms, puis en cliquant sur le bouton en-dessous, le contenu de la cellule du nom sélectionné sera affiché:
Code:
' Facture_avec_SparseGrid.bas

label userevent, creer, lire

dim SG%, res%, nom$, nom1$, ind1%, data$, fontname$, attrib$, somme, formule$, i%, ident%, lig%, col%, s$, donnee

' *** boutons des opérations
dll_on "KGF.dll"

full_space 0
caption 0,"Facture"
memo 98 : hide 98 : bar_both 98            : ' pour contenir les taux possibles de TVA
  clear 98
  item_add 98,"20"
  item_add 98,"10"
  item_add 98,"5.5"
  item_add 98,"2.1"
memo 99 : top 99,400 : left 99,10 : bar_both 99 : width 99,300 : height 99,300

on_user_event userevent

gosub creer
         
end

creer:
  SG% = dll_call1("CreateSparseGrid",17)        : ' créer un SparseGrid avec l'identifiant 1
  ' message "CreateSparseGrid: "+str$(SG%)
 
  alpha 1 : top 1,40 : left 1,25 : caption 1,"Quantité"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,1,60,0)
  alpha 2 : top 2,40 : left 2,80 : caption 2,"Libellé"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,2,200,0)
  alpha 3 : top 3,40 : left 3,355 : caption 3,"Prix unitaire"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,3,120,0)
  alpha 4 : top 4,40 : left 4,450 : caption 4,"Taux TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,4,80,0)
  alpha 5 : top 5,40 : left 5,600 : caption 5,"TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,5,120,0)
  alpha 6 : top 6,40 : left 6,760 : caption 6,"Prix"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,6,120,0)
  alpha 7 : top 7,30+12*30 : left 7,460 : caption 7,"Totaux:"
  alpha 8 : top 8,30+14*30 : left 8,460 : caption 8,"Acompte: "
  alpha 9 : top 9,30+16*30 : left 9,460 : caption 9,"A payer: "
 
  combo 20 : top 20,570 : left 20,400 : width 20,150
    item_add 20,"TotalTVA"
    item_add 20,"TotalTTC"
    item_add 20,"Acompte"
    item_add 20,"APayer"
  button 21 : top 21,600 : left 21,400 : width 21,150 : caption 21,"Récupérer données"
    on_click 21,lire
 
  for i%=1 to 10          : ' 10 lignes
  ' *** ligne i%
    nom$ = "Quantité"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,1)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,1,10,30+30*i%)

    nom$ = "Libellé"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),0,handle(0),i%,2)        : ' text
    res% = dll_call5("PositionSparseCell",SG%,i%,2,80,30+30*i%)

    nom$ = "PrixUnit"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,3)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,3,290,30+30*i%)

    nom$ = "TauxTVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),4,handle(0),i%,4)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,4,420,30+30*i%)
    res% = dll_call5("LoadSparseComboCell",SG%,i%,4,1,handle(98))              : ' charger les taux TVA, sélectionner ligne 1

    nom$ = "TVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,5)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,5,510,30+30*i%)

    nom$ = "Prix"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,6)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,6,660,30+30*i%)

  next i%
 
  nom$ = "TotalTVA"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,5)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,5,510,30+30*12)

  nom$ = "TotalTTC"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,6,660,30+30*12)

  nom$ = "Acompte"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),12,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,12,6,660,30+30*14)

  nom$ = "APayer"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),13,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,13,6,660,30+30*16)

  for i%=1 to 11
    res% = dll_call5("SetSparseCellColors",SG%,0,hex("FFFF00"),i%,5)
    res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),i%,6)
  next i%
  res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),13,6)
 
  for i%=1 to 10
    formule$ = "$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]*$cell["+str$(i%)+",4]/100"     
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,1,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,3,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,4,i%,5,adr(formule$))
    formule$ = "$cell["+str$(i%)+",5]+$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,i%,6,adr(formule$))

    formule$ = "$sum[1,5,10,5]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,11,5,adr(formule$))
    formule$ = "$sum[1,6,10,6]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,6,11,6,adr(formule$))
  next i%

  formule$ = "$cell[11,6]-$cell[12,6]"
  res% = dll_call6("AddSparseCellDependancyFormula",SG%,11,6,13,6,adr(formule$))
  formule$ = "$cell[11,6]-$cell[12,6]"
  res% = dll_call6("AddSparseCellDependancyFormula",SG%,12,6,13,6,adr(formule$))
 
  ' bloquer les cellules calculées
  res% = dll_call6("BlockSparseCells",SG%,1,5,11,6,1)
  res% = dll_call6("BlockSparseCells",SG%,13,6,13,6,1)
  ' message "BlockSparseCells: "+str$(res%)

  ' autoriser USER_EVENT sur les combos et le total à payer
  res% = dll_call6("SetSparseCellEvents",SG%,1,4,10,4,1)
  res% = dll_call6("SetSparseCellEvents",SG%,13,6,13,6,1)
 
 
  return
 
lire:
  nom$ = text$(20)
  if trim$(nom$)=""
    message "Sélectionner un nom svp"
    return
  end_if
  res% = dll_call3("GetSparseCellDataFromName",SG%,adr(nom$),adr(donnee))
  message "La cellule "+nom$+" contient la valeur de "+str$(donnee)
  return
 

' traiter USER_EVENT ici
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
  if bin_and(user_event_wparam,hex("FFFF0000"))=hex("10020000")
    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,"Combo sélection: ["+str$(lig%)+","+str$(col%)+"]"
  end_if
 
  return

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 2 Aoû 2020 - 21:05

KGF.dll V9.22 du 02/08/2020

Nouveautés:
-GetExportedNamesFromDLL: retourner le nombre de fonctions exportées

Modules modifiés:
KGF.dll

La doc est à jour.

Voici une petite démo qui affiche les noms de toutes les fonctions exportées par KGF.dll:
Code:
' Liste des fonctions KGF.dll.bas

dim res%, dll$

width 0,300 : height 0,700
list 1 : full_space 1

dll_on "KGF.dll"
dll$ = "KGF.dll"
res% = dll_call2("GetExportedNamesFromDLL",adr(dll$),handle(1))
message str$(res%)+" fonctions exportées"
end

Essayez-le - cela donneune petite idée...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 2 Aoû 2020 - 22:29

Combien ????

KGF_dll - nouvelles versions - Page 36 Sans_t98

Oui c'est vrai que KGF est devenu une vrai mine d'or mais quand même...

KGF_dll - nouvelles versions - Page 36 Sans_t99

Pour ma part j'en dénombre 1535, ce qui est déjà très impressionnant !

Bravo Klaus, et continu comme ça, tu es un champion ! cheers


EDIT : Ben oui, je n'avais pas la dernière version. c'est normal ! No geek


Dernière édition par Minibug le Lun 3 Aoû 2020 - 7:24, édité 2 fois
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 2 Aoû 2020 - 22:56

Bonsoir à tous !

1581 fonctions offertes généreusement par Klaus !

MERCI klaus !

KGF_dll - nouvelles versions - Page 36 Kgf16
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyLun 3 Aoû 2020 - 16:37

KGF.dll V9.22 du 02/08/2020

Nouveautés:
- SparseGrid: nouveau type de cellule FloatCombo.
- ancien type Combo devient TextCombo.
- une cellule TextCombo a la valeur 0 dans une formule de calcul.


Modules modifiés:
KGF.dll
KGF.dll


La doc est à jour.

Il y avait une incohérence de logique: avoir des cellules normales de type texte et de type numérique, mais des cellules combo "hybrides", interprétées tant comme texte, tant comme valeur flottante, selon les circonstances. Pire: une combo contenant du texte "plante" le programme si elle est utilisée dans une formule.

Ceci est résolu maintenant. On a maintenant deux types de combos:
- combo texte
- combo flottant
Seuls les combos flottants fournissent une valeur significative dans une formule. Le combo texte fournit toujours la valeur 0 (zéro) dans une formule, quelque soit son contenu.

En plus, lors du chargement de lignes dans un combo flottant, les lignes ne contenant pas une valeur numérique valide sont simplement ignorées.

Dans le programme de démo "maquett de facture", le seul changement consiste à utiliser le type 5 (combo flottant) au lieu du type 4 (combo texte). Cependant, en commentaire, il y a l'ancienne version (avec type 4) avec des explications. Tel quel, la facture fonctionne exactement comme avent. Si par contre, on désactive la ligne avec le code 5 en réactivant la ligne avec le code 4, on constate que la valeur du taux de TVA est prise comme 0 (zéro), quelque sont son contenu. Les autres calculs se déroulent normalement:

Code:
' Facture_avec_SparseGrid.bas

label userevent, creer, lire

dim SG%, res%, nom$, nom1$, ind1%, data$, fontname$, attrib$, somme, formule$, i%, ident%, lig%, col%, s$, donnee

' *** boutons des opérations
dll_on "KGF.dll"

full_space 0
caption 0,"Facture"
memo 98 : hide 98 : bar_both 98            : ' pour contenir les taux possibles de TVA
  clear 98
  item_add 98,"20"
  item_add 98,"10"
  item_add 98,"5.5"
  item_add 98,"2.1"
memo 99 : top 99,400 : left 99,10 : bar_both 99 : width 99,300 : height 99,300

on_user_event userevent

gosub creer
         
end

creer:
  SG% = dll_call1("CreateSparseGrid",17)        : ' créer un SparseGrid avec l'identifiant 1
  ' message "CreateSparseGrid: "+str$(SG%)
 
  alpha 1 : top 1,40 : left 1,25 : caption 1,"Quantité"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,1,60,0)
  alpha 2 : top 2,40 : left 2,80 : caption 2,"Libellé"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,2,200,0)
  alpha 3 : top 3,40 : left 3,355 : caption 3,"Prix unitaire"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,3,120,0)
  alpha 4 : top 4,40 : left 4,450 : caption 4,"Taux TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,4,80,0)
  alpha 5 : top 5,40 : left 5,600 : caption 5,"TVA"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,5,120,0)
  alpha 6 : top 6,40 : left 6,760 : caption 6,"Prix"
  res% = dll_call4("SetSparseGridColumnWidth",SG%,6,120,0)
  alpha 7 : top 7,30+12*30 : left 7,460 : caption 7,"Totaux:"
  alpha 8 : top 8,30+14*30 : left 8,460 : caption 8,"Acompte: "
  alpha 9 : top 9,30+16*30 : left 9,460 : caption 9,"A payer: "
 
  combo 20 : top 20,570 : left 20,400 : width 20,150
    item_add 20,"TotalTVA"
    item_add 20,"TotalTTC"
    item_add 20,"Acompte"
    item_add 20,"APayer"
  button 21 : top 21,600 : left 21,400 : width 21,150 : caption 21,"Récupérer données"
    on_click 21,lire
 
  for i%=1 to 10          : ' 10 lignes
  ' *** ligne i%
    nom$ = "Quantité"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,1)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,1,10,30+30*i%)

    nom$ = "Libellé"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),0,handle(0),i%,2)        : ' text
    res% = dll_call5("PositionSparseCell",SG%,i%,2,80,30+30*i%)

    nom$ = "PrixUnit"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,3)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,3,290,30+30*i%)

    nom$ = "TauxTVA"+str$(i%*10+1)
'    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),4,handle(0),i%,4)        : ' text combo
'        Cette ligne n'a plus de sens car l'ancien tpe 4 (Combo) a été redéfini comme TextCombo.
'        Or, un contenu texte ne peut avoir de signification dans un calcul.
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),5,handle(0),i%,4)        : ' float combo
'        Ce nouveau tpe de cellule (FloatCombo) remplace l'ancien type Combo dans ce programme.
'        Ainsi, le taux de TVA continue à être pris en compte.
    res% = dll_call5("PositionSparseCell",SG%,i%,4,420,30+30*i%)
    res% = dll_call5("LoadSparseComboCell",SG%,i%,4,1,handle(98))              : ' charger les taux TVA, sélectionner ligne 1

    nom$ = "TVA"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,5)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,5,510,30+30*i%)

    nom$ = "Prix"+str$(i%*10+1)
    res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),i%,6)        : ' money
    res% = dll_call5("PositionSparseCell",SG%,i%,6,660,30+30*i%)

  next i%
 
  nom$ = "TotalTVA"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,5)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,5,510,30+30*12)

  nom$ = "TotalTTC"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),11,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,11,6,660,30+30*12)

  nom$ = "Acompte"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),12,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,12,6,660,30+30*14)

  nom$ = "APayer"
  res% = dll_call6("CreateSparseCell",SG%,adr(nom$),3,handle(0),13,6)        : ' money
  res% = dll_call5("PositionSparseCell",SG%,13,6,660,30+30*16)

  for i%=1 to 11
    res% = dll_call5("SetSparseCellColors",SG%,0,hex("FFFF00"),i%,5)
    res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),i%,6)
  next i%
  res% = dll_call5("SetSparseCellColors",SG%,hex("FFFFFF"),hex("FF8080"),13,6)
 
  for i%=1 to 10
    formule$ = "$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]*$cell["+str$(i%)+",4]/100"     
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,1,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,3,i%,5,adr(formule$))
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,4,i%,5,adr(formule$))
    formule$ = "$cell["+str$(i%)+",5]+$cell["+str$(i%)+",1]*$cell["+str$(i%)+",3]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,i%,6,adr(formule$))

    formule$ = "$sum[1,5,10,5]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,5,11,5,adr(formule$))
    formule$ = "$sum[1,6,10,6]"
    res% = dll_call6("AddSparseCellDependancyFormula",SG%,i%,6,11,6,adr(formule$))
  next i%

  formule$ = "$cell[11,6]-$cell[12,6]"
  res% = dll_call6("AddSparseCellDependancyFormula",SG%,11,6,13,6,adr(formule$))
  formule$ = "$cell[11,6]-$cell[12,6]"
  res% = dll_call6("AddSparseCellDependancyFormula",SG%,12,6,13,6,adr(formule$))
 
  ' bloquer les cellules calculées
  res% = dll_call6("BlockSparseCells",SG%,1,5,11,6,1)
  res% = dll_call6("BlockSparseCells",SG%,13,6,13,6,1)
  ' message "BlockSparseCells: "+str$(res%)

  ' autoriser USER_EVENT sur les combos et le total à payer
  res% = dll_call6("SetSparseCellEvents",SG%,1,4,10,4,1)
  res% = dll_call6("SetSparseCellEvents",SG%,13,6,13,6,1)
 
 
  return
 
lire:
  nom$ = text$(20)
  if trim$(nom$)=""
    message "Sélectionner un nom svp"
    return
  end_if
  res% = dll_call3("GetSparseCellDataFromName",SG%,adr(nom$),adr(donnee))
  message "La cellule "+nom$+" contient la valeur de "+str$(donnee)
  return
 

' traiter USER_EVENT ici
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
  if bin_and(user_event_wparam,hex("FFFF0000"))=hex("10020000")
    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,"Combo sélection: ["+str$(lig%)+","+str$(col%)+"]"
  end_if
 
  return

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 4 Aoû 2020 - 14:12

Bonjour Klaus et bonjour à tous !

Dans ton source-exemple, les taux de TVA qui possèdent un point comme séparateur décimal ne s’affichent pas dans les combos TauxTVA.
Dans le memo 98, si je remplace les points par des virgules alors ça fonctionne.

En image : Seuls les taux 20% et 10% sont présents. Il manque les taux de 5.5% et 2.1%
KGF_dll - nouvelles versions - Page 36 Kgf110


Toujours depuis ton source-exemple, la fonction GetSparseCellDataFromName ne fonctionne pas : la valeur de la cellule ciblée n’est pas affichée. Le retour de fonction (res%) est -1.
Peut-être dû à la présence des points décimaux ?
KGF_dll - nouvelles versions - Page 36 Kgf210

Bien entendu, j'ai bien téléchargé la dernière version de KGF.

Merci Klaus et bon courage pour la suite.

EDIT :

Dans le ZIP de l’aide (KGF.chm), il y a d’encapsulé un autre zip qui contient une ancienne version de KGF.chm
En image :
KGF_dll - nouvelles versions - Page 36 Kgf310
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 4 Aoû 2020 - 14:33

Tiens, bizarre:
KGF_dll - nouvelles versions - Page 36 Aa140

et:
KGF_dll - nouvelles versions - Page 36 Aa217

Je ne m'explique pas la différence...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 4 Aoû 2020 - 14:55

KGF.dll V9.24 du 04/08/2020

Nouveautés:
- LoadSparseComboCell: convertir automatiquement "," ou "." en séparateur décimal du système

Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour.

Le fichier ZIP pour KGF.chm a été recréé proprement.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 4 Aoû 2020 - 15:12

LoadSparseComboCell : c’est bon ! cheers

GetSparseCellDataFromName* : pas bon  Crying or Very sad  

KGF.chm : c’est bon !  cheers


*Tests effectués sous Win10 et Win7


EDIT :

A toute fin utile :

Un jour tu avais demandé :
Citation :
Chez moi, le paramètre système "DecimalSeparator" est le point.

Sur tous les ordinateurs présents ici, tous installés en français, aussi bien sur Win10 que sur Win7, le "DecimalSeparator" est la virgule.
Cette précision est trouvée dans les paramètres régionaux de l'OS.

Si ça peut t'aider...
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 4 Aoû 2020 - 16:09

J'ai fait une petite correction dans KGF.dll - si tu veux bien recharger, ça devrait marcher maintenant.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


Nombre de messages : 2397
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 4 Aoû 2020 - 16:14

Yesss !

C'est parfait !

Merci Klaus !
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 4 Aoû 2020 - 16:48

Super ! Merci Marc !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyMar 11 Aoû 2020 - 11:44

KGF.dll V9.25 du 11/08/2020

Nouveautés:
- nouvelles fonctions: InitGlobalMouseHook, CreateGlobalMouseHook, KillGlobalMouseHook

Modules modifiés:
KGF.dll

La doc suivra prochainement.

Voici un programme de démo qui montre l'utilisation très simple de ces fonctions. Notons que pour la fonction CreateGlobalMouseHook, le handle à passer (ici, la liste des handles de tous les objets, y compris la form 0) est le handle de l'objet à surveiller. Ca peut être n'importe quel objet ayant un handle.

Code:
' test_InterceptMouseWheelEvents.bas

label user, fini

dim res%, nh%, event%, typ%, wp%, lp%, handles$, nobj%, i%, bloquages$

dll_on "KGF.dll"

memo 1 : bar_both 1
alpha 2 : left 2,300 : top 2,10 : caption 2,"Un alpha pour test..."
panel 3 : parent 3,0 : top 3,200 : left 3,300
edit 4 : parent 4,3 : top 4,20 : left 4,10
edit 5 : top 5,60 : left 5,300

form 11 : top 11,200 : left 11,width(0) + 10
memo 12 : parent 12,11 : bar_both 12

for i%=0 to 9
  item_add 1,str$(i%)
  item_add 12,str$(i%)
next i%
 
handles$ = str$(handle(0))+","+str$(handle(1))+","+str$(handle(3))+","+str$(handle(4))+","+str$(handle(5))
' placer un élément dans l variable bloquages$ par objet placé dans handles$
'    0 = laisser Windows traiter l'évènement molette
'    1 = bloquer l'action de Windows sur l'évènement molette
bloquages$ = "1"+","+"0"+","+"1"+","+"1"+","+"1"          : ' activer cette ligne pour laisser Windows sur le MEMO 1
' bloquages$ = "1"+","+"1"+","+"1"+","+"1"+","+"1"          : ' activer cette ligne pour bloquer l'action de la molette sur le MEMO 1

' dll_on "test_MouseHook.dll"
on_close 0,fini
on_user_event user
res% = dll_call0("InitGlobalMouseHook")
nh% = dll_call2("CreateGlobalMouseHook",adr(handles$),adr(bloquages$))
end

user:
  wp% = USER_EVENT_WPARAM
  lp% = USER_EVENT_LPARAM
  event% = bin_and(wp%,hex("FF000000"))
 
  if event%=hex("11000000")
    typ% = bin_and(wp%,hex("00FF0000"))/65536
    nobj% = bin_and(wp%,hex("FFFF"))
    select typ%
      case 1:  ' molette vers le haut
        caption 0,"Molette vers le haut: "+str$(lp%)+"  objet rang "+str$(nobj%)
'        message "Molette vers le haut: "+str$(lp%)+"  objet rang "+str$(nobj%)
      case 2:  ' molette vers le bas
        caption 0,"Molette vers le bas: "+str$(lp%)+"  objet rang "+str$(nobj%)
'        message "Molette vers le bas: "+str$(lp%)+"  objet rang "+str$(nobj%)
      case 3:  ' molette clic
        caption 0,"Molette clic"+"  objet rang "+str$(nobj%)
'        message "Molette clic"+"  objet rang "+str$(nobj%)
    end_select
  end_if
 
  return

fini:
  res% = dll_call0("KillGlobalMouseHook")
  return

Tel qu'il est présenté, ce programme de démo capte les actions de la molette, quelque soit l'endroit o* se trouve le curseur.

EDIT

J'ai apporté une modification à CreateGlobalMouseHook. J'ai ajouté un second paramètre donnant a liste des flags de bloquage pour chaque objet placé dans la liste des handles. Toujours sous forme de chaînes de caractères séparées par des ",", on place des "0" pour laisser Windows prendre en charge l'évènement molette, et "1" pour bloquer cette prise en charge.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyVen 14 Aoû 2020 - 18:42

La doc est a jour !

J'ai ajouté la doc du GlobalMouseHook (section "Gestion de la souris") et l'objet ListSelector (section "Objets").

La doc est à jour aussi bien sous forme de KGF.chm que la doc en ligne, et le fichier texte dans mon WebDav, dossier "KGF DLL" contenant les syntaxes des fonctions est à jour aussi.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 16 Aoû 2020 - 2:21

KGF.dll V9.26 du 16/08/2020

Nouveautés:
- changement techique interne concernant les USER_EVENT

Modules modifiés:
KGF.dll

La doc est à jour depuis le 14 Août 2020.

Ce changement technique est invisible de l'extérieur. Aucun changement dans les fonctions.

J'ai remplacé tous les appels à l'API SendMessage concernant les messages USER_EVENT par l'API PostMessage. Ceci était nécessaire pour prévenir un évenuel blocage de Windows si jamais le traitement dans le code Panoramic d'un USER_EVENT. Auparavent, j'attendait la fin du traitement du USER_EVENT en Panoramic pour continuer le traitement dans la DLL. Ceci était un nonsens et je ne l'ai compris que récemment, grâce à l'intervention d'un spécialiste Delphi qui m'a mis sur le bon chemin. Maintenant, le message USER_EVENT est placé dans la file d'attente des messages Windows pour le programme en question, et je continue directement le travil dans la DLL.

Je pense que vous ne devriez constater aucune différence (hormis une réactivité améliorée potentiellement). Mais si par malheur le traitement du USER_EVENT en Panoramic était plus "long" (comme en attendant par exemple une intervention utilisateur...), il n'y aura plus de blocage.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 16 Aoû 2020 - 9:13

Bonjour Klaus !

Merci pour ces précisions.

Il m'est arrivé d'avoir des plantages intempestifs mais je ne sais pas si cela venait de là ou pas...

Pour le moment je travaille sur les variables afin d'utiliser au maximum les variables locales dans les SUB.

Je me rends compte que les variables déclarées en début de programme et utilisées ensuite dans des SUB posent parfois des problèmes. Et cela se comprends si elles sont utilisées à différents endroits du programmes comme pour les boucles FOR a%...
J'essaie d’aseptiser le plus possible le code.

En attendant je vais télécharger cette dernière version de KGF et retourner au codage de GPP.
Merci Klaus. Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 16 Aoû 2020 - 11:31

Citation :
Je me rends compte que les variables déclarées en début de programme et utilisées ensuite dans des SUB posent parfois des problèmes.
C'est une remarque intéressante. Les varables globales sont utilisées dans 3 circonstances:
- dans le cours du programme principal
- dans les SUB et les fonctions Panoramic
- dans les routines évènement

Ce sont ces dernières qui posent problème. Elles peuvent en fit changer le contenu de variables globales qui sont, au moment de l'évènement, en cours d'utilisation par le programme principal et par une SUB. Et ces derniers n'en sauront rien, et ça conduit évidemment à des anomalies, même à des plantages, comme pr exemple la modification d'une variable i% servant de compteur de boucle dans une boucle FOR dans le programme principal. Plantage assuré.

Il y a deux contraintes à respecter:
1. Il faut s'assurer qu'à travers le programme entier, une variable ne serve qu'à un seul et unuque but et ne soit mas utilisée, à des endroits différents, pour des usages différents
2. Il faut s'assurer qu'en cas de survenue d'un évènement (ON_CLICK, ON_CHANGE, ON_USER_EVENT, ...), aucune des variables nécessaires pour le déroulement logique du flux principal du programme ne soit modifiée par la routine évènement.

A un moindre degré, la remarque (2) s'applique également aux routines GOSUB, aux procédures SUB et aux fonctions. Pourquoi moindre ? Parce que leur exécution est "synchrone" avec le programme principal, et le flux de programmation est parfaitement prévisible, même si une SUB peut en appeler une autre etc.

Par contre, les routines évènement peuvent frapper n'importe quand, en cours d'exécution du programme principal, d'une SUB, d'une fonction ou d'un sourpogarmme GOSUB, et MEME lors de l'exécution d'un autre évènement ! Eh oui, le traitement d'un évènement ON_CLICK peut être interrompu par un USER_EVENT qui lui-même peut être interrompu par on ON_CHANGE etc !

Pour cette raison, si un traitement d'un évènement est un peu plus "long", il est de bon usage de désactiver cet évèmenent par la fonction OFF_xxx correspondante au début de la routine évènement et de le restaurer par ON_xxx avant de sortir.

Mais ceci ne remplace pas une gestion rigoureuse des noms de variables. Techniquement, Panoramic ne connaît QUE des variables globales ! Une variable locale d'une SUB est en réalité une variable globale dont le nom porte un préfixe dérivé du nom de la SUB - c'est l'effet de la commande DIM_LOCAL. Chaque variable est visible partout, à tout moment. Et surtout modifiable...

Il faut donc déterminer une convention de nommage de variables afin d'éviter les conflits. Pour les variables définies par DIM_LOCL, pas de problème - ce nommage est réalisé automatiquement. Ceci a pour effet qu'une variable DIM S$ et une autre DIM_LOCAL S$ sont différentes, et, dans la SUB, la définition locale "prime" sur la définition globale.

Il en va autrement pour les variables globales utilisées dans un sous-programme GOSUB, dans une SUB ou dans une fonction. Là, il convient d'utiliser des noms spécifiques, parlants, afin d'assurer qu'une variable ne soit pas utilisée à tort et à travers.

Bon, trève de bavardages. Je me suis encore laissé entraîner... Mais tu vois le principe !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


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

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 EmptyDim 16 Aoû 2020 - 12:44

Merci Klaus.

C'est très bien expliqué. presque un cours complet ! Wink

J'ai voulu améliorer certaines choses ce matin mais c'est pire...
Je vais reprendre mes sauvegardes précédentes et remettre tout ça à plat.

Bon Dimanche Klaus et aussi à tous les Panoramiciens !
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 36 EmptyLun 17 Aoû 2020 - 18:10

Bonjour les amis !
Je me suis mis à jour mais je n'ai toujours pas retrouvé l'inspiration...
Embarassed
Revenir en haut Aller en bas
Contenu sponsorisé





KGF_dll - nouvelles versions - Page 36 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 36 Empty

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Revenir en haut 
Page 36 sur 40Aller à la page : Précédent  1 ... 19 ... 35, 36, 37, 38, 39, 40  Suivant
 Sujets similaires
-
» KGF_dll - nouvelles versions
» KGF_dll - nouvelles versions
» KGF_dll - nouvelles versions
» Synedit_Editor - nouvelles versions
» version instantanée PANORAMIC V 0.9.25i6 du 14/12/2013

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: