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
» Logiciel de planétarium.
KGF_dll - nouvelles versions - Page 30 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
KGF_dll - nouvelles versions - Page 30 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
KGF_dll - nouvelles versions - Page 30 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
KGF_dll - nouvelles versions - Page 30 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
KGF_dll - nouvelles versions - Page 30 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
KGF_dll - nouvelles versions - Page 30 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
KGF_dll - nouvelles versions - Page 30 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
KGF_dll - nouvelles versions - Page 30 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
KGF_dll - nouvelles versions - Page 30 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
KGF_dll - nouvelles versions - Page 30 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
KGF_dll - nouvelles versions - Page 30 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
KGF_dll - nouvelles versions - Page 30 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
KGF_dll - nouvelles versions - Page 30 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
KGF_dll - nouvelles versions - Page 30 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
KGF_dll - nouvelles versions - Page 30 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-38%
Le deal à ne pas rater :
Ecran PC gaming 23,8″ – ACER KG241Y P3bip à 99,99€
99.99 € 159.99 €
Voir le deal

 

 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 ... 16 ... 29, 30, 31 ... 35 ... 40  Suivant
AuteurMessage
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyVen 8 Mar 2019 - 1:26

D'autres nouveautés pour KGFGrid sont sur le feu - ça commence à devenir un très joli objet !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyVen 8 Mar 2019 - 10:40

Nouvelle version:
KGF.dll V8.81 du 07/03/2019

Nouveautés:
- Nouvelles fonctions: ExportKGFGridRangeDataAsCSV, ClearKGFGridRangeData, ImportKGFGridRangeDataFromCSV

Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour, y compris a doc en ligne, et les sources sont inchangées.

On peut maintenant exporter (et réimporter) tout ou partie des données d'un KGFGrid, vers (et à partir d')un fichier CSV. Avec cela, le lien vers un autre tableur (Excel, OpenOffice, ...) est facile. En plus, on peut effacer tout ou partie des données et autres contenus d'un KGFGrid, de faon très ciblée.

Dans le programme de démo suivant (toujours la facture de plomberie...), il y a 3 boutons en-dessous des KGFGrids qui en font la démonstration.
Code:
' Test_InlineCodeAvecKGFGrid.bas

label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV
dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1
  Types$(0) = "Inconnu (traité comme Integer)"
  Types$(1) = "Chaîne"
  Types$(2) = "Entier"
  Types$(3) = "Flottant"
  Types$(4) = "Booléen"
  Types$(5) = "Image"
  Types$(6) = "Mémo"
  Types$(7) = "Bouton"
  Types$(8) = "Combo"


full_space 0
memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 
memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 
memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 
memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130 

dll_on "KGF.dll"

KG1% = dll_call3("CreateKGFGrid",handle(0),1,1)                   
res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377)         
KG17% = dll_call3("CreateKGFGrid",handle(0),17,1)
res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)             

' colonnes:
'  Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC
res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25)   
res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0)     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF"))
res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25)   
res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF"))
v$ = "Arial"
res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7)
res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)

res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1)      : ' ligne des titres de colonnes
res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0)
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200)    : ' libellé
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200)   
v$ = "Libellé"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80)      : ' quantité
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80)   
v$ = "Qté"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$))
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100)    : ' prix unitaire
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100)   
v$ = "Prix U."
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100)    : ' total HT
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100)   
v$ = "Total HT"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70)      : ' taux TVA
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70)   
v$ = "Tx TVA"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100)      : ' total TTC
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100)   
v$ = "Total TTC"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$)) 

res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3)      : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000"))  : ' colonne des quantités: bordures bleues
res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03"))  : ' largeurs des bordures colonne des quantités
res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1)    : ' ne pas afficher les valeurs zéro
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3)      : ' colonnes de valeurs

res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0)  : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
v$ = "Total"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$))
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))
 
' ****** ici, placer les formules pour le prix HT par ligne
clear 130
item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)"                : ' calculer le total HT d'une ligne
item_add 130,"store(1,0,4,Result)"                             
f1$ = text$(130)
' calcul du prix HT par ligne
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$))     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) 
' ****** ici, placer les formules pour le prix TTC par ligne
clear 130
item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100"      : ' calculer le total TTC d'une ligne
item_add 130,"store(1,0,6,Result)"                              : ' placer dans le tableau
item_add 130,"Exec(17,1,4)"                                      : ' mettre le total HT général à jour
item_add 130,"Exec(17,1,6)"                                      : ' mettre le total TTC général à jour
f1$ = text$(130)
' calcul du prix TTC par ligne 
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$)) 

' total HT général
clear 130
item_add 130,"Result := Sum(1,2,4,14,4)"
f1$ = text$(130)
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) 
   
' total TTC général
clear 130
item_add 130,"Result := Sum(1,2,6,14,6)"
f1$ = text$(130)
' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$)) 
   

' rendre les colonnes libellé, quantité et prix unitaire éditables
res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)       

' la colonne des quantités contient des nombres possiblement signés     
res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)       


' ****** cas spécial pour montrer une cellule "bouton"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7)      : ' cellule (8,4) est un bouton
v$ = "Valeur de PI"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) 
f1$ = "display(pi)"
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))


' ****** cas spécial pour montrer une cellule "combo"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8)      : ' cellule (12,2) est une combo integer
clear 130
item_add 130,"1"
item_add 130,"2"
item_add 130,"3"
item_add 130,"4"
item_add 130,"5"
item_add 130,"10"
item_add 130,"15"
item_add 130,"20"
item_add 130,"25"
item_add 130,"30"
res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130))      : ' charger le contenu de la combo, sélectionner ligne 6


' ****** maintenant, mettre les valeurs en place
v$ = "Robinets de lavabo"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit
f = 3
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f))
f = 17.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f))
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))

v$ = "Parquet chêne"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) 
f = 50
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) 
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))

v$ = "Raccords cuivre"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit
f = 12
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) 
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) 
f = 10
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))

button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV"
  on_click 101,SauverCSV
button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données"
  on_click 102,EffacerGrid
button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV"
  on_click 103,RestaurerCSV


on_user_event UserEvent

end
                                           
SauverCSV:
  ' exporter les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' exporter les données des lignes 2 à 14 et de toutes les colonnes
  res% = dll_call6("ExportKGFGridRangeDataAsCSV",KG1%,2,14,1,6,adr(v$))
  return

EffacerGrid:
  ' effacer les données du Gid
  ' options d'effacement des données (ClearOption-xxx)
  '  coInteger    =  $001;    //  1
  '  coFloat      =  $002;    //  2
  '  coString      =  $004;    //  4
  '  coCheckBox    =  $008;    //  8
  '  coImage      =  $010;    //  16
  '  coMemo        =  $020;    //  32
  '  coComboIndex  =  $040;    //  64
  '  coComboText  =  $080;    // 128
  '  coButton      =  $100;    // 256
  '  coFormula    =  $200;    // 512
  ' effacer les données des lignes 2 à 14 et de toutes les colonnes
  ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos
  res% = dll_call6("ClearKGFGridRangeData",KG1%,2,14,1,6,1+2+4+64)
  return

RestaurerCSV:
  ' restaurer les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' restaurer les données des lignes 2 à 14 et de toutes les colonnes                           
  res% = dll_call6("ImportKGFGridRangeDataFromCSV",KG1%,2,14,1,6,adr(v$))
  return

UserEvent:
  UserEvent()
  return
 
sub UserEvent()
  dim_local lig%, col%, event%, id%, type%, res$, f
  if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub
  if (bin_and(user_event_wparam,hex("00FF0000"))<hex("00010000")) and (bin_and(user_event_wparam,hex("00FF0000"))>hex("00050000")) then exit_sub
  event% = bin_and(user_event_wparam,hex("00FF0000"))/65536
  id% = bin_and(user_event_wparam,hex("0000FFFF"))
  col% = user_event_lparam/65536
  lig% = bin_and(user_event_lparam,hex("0000FFFF"))
'  delete 1
'  picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1
'  clear 2
  type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%)              : ' ok
  select type%
    case 0: ' Inconnu
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 1: ' Chaîne
      res$ = string$(255," ")
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok
      res$ = trim$(res$)
    case 2: ' Entier
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 3: ' flottant
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f))    : ' ok
      res$ = str$(f)
    case 4: ' Booleen
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 5: ' Image
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
'      clipboard_paste 1
    case 6: ' Mémo
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok
  end_select

  select event%
    case 1: ' cellule normale
      message "clic dans KGFGrid  Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$
    case 2: ' cellule bouton
      message "clic dans KGFGrid  Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)
      exit_sub
    case 3: ' cellule combo Integer   
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 4: ' cellule combo Floating
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 5: ' cellule combo String
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
  end_select
 
  if type%=4
    res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%)        : ' ok
  end_if
  res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100))
  res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110))
  res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120))
 
 
 
if 1=2      : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture !
  ' ici, retourner le contenu de la cellule cliquée par code Inline:
  clear 130
  item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
  message "Contenu numérique de la cellule cliquée: "+str$(value)
 
  ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline
  clear 130
  item_add 130,"Sum(1,3,2,4,5)"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
                                               
  ' ici, stocker cette somme dans la cellule (8,6)
  clear 130
  item_add 130,"store(1,8,6,"+str$(value)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
 
  ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition
  clear 130
  item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)"
  item_add 130,"store(1,10,6,C)"                             
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
end_if           
                                                 
end_sub

On a maintenant un outil très puissant. Juste pour mémoire: cet objet n'est pas basé sur l'objet GRID de Panoramic, ni sur l'objet TStringGrid de Delphi. C'est une création indépendante de ma propre conception.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Kgf.dll   KGF_dll - nouvelles versions - Page 30 EmptyVen 8 Mar 2019 - 13:46

Bonjour Klaus.

J'ai vu hier sur le Forum, que tu avais ajouté  une commande afin de pouvoir saisir directement sur un KGFGRID.

Aujourd'hui je n’arrive plus à le retrouver..

Peux tu STP me donner le lien.

Merci.

Lepetitmarocain
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyVen 8 Mar 2019 - 14:12

Citation :
Peux tu STP me donner le lien.

Eh bien, en bas de la signature de chacun de mes posts, tu as un lien " KGF.dll (en format ZIP)". Un clic sur ce lien télécharge la DLL (dans un fichier ZIP).
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyVen 8 Mar 2019 - 16:04

Remarque à tous et principalement à Lepetitmarocain :
Les liens de la signature n’apparaissent que si l’on est connecté.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: KGF.DLL   KGF_dll - nouvelles versions - Page 30 EmptySam 9 Mar 2019 - 14:24

Bonjour à tous.

Merci Klaus & Papydall pour vos explications.

Par contre j'ai bien chargé la dernière version de KGF.DLL et mes programme plantent sans avoir fait aucune modif.

J' avais conservé une ancienne version de cette DLL (Précaution d'un informaticien) et mes programmes refonctionnent.

Y a t'il un Bug dans la DLL.

Merci pour ta réponse Klaus

Sad Sad
Revenir en haut Aller en bas
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptySam 9 Mar 2019 - 14:33

Nouvelle version:
KGF.dll V8.82 du 09/03/2019

Nouveautés:
- Nouvelle fonctions: KGFGridVisible

Modules modifiés:
KGF.dll
KGF.chm

La doc est à jour, y compris a doc en ligne, et les sources sont inchangées.

Cette fonction permet de rendre visible ou invisible un objet KGFGrid. C'est l'équivalent des commandes HIDE et SHOW de Panoramic. Ainsi, on peut même déclarer plusieurs KGFGrid au même endroit, dans une fenêtre, et rendre un de ces objets visible selon les besoins.

Le programme de démo ci-après a été modifié pour montrer l'effet de cette commande. Un nouveau bouton en bas de la fenêtre permet de cacher et réafficher l'objet, en alternance. Si vous le cachez, un libellé normalement recouvert par le KGFGrid devient visible.

Par ailleurs, le premier KGFGrid a été agrandi en nombre de lignes et colonnes, de sorte à ne plus tenir exactement dans la fenêtre d'affichage. Automatiquement, des ascenseurs apparaissent, et on peut déplacer le KGFGrid comme on veut. Un clic dans une cellule reste néanmoins indentifié correctement sans décalage. L'effet est assez sympa.

Voici le code:
Code:
' Test_InlineCodeAvecKGFGrid.bas

label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV
label CacherMontrer
dim visib%
visib% = 1
dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1
  Types$(0) = "Inconnu (traité comme Integer)"
  Types$(1) = "Chaîne"
  Types$(2) = "Entier"
  Types$(3) = "Flottant"
  Types$(4) = "Booléen"
  Types$(5) = "Image"
  Types$(6) = "Mémo"
  Types$(7) = "Bouton"
  Types$(8) = "Combo"


full_space 0 
' color 0,255,0,0
memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 
memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 
memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 
memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130 

dll_on "KGF.dll"

' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1)                   
KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1)                   
res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377)         
' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1)
KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1)
res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)             

' colonnes:
'  Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC
' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25)    : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue
res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25)    : ' activer cette ligne pour un tableau plus grand avec ascenseurs
res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0)     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF"))
res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25)   
res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF"))
v$ = "Arial"
res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7)
res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)

res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1)      : ' ligne des titres de colonnes
res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0)
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200)    : ' libellé
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200)   
v$ = "Libellé"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80)      : ' quantité
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80)   
v$ = "Qté"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$))
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100)    : ' prix unitaire
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100)   
v$ = "Prix U."
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100)    : ' total HT
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100)   
v$ = "Total HT"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70)      : ' taux TVA
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70)   
v$ = "Tx TVA"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100)      : ' total TTC
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100)   
v$ = "Total TTC"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$)) 

res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3)      : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000"))  : ' colonne des quantités: bordures bleues
res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03"))  : ' largeurs des bordures colonne des quantités
res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1)    : ' ne pas afficher les valeurs zéro
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3)      : ' colonnes de valeurs

res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0)  : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
v$ = "Total"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$))
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))
 
' ****** ici, placer les formules pour le prix HT par ligne
clear 130
item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)"                : ' calculer le total HT d'une ligne
item_add 130,"store(1,0,4,Result)"                             
f1$ = text$(130)
' calcul du prix HT par ligne
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$))     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) 
' ****** ici, placer les formules pour le prix TTC par ligne
clear 130
item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100"      : ' calculer le total TTC d'une ligne
item_add 130,"store(1,0,6,Result)"                              : ' placer dans le tableau
item_add 130,"Exec(17,1,4)"                                      : ' mettre le total HT général à jour
item_add 130,"Exec(17,1,6)"                                      : ' mettre le total TTC général à jour
f1$ = text$(130)
' calcul du prix TTC par ligne 
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$)) 

' total HT général
clear 130
item_add 130,"Result := Sum(1,2,4,14,4)"
f1$ = text$(130)
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) 
   
' total TTC général
clear 130
item_add 130,"Result := Sum(1,2,6,14,6)"
f1$ = text$(130)
' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$)) 
   

' rendre les colonnes libellé, quantité et prix unitaire éditables
res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)       

' la colonne des quantités contient des nombres possiblement signés     
res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)       


' ****** cas spécial pour montrer une cellule "bouton"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7)      : ' cellule (8,4) est un bouton
v$ = "Valeur de PI"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) 
f1$ = "display(pi)"
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))


' ****** cas spécial pour montrer une cellule "combo"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8)      : ' cellule (12,2) est une combo integer
clear 130
item_add 130,"1"
item_add 130,"2"
item_add 130,"3"
item_add 130,"4"
item_add 130,"5"
item_add 130,"10"
item_add 130,"15"
item_add 130,"20"
item_add 130,"25"
item_add 130,"30"
res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130))      : ' charger le contenu de la combo, sélectionner ligne 6


' ****** maintenant, mettre les valeurs en place
v$ = "Robinets de lavabo"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit
f = 3
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f))
f = 17.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f))
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))

v$ = "Parquet chêne"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) 
f = 50
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) 
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))

v$ = "Raccords cuivre"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit
f = 12
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) 
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) 
f = 10
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))

button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV"
  on_click 101,SauverCSV
button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données"
  on_click 102,EffacerGrid
button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV"
  on_click 103,RestaurerCSV

button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer"
  on_click 104,CacherMontrer
alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !"
  font_bold 106 : font_size 106,28

on_user_event UserEvent

end
                                           
SauverCSV:
  ' exporter les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' exporter les données des lignes 2 à 14 et de toutes les colonnes
  res% = dll_call6("ExportKGFGridRangeDataAsCSV",KG1%,2,14,1,6,adr(v$))
  return

EffacerGrid:
  ' effacer les données du Gid
  ' options d'effacement des données (ClearOption-xxx)
  '  coInteger    =  $001;    //  1
  '  coFloat      =  $002;    //  2
  '  coString      =  $004;    //  4
  '  coCheckBox    =  $008;    //  8
  '  coImage      =  $010;    //  16
  '  coMemo        =  $020;    //  32
  '  coComboIndex  =  $040;    //  64
  '  coComboText  =  $080;    // 128
  '  coButton      =  $100;    // 256
  '  coFormula    =  $200;    // 512
  ' effacer les données des lignes 2 à 14 et de toutes les colonnes
  ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos
  res% = dll_call6("ClearKGFGridRangeData",KG1%,2,14,1,6,1+2+4+64)
  return

RestaurerCSV:
  ' restaurer les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' restaurer les données des lignes 2 à 14 et de toutes les colonnes                           
  res% = dll_call6("ImportKGFGridRangeDataFromCSV",KG1%,2,14,1,6,adr(v$))
  return
 
CacherMontrer:
  visib% = 1 - visib%
  res% = DLL_call2("KGFGridVisible",KG1%,visib%)
  return
   
UserEvent:
  UserEvent()
  return
 
sub UserEvent()
  dim_local lig%, col%, event%, id%, type%, res$, f
  if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub
  if (bin_and(user_event_wparam,hex("00FF0000"))<hex("00010000")) and (bin_and(user_event_wparam,hex("00FF0000"))>hex("00050000")) then exit_sub
  event% = bin_and(user_event_wparam,hex("00FF0000"))/65536
  id% = bin_and(user_event_wparam,hex("0000FFFF"))
  col% = user_event_lparam/65536
  lig% = bin_and(user_event_lparam,hex("0000FFFF"))
'  delete 1
'  picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1
'  clear 2
  type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%)              : ' ok
  select type%
    case 0: ' Inconnu
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 1: ' Chaîne
      res$ = string$(255," ")
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok
      res$ = trim$(res$)
    case 2: ' Entier
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 3: ' flottant
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f))    : ' ok
      res$ = str$(f)
    case 4: ' Booleen
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 5: ' Image
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
'      clipboard_paste 1
    case 6: ' Mémo
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok
  end_select

  select event%
    case 1: ' cellule normale
      message "clic dans KGFGrid  Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$
    case 2: ' cellule bouton
      message "clic dans KGFGrid  Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)
      exit_sub
    case 3: ' cellule combo Integer   
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 4: ' cellule combo Floating
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 5: ' cellule combo String
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
  end_select
 
  if type%=4
    res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%)        : ' ok
  end_if
  res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100))
  res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110))
  res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120))
 
 
 
if 1=2      : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture !
  ' ici, retourner le contenu de la cellule cliquée par code Inline:
  clear 130
  item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
  message "Contenu numérique de la cellule cliquée: "+str$(value)
 
  ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline
  clear 130
  item_add 130,"Sum(1,3,2,4,5)"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
                                               
  ' ici, stocker cette somme dans la cellule (8,6)
  clear 130
  item_add 130,"store(1,8,6,"+str$(value)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
 
  ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition
  clear 130
  item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)"
  item_add 130,"store(1,10,6,C)"                             
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
end_if           
                                                 
end_sub

Les fonctionnalités me semblent assez complètes, maintenant. Pour d''éventuels ajout, j'attendrai vos commentaires et vos besoins...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptySam 9 Mar 2019 - 14:40

On s'est croisé. Chez moi, tout fonctionne normalement. J'utilise la version Panoramic suivante:
KGF_dll - nouvelles versions - Page 30 Aa116

Voici le résultat:
KGF_dll - nouvelles versions - Page 30 Aa212
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptySam 9 Mar 2019 - 15:04

@lepetitmarocain:
Je voudrais te demander un service. Ce fil de discussion est en principe réservé pour mes posts d'annonce de nouvelles versions, avec la documentation des nouvelles possibilités. Dans l'intérêt de la facilité de consultation pour les autres Panoramiciens, j'ai créé d'autres fils de discussion:

- pour signaler un possible bug dans KGF.dll:
https://panoramic.1fr1.net/t5322-kgf-dll-bug-ou-pas

- pour signaler un problème dans la doc (KGF.chm)
https://panoramic.1fr1.net/t5095-kgf-chm-problemes-erreurs-ou-anomlies-dans-la-doc

- pour demander ou suggérer des modifs ou ajouts à KGF.dll:
https://panoramic.1fr1.net/t5296-kgf-dll-demandes-ou-suggestions-de-modifications-ou-ajouts

Tu vois je me suis organisé, pour plus de clarté. Tu veux bien suivre ce modèle, stp ? Merci !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyLun 11 Mar 2019 - 22:38

Nouvelle version:
KGF.dll V8.83 du 11/03/2019

Nouveautés:
- Nouvelles fonctions: SetKGFGridRangeAlerts, GetKGFGridCellAlert

Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour, y compris a doc en ligne, et les sources sont inchangées.

Voici mon travail du week-end. La fonction SetKGFGridRangeAlerts permet de définir des contrôles sur des cellules numériques et les afficher avec une couleur de fond et/ou de police différentes si leur valeur n'est pas comprise dans une intervalle spécifiée dans la fonction. La fonction GetKGFGridCellAlert permet de retourner l'état d'alerte pour une cellule spécifique.

Dans le programme de démo suivant (toujours l'éternelle facture), la colonne 3 est déclarée contrôlée sur une intervalle comprise entre 50 et 500, avec un fond jaune en cas d'anomalie. C'est la colonne des prix unitaires, donc cela a relativement peu de sens pratique, mais cela permet de mettre facilement le dispositif en évidence. Dans la facture, deux prix sur 3 sont en anomalie, et donc affichés sur fond jaune. Si vous faites un clic droit sur une de ces cellules et saisissez un montant valide entre 50 et 500, le fond jaune disparaît. Tout ceci est entièrement automatique.

Voici le programme:
Code:
' Test_InlineCodeAvecKGFGrid.bas

label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV
label CacherMontrer, SauverDansFichier
dim visib%
visib% = 1
dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1
  Types$(0) = "Inconnu (traité comme Integer)"
  Types$(1) = "Chaîne"
  Types$(2) = "Entier"
  Types$(3) = "Flottant"
  Types$(4) = "Booléen"
  Types$(5) = "Image"
  Types$(6) = "Mémo"
  Types$(7) = "Bouton"
  Types$(8) = "Combo"


full_space 0 : to_foreground 0  
' color 0,255,0,0
memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100  
memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110  
memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120  
memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130  

dll_on "KGF.dll"

' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1)                    
KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1)                    
res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377)          
' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1)
KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1)
res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)              


' colonnes:
'  Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC
' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25)     : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue
res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25)    : ' activer cette ligne pour un tableau plus grand avec ascenseurs
res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0)      
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF"))
res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25)    
res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF"))
v$ = "Arial"
res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12)    
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7)
res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12)    
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)

res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1)      : ' ligne des titres de colonnes
res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0)
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200)     : ' libellé
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200)    
v$ = "Libellé"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$))  
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80)      : ' quantité
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80)    
v$ = "Qté"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$))
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100)     : ' prix unitaire
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100)    
v$ = "Prix U."
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$))  
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100)     : ' total HT
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100)    
v$ = "Total HT"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$))  
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70)      : ' taux TVA
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70)    
v$ = "Tx TVA"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$))  
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100)      : ' total TTC
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100)    
v$ = "Total TTC"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$))  

res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3)      : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000"))  : ' colonne des quantités: bordures bleues
res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03"))  : ' largeurs des bordures colonne des quantités
res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1)    : ' ne pas afficher les valeurs zéro
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3)      : ' colonnes de valeurs

res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0)   : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
v$ = "Total"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$))
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))

' ****** mettre une alerte de valeurs sur la colonne 3 (prix unitaire): entre 50,00 et 500,00
v$ = "1, 50,500, 255,255,0, 0,0,0"
res% = dll_call6("SetKGFGridRangeAlerts",KG1%,2,14,3,3,adr(v$))

' ****** ici, placer les formules pour le prix HT par ligne
clear 130
item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)"                 : ' calculer le total HT d'une ligne
item_add 130,"store(1,0,4,Result)"                              
f1$ = text$(130)
' calcul du prix HT par ligne
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0)              
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$))      
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF"))  
' ****** ici, placer les formules pour le prix TTC par ligne
clear 130
item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100"       : ' calculer le total TTC d'une ligne
item_add 130,"store(1,0,6,Result)"                               : ' placer dans le tableau
item_add 130,"Exec(17,1,4)"                                      : ' mettre le total HT général à jour
item_add 130,"Exec(17,1,6)"                                      : ' mettre le total TTC général à jour
f1$ = text$(130)
' calcul du prix TTC par ligne  
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0)              
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$))  

' total HT général
clear 130
item_add 130,"Result := Sum(1,2,4,14,4)"
f1$ = text$(130)
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)              
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$))  
    
' total TTC général
clear 130
item_add 130,"Result := Sum(1,2,6,14,6)"
f1$ = text$(130)
' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)              
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$))  
    

' rendre les colonnes libellé, quantité et prix unitaire éditables
res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)        

' la colonne des quantités contient des nombres possiblement signés      
res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)        


' ****** cas spécial pour montrer une cellule "bouton"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7)      : ' cellule (8,4) est un bouton
v$ = "Valeur de PI"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$))  
f1$ = "display(pi)"
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))


' ****** cas spécial pour montrer une cellule "combo"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8)      : ' cellule (12,2) est une combo integer
clear 130
item_add 130,"1"
item_add 130,"2"
item_add 130,"3"
item_add 130,"4"
item_add 130,"5"
item_add 130,"10"
item_add 130,"15"
item_add 130,"20"
item_add 130,"25"
item_add 130,"30"
res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130))      : ' charger le contenu de la combo, sélectionner ligne 6


' ****** maintenant, mettre les valeurs en place
v$ = "Robinets de lavabo"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit
f = 3
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f))
f = 17.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f))
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))

v$ = "Parquet chêne"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f))  
f = 50
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f))  
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))

v$ = "Raccords cuivre"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit
f = 12
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f))  
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f))  
f = 10
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))

button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV"
  on_click 101,SauverCSV
button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données"
  on_click 102,EffacerGrid
button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV"
  on_click 103,RestaurerCSV

button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer"
  on_click 104,CacherMontrer
button 105 : top 105,580 : left 105,220 : width 105,200 : caption 105,"Sauver dans Fichier"
  on_click 105,SauverDansFichier
alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !"
  font_bold 106 : font_size 106,28

on_user_event UserEvent

end
      
SauverDansFichier:                                            
  v$ = "KGFGrid_Alert.txt"
  res% = dll_call2("SaveKGFGridToFile",KG1%,adr(v$))
  return

SauverCSV:
  ' exporter les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' exporter les données des lignes 2 à 14 et de toutes les colonnes
  res% = dll_call6("ExportKGFGridRangeDataAsCSV",KG1%,2,14,1,6,adr(v$))
  return

EffacerGrid:
  ' effacer les données du Gid
  ' options d'effacement des données (ClearOption-xxx)
  '   coInteger     =  $001;     //   1
  '   coFloat       =  $002;     //   2
  '   coString      =  $004;     //   4
  '   coCheckBox    =  $008;     //   8
  '   coImage       =  $010;     //  16
  '   coMemo        =  $020;     //  32
  '   coComboIndex  =  $040;     //  64
  '   coComboText   =  $080;     // 128
  '   coButton      =  $100;     // 256
  '   coFormula     =  $200;     // 512
  ' effacer les données des lignes 2 à 14 et de toutes les colonnes
  ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos
  res% = dll_call6("ClearKGFGridRangeData",KG1%,2,14,1,6,1+2+4+64)
  return

RestaurerCSV:
  ' restaurer les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' restaurer les données des lignes 2 à 14 et de toutes les colonnes                            
  res% = dll_call6("ImportKGFGridRangeDataFromCSV",KG1%,2,14,1,6,adr(v$))
  return
  
CacherMontrer:
  visib% = 1 - visib%
  res% = DLL_call2("KGFGridVisible",KG1%,visib%)
  return
    
UserEvent:
  UserEvent()
  return
  
sub UserEvent()
  dim_local lig%, col%, event%, id%, type%, res$, f
  if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub
  if (bin_and(user_event_wparam,hex("00FF0000"))<hex("00010000")) and (bin_and(user_event_wparam,hex("00FF0000"))>hex("00050000")) then exit_sub
  event% = bin_and(user_event_wparam,hex("00FF0000"))/65536
  id% = bin_and(user_event_wparam,hex("0000FFFF"))
  col% = user_event_lparam/65536
  lig% = bin_and(user_event_lparam,hex("0000FFFF"))
'  delete 1
'  picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1
'  clear 2
  type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%)               : ' ok
  select type%
    case 0: ' Inconnu
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)         : ' ok
      res$ = str$(res%)
    case 1: ' Chaîne
      res$ = string$(255," ")
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok
      res$ = trim$(res$)
    case 2: ' Entier
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)         : ' ok
      res$ = str$(res%)
    case 3: ' flottant
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f))    : ' ok
      res$ = str$(f)
    case 4: ' Booleen
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)         : ' ok
      res$ = str$(res%)
    case 5: ' Image
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)         : ' ok
'      clipboard_paste 1
    case 6: ' Mémo
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok
  end_select

  select event%
    case 1: ' cellule normale
      message "clic dans KGFGrid   Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$
    case 2: ' cellule bouton
      message "clic dans KGFGrid   Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)
      exit_sub
    case 3: ' cellule combo Integer    
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid   Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 4: ' cellule combo Floating
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid   Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 5: ' cellule combo String
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid   Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
  end_select
  
  if type%=4
    res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%)        : ' ok
  end_if
  res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100))
  res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110))
  res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120))
  
  
  
if 1=2       : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture !
  ' ici, retourner le contenu de la cellule cliquée par code Inline:
  clear 130
  item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
  message "Contenu numérique de la cellule cliquée: "+str$(value)
  
  ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline
  clear 130
  item_add 130,"Sum(1,3,2,4,5)"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
                                                
  ' ici, stocker cette somme dans la cellule (8,6)
  clear 130
  item_add 130,"store(1,8,6,"+str$(value)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
  
  ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition
  clear 130
  item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)"
  item_add 130,"store(1,10,6,C)"                              
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
end_if            
                                                  
end_sub

Et voici ce dont ça a l'air:
KGF_dll - nouvelles versions - Page 30 Aa117
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMar 12 Mar 2019 - 17:13

Nouvelle version:
KGF.dll V8.84 du 13/03/2019

Nouveautés:
- Nouvelle fonction: DownloadFileUrlISO

Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour, y compris a doc en ligne, et les sources sont inchangées.

Cette fonction est identique à l'ancienne fonction DownloadFile (qui continue d'exister !). La différence réside dans l'encodage de l'URL. Pour pouvoir tenir compte correctement des caractères accentués français, ceux-ci sont automatiquement convertis en codes ISO, avant l'envoi de l'URL. Voir la documentation pour plus d'informations.

Une page d'information sur le codage:
https://www.utf8-chartable.de/unicode-utf8-table.pl
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 13 Mar 2019 - 12:28

Nouvelle version:
KGF.dll V8.85 du 13/03/2019

Nouveautés:
- renommer SetKGFGridRangeAlerts en SetKGFGridCellRangeAlerts
- renommer ClearKGFGridRangeData en ClearKGFGridCellRangeData
- renommer ExportKGFGridRangeDataAsCSV en ExportKGFGridCellRangeDataAsCSV
- renommer ImportKGFGridRangeDataFromCSV en ImportKGFGridCellRangeDataFromCSV


Modules modifiés:
KGF.dll
KGF.chm

La doc est à jour, y compris a doc en ligne, et les sources sont inchangées.

Ceci est une mise à jour technique, sans modification ni ajout de fonctionnalité. Mais j'ai noté que le nommage de ces fonctions n'était pas cohérent avec la règle appliquée pour les autres fonctions de ce groupe, et j'ai donc harmonisée cela.

Voici le programme de démo, avec les corrections nécessaires:
Code:
' Test_InlineCodeAvecKGFGrid.bas

label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV
label CacherMontrer, SauverDansFichier
dim visib%
visib% = 1
dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1
  Types$(0) = "Inconnu (traité comme Integer)"
  Types$(1) = "Chaîne"
  Types$(2) = "Entier"
  Types$(3) = "Flottant"
  Types$(4) = "Booléen"
  Types$(5) = "Image"
  Types$(6) = "Mémo"
  Types$(7) = "Bouton"
  Types$(8) = "Combo"


full_space 0 : to_foreground 0 
' color 0,255,0,0
memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 
memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 
memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 
memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130 

dll_on "KGF.dll"

' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1)                   
KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1)                   
res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377)         
' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1)
KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1)
res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)             


' colonnes:
'  Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC
' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25)    : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue
res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25)    : ' activer cette ligne pour un tableau plus grand avec ascenseurs
res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0)     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF"))
res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25)   
res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF"))
v$ = "Arial"
res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7)
res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)

res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1)      : ' ligne des titres de colonnes
res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0)
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200)    : ' libellé
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200)   
v$ = "Libellé"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80)      : ' quantité
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80)   
v$ = "Qté"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$))
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100)    : ' prix unitaire
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100)   
v$ = "Prix U."
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100)    : ' total HT
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100)   
v$ = "Total HT"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70)      : ' taux TVA
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70)   
v$ = "Tx TVA"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100)      : ' total TTC
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100)   
v$ = "Total TTC"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$)) 

res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3)      : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000"))  : ' colonne des quantités: bordures bleues
res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03"))  : ' largeurs des bordures colonne des quantités
res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1)    : ' ne pas afficher les valeurs zéro
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3)      : ' colonnes de valeurs

res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0)  : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
v$ = "Total"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$))
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))

' ****** mettre une alerte de valeurs sur la colonne 3 (prix unitaire): entre 50,00 et 500,00
v$ = "1, 50,500, 255,255,0, 0,0,0"
res% = dll_call6("SetKGFGridCellRangeAlerts",KG1%,2,14,3,3,adr(v$))

' ****** ici, placer les formules pour le prix HT par ligne
clear 130
item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)"                : ' calculer le total HT d'une ligne
item_add 130,"store(1,0,4,Result)"                             
f1$ = text$(130)
' calcul du prix HT par ligne
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$))     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) 
' ****** ici, placer les formules pour le prix TTC par ligne
clear 130
item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100"      : ' calculer le total TTC d'une ligne
item_add 130,"store(1,0,6,Result)"                              : ' placer dans le tableau
item_add 130,"Exec(17,1,4)"                                      : ' mettre le total HT général à jour
item_add 130,"Exec(17,1,6)"                                      : ' mettre le total TTC général à jour
f1$ = text$(130)
' calcul du prix TTC par ligne 
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$)) 

' total HT général
clear 130
item_add 130,"Result := Sum(1,2,4,14,4)"
f1$ = text$(130)
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) 
   
' total TTC général
clear 130
item_add 130,"Result := Sum(1,2,6,14,6)"
f1$ = text$(130)
' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$)) 
   

' rendre les colonnes libellé, quantité et prix unitaire éditables
res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)       

' la colonne des quantités contient des nombres possiblement signés     
res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)       


' ****** cas spécial pour montrer une cellule "bouton"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7)      : ' cellule (8,4) est un bouton
v$ = "Valeur de PI"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) 
f1$ = "display(pi)"
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))


' ****** cas spécial pour montrer une cellule "combo"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8)      : ' cellule (12,2) est une combo integer
clear 130
item_add 130,"1"
item_add 130,"2"
item_add 130,"3"
item_add 130,"4"
item_add 130,"5"
item_add 130,"10"
item_add 130,"15"
item_add 130,"20"
item_add 130,"25"
item_add 130,"30"
res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130))      : ' charger le contenu de la combo, sélectionner ligne 6


' ****** maintenant, mettre les valeurs en place
v$ = "Robinets de lavabo"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit
f = 3
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f))
f = 17.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f))
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))

v$ = "Parquet chêne"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) 
f = 50
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) 
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))

v$ = "Raccords cuivre"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit
f = 12
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) 
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) 
f = 10
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))

button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV"
  on_click 101,SauverCSV
button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données"
  on_click 102,EffacerGrid
button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV"
  on_click 103,RestaurerCSV

button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer"
  on_click 104,CacherMontrer
button 105 : top 105,580 : left 105,220 : width 105,200 : caption 105,"Sauver dans Fichier"
  on_click 105,SauverDansFichier
alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !"
  font_bold 106 : font_size 106,28

on_user_event UserEvent

end
     
SauverDansFichier:                                           
  v$ = "KGFGrid_Alert.txt"
  res% = dll_call2("SaveKGFGridToFile",KG1%,adr(v$))
  return

SauverCSV:
  ' exporter les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' exporter les données des lignes 2 à 14 et de toutes les colonnes
  res% = dll_call6("ExportKGFGridCellRangeDataAsCSV",KG1%,2,14,1,6,adr(v$))
  return

EffacerGrid:
  ' effacer les données du Gid
  ' options d'effacement des données (ClearOption-xxx)
  '  coInteger    =  $001;    //  1
  '  coFloat      =  $002;    //  2
  '  coString      =  $004;    //  4
  '  coCheckBox    =  $008;    //  8
  '  coImage      =  $010;    //  16
  '  coMemo        =  $020;    //  32
  '  coComboIndex  =  $040;    //  64
  '  coComboText  =  $080;    // 128
  '  coButton      =  $100;    // 256
  '  coFormula    =  $200;    // 512
  ' effacer les données des lignes 2 à 14 et de toutes les colonnes
  ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos
  res% = dll_call6("ClearKGFGridCellRangeData",KG1%,2,14,1,6,1+2+4+64)
  return

RestaurerCSV:
  ' restaurer les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' restaurer les données des lignes 2 à 14 et de toutes les colonnes                           
  res% = dll_call6("ImportKGFGridCellRangeDataFromCSV",KG1%,2,14,1,6,adr(v$))
  return
 
CacherMontrer:
  visib% = 1 - visib%
  res% = DLL_call2("KGFGridVisible",KG1%,visib%)
  return
   
UserEvent:
  UserEvent()
  return
 
sub UserEvent()
  dim_local lig%, col%, event%, id%, type%, res$, f
  if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub
  if (bin_and(user_event_wparam,hex("00FF0000"))<hex("00010000")) and (bin_and(user_event_wparam,hex("00FF0000"))>hex("00050000")) then exit_sub
  event% = bin_and(user_event_wparam,hex("00FF0000"))/65536
  id% = bin_and(user_event_wparam,hex("0000FFFF"))
  col% = user_event_lparam/65536
  lig% = bin_and(user_event_lparam,hex("0000FFFF"))
'  delete 1
'  picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1
'  clear 2
  type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%)              : ' ok
  select type%
    case 0: ' Inconnu
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 1: ' Chaîne
      res$ = string$(255," ")
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok
      res$ = trim$(res$)
    case 2: ' Entier
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 3: ' flottant
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f))    : ' ok
      res$ = str$(f)
    case 4: ' Booleen
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 5: ' Image
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
'      clipboard_paste 1
    case 6: ' Mémo
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok
  end_select

  select event%
    case 1: ' cellule normale
      message "clic dans KGFGrid  Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$
    case 2: ' cellule bouton
      message "clic dans KGFGrid  Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)
      exit_sub
    case 3: ' cellule combo Integer   
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 4: ' cellule combo Floating
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 5: ' cellule combo String
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
  end_select
 
  if type%=4
    res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%)        : ' ok
  end_if
  res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100))
  res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110))
  res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120))
 
 
 
if 1=2      : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture !
  ' ici, retourner le contenu de la cellule cliquée par code Inline:
  clear 130
  item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
  message "Contenu numérique de la cellule cliquée: "+str$(value)
 
  ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline
  clear 130
  item_add 130,"Sum(1,3,2,4,5)"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
                                               
  ' ici, stocker cette somme dans la cellule (8,6)
  clear 130
  item_add 130,"store(1,8,6,"+str$(value)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
 
  ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition
  clear 130
  item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)"
  item_add 130,"store(1,10,6,C)"                             
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
end_if           
                                                 
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 13 Mar 2019 - 19:14

Je viens de republier la doc pour corriger une anomalie dans la doc de la fonction CreateKGFGrid.

EDIT
.
J'ai un autre conseil à te donner. Tes colonnes sont visiblement destinées à recevoir des données de nature et longueur différentes (D/C, libellé, montant, ...). Il seraqit judicieux de paramétrer la largeur des colonnes en fonction de la longueur des données censées être affichées dans ces colonnes. Sinon, cela risque dêtre assez illisible.

De manière générale, il faudrait se contraindre à une certaine rigueur et logique dans la configuration d'un tel objet, par nature très complexe:
1. création
2. positionnement dans la fenêtre et dimensions globales
3. définition du nombre de lignes et colonnes
4. définition de la largeur de chaque colonne, en fonction de ce qu'il y aura à y afficher
5. idem pour la hauteur des lignes, le cas échéant
6. Il serait judicieux de réserver la ligne 1 comme ligne de libellés dans laquelle on affiche des titres pour chaque colonne. Cette ligne ne devrait pas être "active" et, si possible, avoir une couleur de fond différente, potentiellement plus foncée, que les autres cellules. Elle devrait également avoir l'attribur texte "gras" afin de bien créer la différence visuelle
7. définir l'ensemble des bordures (présence, largeur, couleur, ...) pour mieux structurer le tableau. Ceci est particulièrement important pour des tableaux vastes comme le tien
8. définir les couleurs de fond et tous les attributs des polices des textes, pour chaque cellule, probablement par colonne dans ton cas
9. faire, de façon générale, toutes les configurations du tableau avant l'installation des données (alertes sur fourchette et autres...)
10. charger les formules de calcul (s'il y en a) dans les cellules concernées

Et c'est seulement après cela qu'il convient de charger les données.

Afin d'améliorer la lisibilité et la maintenabilité de ton programme, il serait utile de placer tout ce qui concerne les points 1 à 10 dans une SUB de configuration qui sera appelée une seule fois, au démarrage du programme. Ensuite, tu n'a plus qu'à t'occuper des données.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyJeu 14 Mar 2019 - 15:27

Nouvelle version:
KGF.dll V8.86 du 14/03/2019

Nouveautés:
- nouvelles fonctions: SetKGFGridCellExternalEdit, ImportKGFGridCellRangeExternalEdit
- doc: petite restructuration de la doc pour KGFGrid et correction de petites erreurs


Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour, y compris a doc en ligne, et les sources sont inchangées.

Ces deux fonctions permettent, pour l'une, de lier une cellule à un objet EDIT de Panoramic, et pour l'autre, de charger automatiquement dans le KGFGrid, le contenu de tous les EDIT liés à des cellules du KGFGrid. Dans ce cas, tous les calculs se déclenchent automatiquement, et les alertes sont actualisées (s'il y en a).

Voici le programme de démo, avec ces nouvelles fonctions:
Code:
' Test_InlineCodeAvecKGFGrid.bas

label UserEvent, SauverCSV, EffacerGrid, RestaurerCSV, MiseAJour
label CacherMontrer, SauverDansFichier
dim visib%
visib% = 1
dim res%, KG1%, KG17%, f1$, Types$(8), v$, f, img$, value, value1
  Types$(0) = "Inconnu (traité comme Integer)"
  Types$(1) = "Chaîne"
  Types$(2) = "Entier"
  Types$(3) = "Flottant"
  Types$(4) = "Booléen"
  Types$(5) = "Image"
  Types$(6) = "Mémo"
  Types$(7) = "Bouton"
  Types$(8) = "Combo"


full_space 0 : to_foreground 0 

alpha 80 : top 80,40 : left 80,10 : caption 80,"Ligne 2:"
edit 81 : top 81,60 : left 81,10  : width 81,200
edit 82 : top 82,60 : left 82,210  : width 82,80
edit 83 : top 83,60 : left 83,290  : width 83,100
button 84 : top 84,60 : left 84,400 : caption 84,"Mise à jour" : on_click 84,MiseAJour

memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 
memo 110 : top 110,100 : left 110,1010 : width 110,150 : height 110,420 : bar_both 110 
memo 120 : top 120,100 : left 120,1170 : width 120,150 : height 120,420 : bar_both 120 
memo 130 : hide 130 : top 130,100 : left 130,1330 : width 130,150 : height 130,420 : bar_both 130 

dll_on "KGF.dll"

' KG1% = dll_call3("CreateKGFGrid",handle(0),1,1)                   
KG1% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),1,1)                   
res% = dll_call5("LocateKGFGrid",KG1%,10,100,652,377)         
' KG17% = dll_call3("CreateKGFGrid",handle(0),17,1)
KG17% = dll_call4("CreateKGFGrid",object_internal(0),handle(0),17,1)
res% = dll_call5("LocateKGFGrid",KG17%,10,490,652,27)             


' colonnes:
'  Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC
' res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,15,7,50,25)    : ' activer cette ligne pour un tableau de la taille exacte de la fenêtre de vue
res% = dll_call5("SetGlobalKGFGridDimensions",KG1%,25,17,50,25)    : ' activer cette ligne pour un tableau plus grand avec ascenseurs
res% = dll_call4("SetKGFGridColumnRangeVisible",KG1%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call4("SetKGFGridRowRangeVisible",KG1%,15,15,0)     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,1,6,hex("FFFFFF"))
res% = dll_call5("SetGlobalKGFGridDimensions",KG17%,1,7,50,25)   
res% = dll_call4("SetKGFGridColumnRangeVisible",KG17%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call6("SetKGFGridCellRangeColor",KG17%,1,11,1,6,hex("C0C0FF"))
v$ = "Arial"
res% = dll_call6("SetKGFGridCellRangeFontName",KG1%,1,15,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG1%,1,15,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG1%,1,15,2,6,7)
res% = dll_call6("SetKGFGridCellRangeFontName",KG17%,1,1,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG17%,1,1,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG17%,1,1,2,6,7)

res% = dll_call6("SetKGFGridCellRangeType",KG1%,1,1,1,6,1)      : ' ligne des titres de colonnes
res% = dll_call6("SetKGFGridCellRangeBorderStyle",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeFontBold",KG1%,1,1,1,6,1)
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,1,1,1,6,0)
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,1,1,200)    : ' libellé
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,1,1,200)   
v$ = "Libellé"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,1,1,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,2,2,80)      : ' quantité
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,2,2,80)   
v$ = "Qté"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,2,2,adr(v$))
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,3,3,100)    : ' prix unitaire
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,3,3,100)   
v$ = "Prix U."
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,3,3,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,4,4,100)    : ' total HT
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,4,4,100)   
v$ = "Total HT"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,4,4,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,5,5,70)      : ' taux TVA
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,5,5,70)   
v$ = "Tx TVA"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,5,5,adr(v$)) 
res% = dll_call4("SetKGFGridColumnRangeWidth",KG1%,6,6,100)      : ' total TTC
res% = dll_call4("SetKGFGridColumnRangeWidth",KG17%,6,6,100)   
v$ = "Total TTC"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,1,1,6,6,adr(v$)) 

res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG1%,2,15,2,7,3)      : ' colonnes de valeurs
res% = dll_call6("SetKGFGridCellRangeBorderColor",KG1%,2,15,2,2,hex("FF0000"))  : ' colonne des quantités: bordures bleues
res% = dll_call6("SetKGFGridCellRangeBorderWidth",KG1%,2,15,2,2,hex("FF03FF03"))  : ' largeurs des bordures colonne des quantités
res% = dll_call6("SetKGFGridCellRangeZeroAsSpace",KG1%,2,15,2,7,1)    : ' ne pas afficher les valeurs zéro
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,1,1,1)      : ' colonne des libéllées
res% = dll_call6("SetKGFGridCellRangeType",KG17%,1,1,2,7,3)      : ' colonnes de valeurs

res% = dll_call6("SetKGFGridCellRangeActive",KG1%,15,15,1,6,0)  : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
v$ = "Total"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,15,15,1,1,adr(v$))
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,1,6,0)    : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))

' ****** mettre une alerte de valeurs sur la colonne 3 (prix unitaire): entre 50,00 et 500,00
v$ = "1, 50,500, 255,255,0, 0,0,0"
res% = dll_call6("SetKGFGridCellRangeAlerts",KG1%,2,14,3,3,adr(v$))

' ****** définir les cellules avec handle d'un EDIT externe
res% = dll_call4("SetKGFGridCellExternalEdit",KG1%,2,1,handle(81))
res% = dll_call4("SetKGFGridCellExternalEdit",KG1%,2,2,handle(82))
res% = dll_call4("SetKGFGridCellExternalEdit",KG1%,2,3,handle(83))

' ****** ici, placer les formules pour le prix HT par ligne
clear 130
item_add 130,"Result := Cell(1,0,2)*Cell(1,0,3)"                : ' calculer le total HT d'une ligne
item_add 130,"store(1,0,4,Result)"                             
f1$ = text$(130)
' calcul du prix HT par ligne
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,4,4,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,4,4,adr(f1$))     
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF")) 
' ****** ici, placer les formules pour le prix TTC par ligne
clear 130
item_add 130,"Result := Cell(1,0,4)*(100+Cell(1,0,5))/100"      : ' calculer le total TTC d'une ligne
item_add 130,"store(1,0,6,Result)"                              : ' placer dans le tableau
item_add 130,"Exec(17,1,4)"                                      : ' mettre le total HT général à jour
item_add 130,"Exec(17,1,6)"                                      : ' mettre le total TTC général à jour
f1$ = text$(130)
' calcul du prix TTC par ligne 
res% = dll_call6("SetKGFGridCellRangeActive",KG1%,2,14,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,14,6,6,adr(f1$)) 

' total HT général
clear 130
item_add 130,"Result := Sum(1,2,4,14,4)"
f1$ = text$(130)
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,4,4,adr(f1$)) 
   
' total TTC général
clear 130
item_add 130,"Result := Sum(1,2,6,14,6)"
f1$ = text$(130)
' res% = dll_call6("SetKGFGridCellRangeActive",KG17%,1,1,6,6,0)             
res% = dll_call6("SetKGFGridCellRangeFormula",KG17%,1,1,6,6,adr(f1$)) 
   

' rendre les colonnes libellé, quantité et prix unitaire éditables
res% = dll_call6("SetKGFGridCellRangeEditable",KG1%,2,14,1,3,1)       

' la colonne des quantités contient des nombres possiblement signés     
res% = dll_call6("SetKGFGridCellRangeSigned",KG1%,2,14,2,2,1)       


' ****** cas spécial pour montrer une cellule "bouton"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,8,8,4,4,7)      : ' cellule (8,4) est un bouton
v$ = "Valeur de PI"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,8,8,4,4,adr(v$)) 
f1$ = "display(pi)"
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,8,8,4,4,adr(f1$))


' ****** cas spécial pour montrer une cellule "combo"
res% = dll_call6("SetKGFGridCellRangeType",KG1%,12,12,2,2,8)      : ' cellule (12,2) est une combo integer
clear 130
item_add 130,"1"
item_add 130,"2"
item_add 130,"3"
item_add 130,"4"
item_add 130,"5"
item_add 130,"10"
item_add 130,"15"
item_add 130,"20"
item_add 130,"25"
item_add 130,"30"
res% = dll_call5("SetKGFGridComboCellText",KG1%,12,2,6,handle(130))      : ' charger le contenu de la combo, sélectionner ligne 6


' ****** maintenant, mettre les valeurs en place
v$ = "Robinets de lavabo"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,1,1,adr(v$)) : ' chargement 1er produit
f = 3
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,2,2,adr(f))
f = 17.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,3,3,adr(f))
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,2,2,5,5,adr(f))

v$ = "Parquet chêne"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,1,1,adr(v$)) : ' chargement 2ème produit
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,2,2,adr(f)) 
f = 50
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,3,3,adr(f)) 
f = 20
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,3,3,5,5,adr(f))

v$ = "Raccords cuivre"
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,1,1,adr(v$)) : ' chargement 3ème produit
f = 12
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,2,2,adr(f)) 
f = 2.5
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,3,3,adr(f)) 
f = 10
res% = dll_call6("SetKGFGridCellRangeValue",KG1%,4,4,5,5,adr(f))

button 101 : top 101,550 : left 101,10 : width 101,200 : caption 101,"Sauver en CSV"
  on_click 101,SauverCSV
button 102 : top 102,550 : left 102,220 : width 102,200 : caption 102,"Effacer les données"
  on_click 102,EffacerGrid
button 103 : top 103,550 : left 103,430 : width 103,200 : caption 103,"Restaurer le CSV"
  on_click 103,RestaurerCSV

button 104 : top 104,580 : left 104,10 : width 104,200 : caption 104,"Cacher/Montrer"
  on_click 104,CacherMontrer
button 105 : top 105,580 : left 105,220 : width 105,200 : caption 105,"Sauver dans Fichier"
  on_click 105,SauverDansFichier
alpha 106 : top 106,180 : left 106,220 : caption 106,"Coucou !"
  font_bold 106 : font_size 106,28

on_user_event UserEvent

end
     
SauverDansFichier:                                           
  v$ = "KGFGrid_Alert.txt"
  res% = dll_call2("SaveKGFGridToFile",KG1%,adr(v$))
  return

SauverCSV:
  ' exporter les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' exporter les données des lignes 2 à 14 et de toutes les colonnes
  res% = dll_call6("ExportKGFGridCellRangeDataAsCSV",KG1%,2,14,1,6,adr(v$))
  return

EffacerGrid:
  ' effacer les données du Gid
  ' options d'effacement des données (ClearOption-xxx)
  '  coInteger    =  $001;    //  1
  '  coFloat      =  $002;    //  2
  '  coString      =  $004;    //  4
  '  coCheckBox    =  $008;    //  8
  '  coImage      =  $010;    //  16
  '  coMemo        =  $020;    //  32
  '  coComboIndex  =  $040;    //  64
  '  coComboText  =  $080;    // 128
  '  coButton      =  $100;    // 256
  '  coFormula    =  $200;    // 512
  ' effacer les données des lignes 2 à 14 et de toutes les colonnes
  ' ne pas toucher aux titres de a ligne 1, ni aux libellés des boutons ni aux lignes des combos
  res% = dll_call6("ClearKGFGridCellRangeData",KG1%,2,14,1,6,1+2+4+64)
  return

RestaurerCSV:
  ' restaurer les données en format CSV
  v$ = "ExportKGFGridDataAsCSV.txt"
  ' restaurer les données des lignes 2 à 14 et de toutes les colonnes                           
  res% = dll_call6("ImportKGFGridCellRangeDataFromCSV",KG1%,2,14,1,6,adr(v$))
  return
 
CacherMontrer:
  visib% = 1 - visib%
  res% = DLL_call2("KGFGridVisible",KG1%,visib%)
  return
 
MiseAJour:
  res% =  dll_call5("ImportKGFGridCellRangeExternalEdit",KG1%,2,14,1,6)
  return
   
UserEvent:
  UserEvent()
  return
 
sub UserEvent()
  dim_local lig%, col%, event%, id%, type%, res$, f
  if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub
  if (bin_and(user_event_wparam,hex("00FF0000"))<hex("00010000")) and (bin_and(user_event_wparam,hex("00FF0000"))>hex("00050000")) then exit_sub
  event% = bin_and(user_event_wparam,hex("00FF0000"))/65536
  id% = bin_and(user_event_wparam,hex("0000FFFF"))
  col% = user_event_lparam/65536
  lig% = bin_and(user_event_lparam,hex("0000FFFF"))
'  delete 1
'  picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1
'  clear 2
  type% = dll_call3("GetKGFGridCellType",KG1%,lig%,col%)              : ' ok
  select type%
    case 0: ' Inconnu
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 1: ' Chaîne
      res$ = string$(255," ")
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(res$)) : ' ok
      res$ = trim$(res$)
    case 2: ' Entier
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 3: ' flottant
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,adr(f))    : ' ok
      res$ = str$(f)
    case 4: ' Booleen
      res% = dll_call4("GetKGFGridCellValue",KG1%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 5: ' Image
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
'      clipboard_paste 1
    case 6: ' Mémo
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok
  end_select

  select event%
    case 1: ' cellule normale
      message "clic dans KGFGrid  Event="+str$(event%)+" ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$
    case 2: ' cellule bouton
      message "clic dans KGFGrid  Event="+str$(event%)+"=Bouton ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)
      exit_sub
    case 3: ' cellule combo Integer   
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Integer ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 4: ' cellule combo Floating
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo Floating ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
    case 5: ' cellule combo String
      res% = dll_call3("GetKGFGridComboCellIndex",KG1%,lig%,col%)
      message "clic dans KGFGrid  Event="+str$(event%)+"=Combo String ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$+"  ligne sélectionnée: "+str$(res%)
      exit_sub
  end_select
 
  if type%=4
    res% = dll_call6("SetKGFGridCellRangeValue",KG1%,lig%,lig%,col%,col%,1-res%)        : ' ok
  end_if
  res% = dll_call4("GetKGFGridCellAtributes",KG1%,lig%,col%,handle(100))
  res% = dll_call3("GetKGFGridRowAsXML",KG1%,lig%,handle(110))
  res% = dll_call3("GetKGFGridColumnAsXML",KG1%,col%,handle(120))
 
 
 
if 1=2      : ' juste pour montrer l'effet ce ces fonctions, mais sans rapport avec la facture !
  ' ici, retourner le contenu de la cellule cliquée par code Inline:
  clear 130
  item_add 130,"Cell(1,"+str$(lig%)+","+str$(col%)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
  message "Contenu numérique de la cellule cliquée: "+str$(value)
 
  ' ici, retourner la somme du rectangle (3,2)-(4,5) par code Inline
  clear 130
  item_add 130,"Sum(1,3,2,4,5)"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
                                               
  ' ici, stocker cette somme dans la cellule (8,6)
  clear 130
  item_add 130,"store(1,8,6,"+str$(value)+")"
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
 
  ' ici, stocker dans la cellule (10,6) la somme des cellules (2,2) à (2,4) par addition
  clear 130
  item_add 130,"C := cell(1,2,2)+cell(1,3,2)+cell(1,4,2)"
  item_add 130,"store(1,10,6,C)"                             
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
end_if           
                                                 
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 20 Mar 2019 - 0:24

Nouvelle version:
KGF.dll V8.87 du 19/03/2019

Nouveautés:
- nouvel objet: PMatrix
- nouvelles fonctions: CreateMatrix, DeleteMatrix, BuildElementaryMatrix, MultiplayMatrixByScalar,
MultiplayMatrixByMatrix, TransposeMatrix, AddMatrixToMatrix, SubstractMatrixFromMatrix,
GetMatrixDeterminant, BuildInverseMatrix, CopyMatrix
- doc: en cours de préparation


Modules modifiés:
KGF.dll

La doc est en cours de préparation. Les sources sont inchangées.

C'est un tout nouveau chapître que j'ouvre ici - celui du traitement mathématique des matrices. La version présentée comprend une sélection d'opérations sur les matrices de deux dimensions, représentées par des tableaux Panoramic.

Ces tableaux peuvent être de 3 types: 0=integer 1=string 2=flottant. Les types 1 et 3 permettent des calculs suivants:
- définition de l'objet PMatrix
- suppression de l'objet PMatrix
- construction d'une matrice élémentaire (matrice carrée, zéro partout, des 1 en diagonale)
- multiplication d'une matrice par un facteur scalaire (une valeur flottante)
- addition de deux matrices
- soustractionde deux matrices
- multiplication de deux matrices
- transposition d'une matrice
- calcul de la déterminante d'une matrice
- calcul de l'inversion d'une matrice (si la déterminante est <>0 !)
- copie d'une matrice dans une autre
- "dump" d'une matrice (listage des éléments, ligne par ligne, dans un MEMO)

Pour les calculs, les dimensions maximales des matrices sont 20 lignes x 20 colonnes, donc des indices (19,19) dans la déclaration Panoramic.

Dans mon esprit, ces fonctions pourront servir partout où le calcul matriciel est nécesaire: résolution de systèmes d'équations linéaires, et donc problèmes d'optimisation etc, calculs liés à la 3D (rotations etc), et beaucoup d'autres.

Le programme suivant permet de montrer la plupart de ces fonctions. Les 5 premiers mémos correspondent aux matrices dont le nom est affiché au-dessus. Le 6ème mémo est le "dump" d'une matrice recevant les résultats des opérations.
Code:
' test_array.bas

label transposer, additionner, soustraire, multiplier25, multiplier, determinante, inverse, copieressai, copiertest

dim res%, valeurs%(17,8), i%, k%, test%(3,5), essai%(3,3), float(4,7), determinante, n%, resultat(19,19), fact, texte$(5,4)
dim MA1%, MA2%, MA3%, MA4%, MA5%, MA6%

for i%=0 to 17
  for k%=0 to 8
    valeurs%(i%,k%) = i%*100 + k%
  next k%
next i%
   

for i%=0 to 3
  for k%=0 to 5
    test%(i%,k%) = i%*1000 + k%
  next k%
next i%

' essai% est inversible et a la déterminante 12 !
essai%(0,0) = 1
essai%(0,1) = 1
essai%(0,2) = 1
essai%(0,3) = 1
essai%(1,0) = 2
essai%(1,1) = 3
essai%(1,2) = 4
essai%(1,3) = 5
essai%(2,0) = 4
essai%(2,1) = 9
essai%(2,2) = 16
essai%(2,3) = 25
essai%(3,0) = 8
essai%(3,1) = 27
essai%(3,2) = 64
essai%(3,3) = 125

for i%=0 to 5
  for k%=0 to 4
    texte$(i%,k%) = str$(i%)+","+str$(k%)
  next k%
next i%     

for i%=0 to 4
  for k%=0 to 7
    float(i%,k%) = i%+k%/100
  next k%
next i%

for i%=0 to 19
  for k%=0 to 19
    resultat(i%,k%) = 0
  next k%
next i%

full_space 0                           

memo 1 : height 1,height_client(0)-30 : top 1,30 : width 1,150 : bar_both 1
memo 2 : height 2,height_client(0)-30 : top 2,30 : width 2,150 : bar_both 2 : left 2,left(1)+width(1)+10
memo 3 : height 3,height_client(0)-30 : top 3,30 : width 3,150 : bar_both 3 : left 3,left(2)+width(2)+10
memo 4 : height 4,height_client(0)-30 : top 4,30 : width 4,150 : bar_both 4 : left 4,left(3)+width(3)+10
memo 5 : height 5,height_client(0)-30 : top 5,30 : width 5,150 : bar_both 5 : left 5,left(4)+width(4)+10
memo 6 : height 6,height_client(0)-30 : top 6,30 : width 6,150 : bar_both 6 : left 6,left(5)+width(5)+10
alpha 31 : top 31,10 : left 31,left(1) : caption 31,"valeurs%"
alpha 32 : top 32,10 : left 32,left(2) : caption 32,"test%"
alpha 33 : top 33,10 : left 33,left(3) : caption 33,"essai%"
alpha 34 : top 34,10 : left 34,left(4) : caption 34,"texte$"
alpha 35 : top 35,10 : left 35,left(5) : caption 35,"float"
alpha 36 : top 36,10 : left 36,left(6) : caption 36,"==> résultat"

button 11 : top 11,top(1)  : left 11,left(6)+width(6)+20 : width 11,150 : caption 11,"Transposer essai%" : on_click 11,transposer
button 12 : top 12,top(11)+height(11) : left 12,left(11) : width 12,150 : caption 12,"Additionner essai%" : on_click 12,additionner
button 13 : top 13,top(12)+height(12) : left 13,left(11) : width 13,150 : caption 13,"Soustraire essai%" : on_click 13,soustraire
button 14 : top 14,top(13)+height(13) : left 14,left(11) : width 14,150 : caption 14,"Mult essai%*2.5" : on_click 14,multiplier25
button 15 : top 15,top(14)+height(14) : left 15,left(11) : width 15,150 : caption 15,"Mult essai%*test%" : on_click 15,multiplier
button 16 : top 16,top(15)+height(15) : left 16,left(11) : width 16,150 : caption 16,"Déterminate essai%" : on_click 16,determinante
button 17 : top 17,top(16)+height(16) : left 17,left(11) : width 17,150 : caption 17,"Inverse de essai%" : on_click 17,inverse
button 18 : top 18,top(17)+height(17) : left 18,left(11) : width 18,150 : caption 18,"Copier dans essai%" : on_click 18,copieressai
button 19 : top 19,top(18)+height(18) : left 19,left(11) : width 19,150 : caption 19,"Copier dans test%" : on_click 19,copiertest

dll_on "KGF.dll"

res% = dll_call4("TestMatrix",adr(test%),0,4,6)
res% = dll_call4("TestMatrix",adr(texte$),1,5,4)
res% = dll_call4("TestMatrix",adr(float),2,4,7)

'                                            T  nL nC      T: 0=integer  1=string  2=flottant
res% = dll_call5("DumpMatrix",adr(valeurs%), 0, 17, 8, handle(1))
res% = dll_call5("DumpMatrix",adr(test%),    0,  3, 5, handle(2))
res% = dll_call5("DumpMatrix",adr(essai%),  0,  3, 3, handle(3))
res% = dll_call5("DumpMatrix",adr(texte$),  1,  5, 4, handle(4))
res% = dll_call5("DumpMatrix",adr(float),    2,  4, 7, handle(5))
res% = dll_call5("DumpMatrix",adr(resultat), 2, 19,19, handle(6))

MA1% = dll_call4("CreateMatrix",0,adr(valeurs%),17,8)
' message "MA1%="+str$(MA1%)
MA2% = dll_call4("CreateMatrix",0,adr(test%),3,5)
' message "MA2%="+str$(MA2%)
MA3% = dll_call4("CreateMatrix",0,adr(essai%),3,3)
' message "MA3%="+str$(MA3%)
MA4% = dll_call4("CreateMatrix",1,adr(texte$),5,4)
' message "MA4%="+str$(MA4%)
MA5% = dll_call4("CreateMatrix",2,adr(float),4,7)
' message "MA5%="+str$(MA5%)
MA6% = dll_call4("CreateMatrix",2,adr(resultat),19,19)
' message "MA6%="+str$(MA6%)
 
end

transposer:
  res% = dll_call2("TransposeMatrix",MA3%,MA6%)
'  res% = dll_call2("TransposeMatrix",MA3%,MA3%)
  if res%<>0 then message "TransposeMatrix: res%="+str$(res%)
  res% = dll_call5("DumpMatrix",adr(resultat),  2,  19, 19, handle(6))
  res% = dll_call5("DumpMatrix",adr(essai%),  0,  3,  3, handle(3))
  return

additionner:
  res% = dll_call3("AddMatrixToMatrix",MA3%,MA3%,MA6%)
  if res%<>0 then message "AddMatrixToMatrix: res%="+str$(res%)
  res% = dll_call5("DumpMatrix",adr(resultat),  2,  19, 19, handle(6))
  return
 
soustraire:
  res% = dll_call3("SubstractMatrixFromMatrix",MA3%,MA3%,MA6%)
  if res%<>0 then message "SubstractMatrixFromMatrix: res%="+str$(res%)
  res% = dll_call5("DumpMatrix",adr(resultat),  2,  19, 19, handle(6))
  return
 
multiplier25:
  fact = 2.5
  res% = dll_call3("MultiplayMatrixByScalar",MA3%,adr(fact),MA6%)
  if res%<>0 then message "MultiplayMatrixByScalar: res%="+str$(res%)
  res% = dll_call5("DumpMatrix",adr(resultat),  2,  19, 19, handle(6))
  return
 
multiplier:
  res% = dll_call3("MultiplayMatrixByMatrix",MA3%,MA2%,MA6%)
  if res%<>0 then message "MultiplayMatrixByMatrix: res%="+str$(res%)
  res% = dll_call5("DumpMatrix",adr(resultat),  2,  19, 19, handle(6))
  return
 
determinante:
  res% = dll_call2("GetMatrixDeterminant",MA3%,adr(determinante))
  if res%<0
    message "GetMatrixDeterminant: res%="+sr$(res%) 
  else         
    message "La déterminante est: "+str$(determinante)
  end_if
  return
 
inverse:
'  res% = dll_call2("BuildInverseMatrix",MA3%,MA3%) 
  res% = dll_call2("BuildInverseMatrix",MA3%,MA6%) 
  if res%<>0 then message "BuildInverseMatrix: res%="+str$(res%) 
  res% = dll_call5("DumpMatrix",adr(resultat),  2,  19, 19, handle(6))
  res% = dll_call5("DumpMatrix",adr(essai%),  0,  3, 3, handle(3))   
  return
 
copieressai:
  res% = dll_call2("CopyMatrix",MA6%,MA3%)
  if res%<>0 then message "CopyMatrix: res%="+str$(res%) 
  res% = dll_call5("DumpMatrix",adr(essai%),  0,  3, 3, handle(3)) 
  return
 
copiertest:
  res% = dll_call2("CopyMatrix",MA6%,MA2%)
  if res%<>0 then message "CopyMatrix: res%="+str$(res%) 
  res% = dll_call5("DumpMatrix",adr(test%),  0,  3, 5, handle(2)) 
  return

Note importante:
Ce code a été développé suite à ma découverte de la position en mémoire des éléments des tableaux en deux dimensons. Ca a l'air de marcher, et je ne rencontre plus de problème en ce moment. Cependant, le tout est basé sur une recherche empirique de ma part, maheureusement sans aucune certitude technique. J'espère avoir un retour de Jack validant ou invalidant mon procédé, et selon les circonstances, j'adapterai mon code pour le fiabiliser.

Autre note importante:
La partie calcul matriciel proprement-dit est effectué par une unité Matrix.pas trouvée sur le net à cette adresse:
http://mathmatrix.narod.ru/Basic.html
Néanmoins, je l'ai largement adapté à mes besoins, changé les paramètres d'appel des fonctions, corrigé une erreur (!) dans le calcul du produit matriciel, intégration à KGF.dll et lien avec Panoramic, etc.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 20 Mar 2019 - 2:06

Voilà un bon outil pour le calcul matriciel.
Bravo Klaus.

Klaus a écrit:
- construction d'une matrice élémentaire (matrice carrée, zéro partout, des 1 en diagonale)

Permet-moi d’apporter une petite précision pour l’emploi de certains termes.
• On appelle matrice élémentaire toute matrice obtenue à partir de la matrice identité I  par une opération élémentaire de lignes.
• Une matrice identité ou matrice unité est une matrice carrée avec des 1 sur la diagonale et des 0 partout ailleurs.
• On parle du calcul du   déterminant d’une matrice et non de la déterminante d’une matrice. Mais je me trompe peut-être !



Merci Klaus pour toutes ces fonctions incorporées dans KGF.DLL
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 20 Mar 2019 - 8:50

Merci, Papydall, pour ces précisions de terminologie. En effet, j'ai fait mes études mathématiques en Allemagne, et ma terminologie en cette matière esn souvent fruit d'une traduction intuitive - dont acte. J'en tiendrai compte dans la documentation qui est en cours de réalisation.

Petite question: est-ce que la calcul avec des nombres imaginaires (j'espère que le terme est bon: un nombre comportant d'une part un réel normal et d'autre part un autre réel affublé de "i" - racine carrée de -1) ? Idem pour les "Quaternions" ? Le module que j'ai utilisé, comprend les fonctions nécessaires pour cela. Il faudrait juste que je crée l'interface (un wrapper) pour l'utiliser à partir de Panoramic...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 20 Mar 2019 - 19:03

1 ) Les nombres complexes sont de la forme : z = a + ib (ou x+iy)  
où a et b sont des nombres réels et i un « nombre imaginaire » tel que i² = -1 ou i = racine carrée de -1
a est la partie réelle du nombre complexe.
b est la partie imaginaire du nombre complexe.

Si b est nulle, alors le nombre est réel.
Si a est nulle, alors le nombre est appelé imaginaire pur

Pour la petite histoire : Les nombres complexes furent introduits au XVIe siècle par les mathématiciens italiens Jérôme Cardan, Nicolo Fontana, dit Tartaglia, et Ludovico Ferrari
La première apparition de racine carrée d’un nombre négatif est due à Jerome Cardan.
Carl Friedrich Gauss (qui n’aime sans doute pas l’imaginaire) renomma ces quantités a + ib en nombres complexes ( pas au sens de difficiles ou compliqués mais au sens de nombres composés).

2 ) Les nombres hypercomplexes : quaternions sont des nombres formés de quatre composantes.
Ils sont dus à Hamilton qui a longtemps cherché un nombre formé de trois composantes mais comme il n’a pas trouvé une algèbre satisfaisante, il a eu l’idée d’ajouter une quatrième composante et tout est devenu bon (avec une petite exception : pas de commutativité). Donc l’ordre des termes est important.
Forme d’un quaternions : q = a + ib + jc + kd
a, b, c et d sont des nombres réels; et
i, j, k sont des coefficients imaginaires qui possèdent les propriétés suivantes :

Les coefficients  i, j, k sont tels que leurs produits donnent:
i²  =  j²   = k ² =  i j k  = – 1    

ij = k = -ji
jk = i = -kj
ki = j = -ik


Un quaternion est donc composé d’un scalaire et d’un vecteur :
q = a + ib + jc + kd
Quaternion = Scalaire (le nombre a) + Vecteur (point dans l’espace)


Il existe aussi :
• les octonions (appélés aussi les octaves): des nombres formant une algèbre à huit dimensions sur le corps des nombres réels.
• Les sédénions qui forment une algèbre réelle de dimensions 16.


Mais tout ce beau monde est hors de ma culture algébrique.


Bon, j’espère que je n’ai pas fait du hors-sujet.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 20 Mar 2019 - 19:53

Il faut dire qu'on ne s'en sert pas très souvent dans la vie de tous les jours... Crying or Very sad
Revenir en haut Aller en bas
papydall

papydall


Nombre de messages : 7017
Age : 74
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 20 Mar 2019 - 23:35

JL35 a écrit:
Il faut dire qu'on ne s'en sert pas très souvent dans la vie de tous les jours...  

Ça dépend du « on » c-à-d de celui qui s’en sert ou non.
Wikipédia : « Les quaternions unitaires fournissent une notation mathématique commode pour représenter l'orientation et la rotation d'objets en trois dimensions. Comparés aux matrices de rotations, ils sont plus stables numériquement et peuvent se révéler plus efficaces. Les quaternions ont été adoptés dans des applications en infographie, robotique, navigation, dynamique moléculaire et la mécanique spatiale des satellites. »

Désolé Klaus du hors-sujet Embarassed , je sors sur la pointe des pieds.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyJeu 21 Mar 2019 - 2:52

Tout ceci est très intéressant. Mais j'en conclus que l'utilisation potentielle des quaternions est très marginale, pour notre commnauté Panoramic. Pour les calculs 3D, les matrices 4x4 de rotation, translation etc suffisent largement, et ces possibilités sont couvertes par les fonctions déjà implémentées. Eventuellement les nombres complexes - si le besoin se fait sentir. Pour le moment, j'en garde la possibilité mais je ne le mais pas en oeuvre.

Si toutefois il manque quelque chose d'important en matière de calcul de matrices, fais-le-moi savoir - j'essayerai de l'implémenter.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
jean_debord

jean_debord


Nombre de messages : 1266
Age : 70
Localisation : Limoges
Date d'inscription : 21/09/2008

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptySam 23 Mar 2019 - 9:26

Tu pourrais peut-être utiliser quelques-unes de mes procédures pour Delphi :

https://sourceforge.net/projects/dmath/

Il y a notamment :

- les nombres complexes
- diverses méthodes de résolution des systèmes d'équations linéaires
- les valeurs propres et valeurs singulières
- la régression linéaire et non linéaire

etc.
Revenir en haut Aller en bas
http://www.unilim.fr/pages_perso/jean.debord/index.htm
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptySam 23 Mar 2019 - 11:19

Merci, Jean_Debord. Je vais regarder cela.

Pour le moment, je travaille à a sécurisation de l'interface entre Panoramic et ma DLL, à l'aide des informations fournies par Jack. Mon problème actuel est le caractère dynamique des différents tableaux ce qui rend difficile voire impossible de mémoriser des adresses de base. La création ou suppression dynamique de variables change la position des tableaux, y compris de la table de symboles elle-même.

Lorsque j'aurai résolu cet aspect, je verrai l'extension des fonctionnalités.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyLun 25 Mar 2019 - 11:38

J'ai enfin trouvé une parade aux variations dynamiques des adresses de la table des symboles de Panoramic et des adresses des tableaux.

Tout ceci fluctue, selon les créations (DIM et DIM_LOCAL) et suppressions (FREE) de variables et tableaux, car ces commandes DIM, DIM_LOCAL et FREE peuvent intervenir à tout moment.

Or, les tableaux concernés dans Panoramic sont des "arrays dynamiques" ce qui veut dire que non seulement leur longueur change (normal) mais également leur emplacement en mémoire, car en cas d'agrandissement, ces tableaux sont entièrement recopiées dans un espace différent, plus long, et donc toutes les adresses changent.

J'ai été obligé de créer une fonction qui restaure les adresses actuelles à un instant t, juste avant d'appeler une des fonctions de traitement des matrices. C'est lourd, certes, mais ça va marcher bientôt, lorsque j'aurai finalisé ces modules.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 30 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 30 EmptyMer 27 Mar 2019 - 16:01

Nouvelle version:
KGF.dll V8.88 du 27/03/2019

Nouveautés:
- KGFGrid: lors d'un clic droit dans une cellule éditable, le curseur est maintenant placé dans la zone de saisie de la petite fenêtre de saisie qui s'ouve, juste derrière le dernier caractère présent dans cette zone.

Modules modifiés:
KGF.dll

La doc et les sources sont inchangées.

Note:
Comme les fonctions de gestion des matrices sont en cours de réfection suite aux derniers éléments découverts, elles restent présentes mais leurs résultats peuvent être aléatoires.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Revenir en haut 
Page 30 sur 40Aller à la page : Précédent  1 ... 16 ... 29, 30, 31 ... 35 ... 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: