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 29 Emptypar Pedro Aujourd'hui à 10:37

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

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

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

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

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

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

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

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

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

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

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

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

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

» fichier.exe
KGF_dll - nouvelles versions - Page 29 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
-17%
Le deal à ne pas rater :
(Black Friday) Apple watch Apple SE GPS + Cellular 44mm (plusieurs ...
249 € 299 €
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 ... 28, 29, 30 ... 34 ... 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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyDim 15 Avr 2018 - 18:44

J'ai placé un KGF.dll modifié dans le WenDav dossier DLLs ainsi que sur les deux sitess. Pour le moment, le numéro de version ne change pas, ni la documentation.

Mais il y a 12 nouvelles fonctions ! Voici une doc "raccourcie":

IconListBox:
Attributs de texte par défaut:
res% = dll_call3("SetDefaultFontOfIconListBox",ILB%,adr(nom$),siz%)
res% = dll_call4("SetDefaultFontColorOfIconListBox",ILB%,R%,G%,B%)
res% = dll_call5("SetDefaultFontAttributesOfIconListBox",ILB%,B%,I%,U%,S%)

Attributs de texte par ligne:
res% = dll_call4("SetItemFontInIconListBox",ILB%,item%,adr(nom$),siz%)
res% = dll_call5("SetItemFontColor"InIconListBox,ILB%,item%,,R%,G%,B%)
res% = dll_call6("SetItemFontAttributesInIconListBox",ILB%,item%,B%,I%,U%,S%)


IconComboBox:
Attributs de texte par défaut:
res% = dll_call3("SetDefaultFontOfIconComboBox",ICB%,adr(nom$),siz%)
res% = dll_call4("SetDefaultFontColorOfIconComboBox",ICB%,R%,G%,B%)
res% = dll_call5("SetDefaultFontAttributesOfIconComboBox",ICB%,B%,I%,U%,S%)

Attributs de texte par ligne:
res% = dll_call4("SetItemFontInIconComboBox",ICB%,item%,adr(nom$),siz%)
res% = dll_call5("SetItemFontColor"InIconComboBox,ICB,%item%,R%,G%,B%)
res% = dll_call6("SetItemFontAttributesInIconComboBox",ICB,%,item%,B%,I%,U%,S%)


Cela concerne donc spécifiquement les objets IconListBox et IconComboBox. Pour chacun de ces objets, j'ai créé la notion d'attributs de texte comprenant le nom, la taille et la couleur de la police ainsi que les attributs gras, italique, souligné et barré. Pour chacun de ces objets, il y a des attributs de texte "par défaut", idéalement paramétrés avant l'ajout de la première ligne dans ces objets. Automatiquement, toutes les lignes ajoutées prendrons ces attributs. Mais chaque ligne a également ses propres attributs de texte, qui sont donc initialement chargées à partir des attributs par défaut. On peut ensuite changer spécifiquement les attributs pour une ligne ou une autre, sans que cela affecte les attributs des autres lignes.

Proposition pour Minibug:
Essaie de "jouer" avec ces fonctions pour voir si cela correspond à tes besoins.


Dernière édition par Klaus le Dim 15 Avr 2018 - 23:59, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyDim 15 Avr 2018 - 21:01

Merci klaus. Je vais tester tout ça ce soir. Wink
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Minibug

Minibug


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyDim 15 Avr 2018 - 21:42

Klaus j'ai un message d'erreur : expression arithmétique incorrecte avec SetDefaultFontOfIconListBox

Code:
     IL%=DLL_CALL2("CreateImageList",15,15)
      t$=chemin$+"\ilb\explo.ilb"
      res%=DLL_CALL2("LoadImageList",IL%,adr(t$))

      res%=dll_call1("SetMainFormHandle",handle(0))
      tree1%=DLL_CALL3("CreateIconListBox",handle(PAN_explo%),IL%,1)

      res%=DLL_CALL3("SetDefaultFontOfIconListBox",tree1%,ADR("Segoe UI"),10)

      res%=DLL_CALL5("LocateIconListBox",tree1%,5,45,355,(HEIGHT_CLIENT(PAN_explo%)-50))

Au passage tu as fais une petite erreur dans ton listing au dessus :

res% = dll_call4("SetDefaultFontOfIconListBox",ILB%,adr(nom$),siz%)
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyDim 15 Avr 2018 - 23:58

Code:
      res%=DLL_CALL3("SetDefaultFontOfIconListBox",tree1%,ADR("Segoe UI"),10)
Depuis quand peut-on coder comme cela ? Il faut faire ceci:
Code:
      dim police$
      police$ = "Segoe UI"
      res%=DLL_CALL3("SetDefaultFontOfIconListBox",tree1%,ADR(police$),10)

Citation :
Au passage tu as fais une petite erreur dans ton listing au dessus :

res% = dll_call4("SetDefaultFontOfIconListBox",ILB%,adr(nom$),siz%)
Parfaitement exact ! Je corrige.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyLun 16 Avr 2018 - 0:13

Klaus a écrit:
Depuis quand peut-on coder comme cela ?

euhhh, bin depuis aujourd'hui ! non ? Suspect
Bon, ok je sort... Wink Wink Wink

Désolé Klaus, je ne suis pas très attentif en ce moment...
Je cumule des erreurs et les bévues... drunken

Pour trouver la solution, j'ai tenté plusieurs choses mais pas celle-ci bien sûr ! geek

PS : J'ai testé et ça fonctionne correctement je reprendrai tout ça demain soir.

Bonne nuit ! Sleep Sleep Sleep
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Klaus

Klaus


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 26 Mai 2018 - 16:37

J'ai ajouté une fonction à KGF.dll, sans pour autant changer de version ni de documentation, pour le moment. La fonction est:
Code:
dim res%, vect(2), fact(2)
res% = dll_call3("Calculate3D",act%,adr(vect),adr(fact))
Elle effectue les calculs matriciels nécessaires pour faire des transformations 3D sur des coordonnées, vecteurs etc. Le code act% donne le code de l'opération à effectuer:
Code:
'   act%=1  translation           fact(0)..fact(2) contiennent les deltas
'   act%=2  changement de taille  fact(0)..fact(2) contiennent les facteurs
'   act%=3  rotation              fact(0)..fact(2) contiennent les angles

Voici une démo:
Code:
' Manipulations_de_vecteurs_3D.bas
'
' Matrice générale de manupulation:
'   vecteur homogène   matrice de transformation    vecteur local
'         | Xhom |     | M11  M12  M13  T14  |       | Xloc |
'         | Yhom |     | M21  M22  M23  T24  |       | Yloc |
'         | Zhom | <=  | M31  M32  M33  T34  |   *   | Zloc |
'         | Whom |     |  0    0    0    1   |       |   1  |
'
' Les deltas de translation sont données par la quatrième colonne T14, T24 et T34,
' avec la diagonale à 1:
'   dX=T14  dY=T24  dZ=T34
'
' Les agrandissements/rétrécissements sont données par la diaginale M11, M22 et M33,
' avec les autres éléments à zéro:
'   dX=M11  dY=M22  dZ=M33 1=M44
'
' La rotation autour de l'axe X est faite par la matrice suivante:
'         |  1      0        0     0   |
'         |  0  cos(µ)   -sin(µ)   0   |
'         |  0  sin(µ)    cos(µ)   0   |
'         |  0      0        0     1   |    
'
' La rotation autour de l'axe Y est faite par la matrice suivante:
'         | cos(µ)  0     sin(µ)   0   |
'         |  0      1        0     0   |
'         |  0 -sin(µ)    cos(µ)   0   |
'         |  0      0        0     1   |    
'
' La rotation autour de l'axe Z est faite par la matrice suivante:
'         | cos(µ)  -sin(µ)  0     0   |
'         | sin(µ)   cos(µ)  0     0   |
'         |  0      0        1     0   |
'         |  0      0        0     1   |    
'
'
' Après une transformation, les nouvelles coordonnées locales se calculent
' à partir des coordonnées homogènes en divisant chaque coordonnée par Whom;

'         | Xloc |     | Xhom / Whom  |
'         | Yloc |     | Yhom / Whom  |
'         | Zloc | <=  | Zhom / Whom  |
'         |   1  |     | Whom / Whom  |
'
'
' La fonction suivante de KGF.dll effectue ces opérations:
'   dim vect(2) : ' vecteur à tranformer
'   dim fact(2)   ' paramètres en fonction de act%
'   res% = dll_call3("Calculate3D",act%,adr(vect),adr(fact))
' avec
'   act%=1  translation           fact(0)..fact(2) contiennent les deltas
'   act%=2  changement de taille  fact(0)..fact(2) contiennent les facteurs
'   act%=3  rotation              fact(0)..fact(2) contiennent les angles

dim res%, vect(2), fact(2), n%, t1, t2
dll_on "KGF.dll"

' translation selon les 3 axes
vect(0) = 5
vect(1) = 3
vect(2) = 7

fact(0) = 2
fact(1) = 1
fact(2) = 3

res% = dll_call3("Calculate3D",1,adr(vect),adr(fact))
' résultat attendu: (7,4,10)
message str$(res%)+": "+str$(vect(0))+","+str$(vect(1))+","+str$(vect(2))

' aggrandissement selon les 3 axes
vect(0) = 5
vect(1) = 3
vect(2) = 7

fact(0) = 2
fact(1) = 1
fact(2) = 3

res% = dll_call3("Calculate3D",2,adr(vect),adr(fact))
' résultat attendu: (10,3,21)
message str$(res%)+": "+str$(vect(0))+","+str$(vect(1))+","+str$(vect(2))

' rotation autour le l'axe X
vect(0) = 0
vect(1) = 0
vect(2) = 7

fact(0) = 0
fact(1) = 90
fact(2) = 0

res% = dll_call3("Calculate3D",3,adr(vect),adr(fact))
' résultat attendu: (-7,0,0)
message str$(res%)+": "+str$(vect(0))+","+str$(vect(1))+","+str$(vect(2))

' test de performance avec les rotations enchaînées autour des 3 axes
vect(0) = 0
vect(1) = 0
vect(2) = 7

fact(0) = 30
fact(1) = 90
fact(2) = 60

t1 = number_ticks
for n%=1 to 10000
  res% = dll_call3("Calculate3D",3,adr(vect),adr(fact))
next n%
t2 = number_ticks
message "Durée pour 10000 appels: "+str$(t2-t1)+" ms   donc 1 appel: "+str$((t2-t1)/10000)+" ms   soit "+str$((t2-t1)/30000)+" ms par rotation "
end

A la fin du programme, il y a une (petite) attente, car il fait une boucle de 10000 appels avec 3 rotations enchaînées (30000 rotations). Le résultat est excellent:
KGF_dll - nouvelles versions - Page 29 Aa191
57 micro-secondes par rotation, qui dit mieux ?

Pour chacune des 3 actions possibles, on peut donner jusqu'à 3 paramètres de transformation dans le tableau fact(). Les coordonnées de fact et vect sont affectées comme suiit:  0=X, 1=Y, 2=Z. Pour la rotation, les valeurs sont données en degrés (0..359 degrés, avec des décimales possibles (valeurs flottantes).

Je sais que Papydall a fourni des procédures 100 % Panoramic pour faire cela. Voici un exemple à l'aide de KGF.dll, pour ceux qui de toutes façons utilisent KGF.dll. L'avantage, c'est la fulgurante rapidité d'exécution.

EDIT

Cette fonction est parfaitement utilisable en environnement 2D - il suffit de laisser la 3ème coordonnée à zéro, dans les tableaux vect et fact, sauf pour la rotation (act%=3) où il n'y a que la rotation autour de l'axe Z: fact(2).
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 26 Mai 2018 - 22:46

57 micro-secondes par rotation 3D, qui dit mieux ?
Pour moi, c'est un résultat brillant. C'est compatible avec des manipulations en temps réel.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 26 Mai 2018 - 23:01

Je ne maîtrise pas du tout la 3D ! Dommage, car cela semble rudement intéressant et rapide... drunken
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Marc

Marc


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 26 Mai 2018 - 23:30

Klaus a écrit:
57 micro-secondes par rotation, qui dit mieux ?

Euuuh... MOI !  Laughing 20µS !

KGF_dll - nouvelles versions - Page 29 230

Merci et bravo Klaus !
Je suis en apprentissage 1ère année section 3D Laughing
Je fais mes débuts en 3D et voilà qui pourra m'intéresser !
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 26 Mai 2018 - 23:45

Citation :
Euuuh... MOI ! Laughing 20µS !
Tu m'intéresses ! Comment fais-tu ? En quel langage ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Marc

Marc


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

KGF_dll - nouvelles versions - Page 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 26 Mai 2018 - 23:50

Klaus a écrit:
Tu m'intéresses ! Comment fais-tu ? En quel langage ?

Désolé pour ce quiproquo... c'est avec ton programme et ta DLL mais avec un ordinateur puissant.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyDim 27 Mai 2018 - 0:13

Ah, je comprends mieux ! Merci pour cette précision !

20 micro-secondes, c'est en effet époustouflant !
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyLun 28 Jan 2019 - 15:13

Nouvelle version:
KGF.dll V8.71 du 28/01/2019

Nouveautés:
- Modification de la fonction SaveStringList

Modules modifiés:
KGF.dll

La doc et les sources sont inchangées.

Cette modification vise à remplacer la méthode SaveToFile de l'objet TStringList de Delphi par une boucle d'écriture directe dans un fichier texte. Ceci est devenu nécessaire car SaveToFile ne peut pas gérer de très gros volumes de données, dans Delphi 6, malheureusement.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyMer 30 Jan 2019 - 0:46

Nouvelle version:
KGF.dll V8.72 du 29/01/2019

Nouveautés:
- Modification de la fonction SaveStringList

Modules modifiés:
KGF.dll

La doc et les sources sont inchangées.

Nouvelle méthode de sauvegarde, visant à accélérer encore l'opération.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyMer 30 Jan 2019 - 11:54

Un bug dans la fonction SaveStringList a été corrigé, et la vitesse a encore été très largement augmentée. Pour sauvegarder 1,5 Mo de contenu, il ne faut plus que 15 à 20 millisecondes.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyMer 30 Jan 2019 - 12:46

Nouvelle version:
KGF.dll V8.73 du 30/01/2019

Nouveautés:
- Modification de la fonction LoadStringList

Modules modifiés:
KGF.dll

La doc et les sources sont inchangées.

Nouvelle méthode de chargement, visant à accélérer encore l'opération.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyJeu 31 Jan 2019 - 17:46

Nouvelle version:
KGF.dll V8.74 du 31/01/2019

Nouveautés:
- nouvelle fonction GetExifInfoFromJPG (dans la catégorie Gestion d'images)

Modules modifiés:
KGF.dll
KGF.chm


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

Accessoirement, il y a le début de la doc de l'objet KGFGrid (dans la rubrique Objets).

Voici une démo de cette nouvelle fonction (elle est incluse dans la doc, également):
Code:
' test_GetExifInfoFromJPG.bas

dim jpg$
  dim larg%, haut%, res%

dll_on "KGF.dll"
picture 40 : stretch_on 40
open_dialog 1
filter 1,"Images JPG|*.jpg"
memo 2 : top 2,10 : left 2,200 : width 2,200 : height 2,400
  bar_vertical 2
jpg$ = file_name$(1)
if jpg$="_" then terminate

file_load 40,jpg$
 
  test("ImageLength")
  test("ImageDesc")
  test("Make")
  test("Model")
  test("Orientation")
  test("OrientationDesk")
  test("XResol")
  test("YResol")
  test("Copyright")
  test("DateTime")
  test("Software")
  test("DateTimeOriginal")
  test("DateTimeDigitized")
  test("UserComments")
  test("ExposureTime")
  test("FNumber")
  test("ExifVersion")
  test("SubjectDistance")
  test("MeteringMode")
  test("LightSource")
  test("Flash")
  test("Focallength")
  test("ExpProg")
  test("ISO")

  test("ImageWidth")
  test("ImageHeight")

  test("Compression")
  test("XResolThumb")
  test("YResolThumb")
  test("JPEG_OffsThumb")
  test("JPEG_LengThumb")
  test("UserComment")
 
 
dll_off
end

sub test(t$)
  dim_local s$
  s$ = string$(255," ")
  res% = dll_call3("GetExifInfoFromJPG",adr(jpg$),adr(t$),adr(s$))
  item_add 2,t$+" = "+trim$(s$)
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyLun 4 Fév 2019 - 3:19

Une nouvelle version de KGF.chm est disponible, sur mon site internet ainsi que dans la doc en ligne. Les deux sont acccessibles via ma signature dans tous mes posts.

Cette version de KGF.chm contient une première documentation complète de l'objet KGFGrid !
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyMar 5 Fév 2019 - 14:17

Nouvelle version:
KGF.dll V8.75 du 05/02/2019

Nouveautés:
- nouvelles fonctions GetKGFGridRowAsXML et GetKGFGridRowAsXML

Modules modifiés:

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

Ces fonctions permettent de récupérer les données d'une ligne ou d'une colonne entière, en format XML.

Voici le programme de démo, adaptée à ces fonctions:
Code:
' test_KGFGrid_facture.bas

label UserEvent
dim res%, KG%, KGtot%, f1$, Types$(6), v$, f, img$
  Types$(0) = "Inconnu (traité comme Integer)"
  Types$(1) = "Chaîne"
  Types$(2) = "Entier"
  Types$(3) = "Flottant"
  Types$(4) = "Booléen"
  Types$(5) = "Image"
  Types$(6) = "Mémo"
 
full_space 0
memo 100 : top 100,100 : left 100,700 : width 100,300 : height 100,420 : bar_both 100 
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 
 
dll_on "KGF.dll"

KG% = dll_call2("CreateKGFGrid",handle(0),13)                   
' res% = dll_call5("LocateKGFGrid",KG%,10,100,652,377)  : ' si l'on rend la ligne 15 visible           
res% = dll_call5("LocateKGFGrid",KG%,10,100,652,352)  : ' si la ligne 15 est invisible           
KGtot% = dll_call2("CreateKGFGrid",handle(0),13)                   
res% = dll_call5("LocateKGFGrid",KGtot%,10,490,652,27)             
' colonnes:
'  Libellé, quantité, Prix unitaire HT, total HT, taux TVA, total TTC
res% = dll_call5("SetGlobalKGFGridDimensions",KG%,15,7,50,25)   
res% = dll_call4("SetKGFGridColumnRangeVisible",KG%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call4("SetKGFGridRowRangeVisible",KG%,15,15,0)     
res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,1,6,hex("FFFFFF"))
res% = dll_call5("SetGlobalKGFGridDimensions",KGtot%,1,7,50,25)   
res% = dll_call4("SetKGFGridColumnRangeVisible",KGtot%,7,7,0)    : ' servira pour les liens vers une autre table
res% = dll_call6("SetKGFGridCellRangeColor",KGtot%,1,11,1,6,hex("C0C0FF"))
v$ = "Arial"
res% = dll_call6("SetKGFGridCellRangeFontName",KG%,1,15,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KG%,1,15,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KG%,1,15,2,6,7)
res% = dll_call6("SetKGFGridCellRangeFontName",KGtot%,1,1,1,6,adr(v$))
res% = dll_call6("SetKGFGridCellRangeFontSize",KGtot%,1,1,1,6,12)   
res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,1,6,2)
res% = dll_call6("SetKGFGridCellRangeJustification",KGtot%,1,1,2,6,7)

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

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

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

f1$ = "$RyC2^$RyC3^*;"                                          : ' calcul du HT par ligne
res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,4,4,adr(f1$))
res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,4,4,hex("C0C0FF"))

f1$ = "$RyC4^$RyC5^V100^+*V100^/;"                              : ' calcul du TTC par ligne
res% = dll_call6("SetKGFGridCellRangeFormula",KG%,2,14,6,6,adr(f1$))
res% = dll_call6("SetKGFGridCellRangeColor",KG%,2,14,6,6,hex("C0C0FF"))

f1$ = "cR2C2|cR14C2|RScR1C2^V"+str$(KGtot%)+"^@;"                                        : ' calcul du nombre d'unités
res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,2,2,adr(f1$))

f1$ = "cR2C4|cR14C4|RScR1C4^V"+str$(KGtot%)+"^@;"                                        : ' calcul du total HT
res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,4,4,adr(f1$))

f1$ = "cR2C6|cR14C6|RScR1C6^V"+str$(KGtot%)+"^@;"                                        : ' calcul du total TTC
res% = dll_call6("SetKGFGridCellRangeFormula",KG%,15,15,6,6,adr(f1$))

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

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


on_user_event UserEvent

end

UserEvent:
  UserEvent()
  return
 
sub UserEvent()
  dim_local lig%, col%, id%, type%, res$, f
  if bin_and(user_event_wparam,hex("FF000000"))<>hex("0C000000") then exit_sub
  if bin_and(user_event_wparam,hex("00FF0000"))<>hex("00010000") then exit_sub
  id% = bin_and(user_event_wparam,hex("0000FFFF"))
  col% = user_event_lparam/65536
  lig% = bin_and(user_event_lparam,hex("0000FFFF"))
'  delete 1
'  picture 1 : top 1,100 : left 1,420 : width 1,150 : height 1,150 : stretch_on 1
'  clear 2
  type% = dll_call3("GetKGFGridCellType",KG%,lig%,col%)              : ' ok
  select type%
    case 0: ' Inconnu
      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 1: ' Chaîne
      res$ = string$(255," ")
      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(res$)) : ' ok
      res$ = trim$(res$)
    case 2: ' Entier
      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 3: ' flottant
      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,adr(f))    : ' ok
      res$ = str$(f)
    case 4: ' Booleen
      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
      res$ = str$(res%)
    case 5: ' Image
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,0)        : ' ok
'      clipboard_paste 1
    case 6: ' Mémo
'      res% = dll_call4("GetKGFGridCellValue",KG%,lig%,col%,handle(2)) : ' ok
  end_select
  message "clic dans KGFGrid  ID="+str$(id%)+" en ligne "+str$(lig%)+" colonne "+str$(col%)+chr$(13)+chr$(10)+"Type="+Types$(type%)+"  valeur="+res$
  if type%=4
    res% = dll_call6("SetKGFGridCellRangeValue",KG%,lig%,lig%,col%,col%,1-res%)        : ' ok
  end_if
  res% = dll_call4("GetKGFGridCellAtributes",KG%,lig%,col%,handle(100))
  res% = dll_call3("GetKGFGridRowAsXML",KG%,lig%,handle(110))
  res% = dll_call3("GetKGFGridColumnAsXML",KG%,col%,handle(120))
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyMar 5 Fév 2019 - 17:32

Toutes les sources sont à jour sur le WebDav.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 9 Fév 2019 - 14:30

Annonce des prochaines réalisations:

J'ai introduit l'exécution de formules algébriques "normales", avec plein de fonctions intrinsèques. On peut même définir des variables et les utiliser en entrée et sortie. On peut faire des programmes multi-lignes, y compris les commandes de changement de flux (if, goto, ...). On peut ainsi créer de véritable scripts (mais uniquement en calcul !).

Ce système de formules sera accessible directement, via une fonction spécifique, mais également dans KGFGrid au niveau de la programmation des calculs automatiques pour chaque cellule.

EDIT

Ca fonctionne ! Je suis en train de paufiner la doc...
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyLun 11 Fév 2019 - 12:51

Nouvelle version:
KGF.dll V8.76 du 10/02/2019

Nouveautés:
- nouvelles fonctions ScrollCurrentMemoPositionIntoView, ExecuteInlineCode, DefineInlineCodeVariable, GetInlineCodeResult

Modules modifiés:
KGF.dll
KGF.chm


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

Changement important:
Sur mon WebDav, KGF.dll n'est plus dans le dossier "DLLs\", mais toute seule dans un nouveau dossier "KGF DLL\".

Ceci est une avancée majeure. On peut maintenant, très facilement, exécuter dynamiquement des calculs, même de vrais petits programmes, à partir de code saisi en cours d'exécution ou généré automatiquement. Prochainement, ce genre de calcul pourra être utilisé dans les formules de KGFGrid, en plus des formules en notationanti-polonaise actuellement opérationnelles.

Ces fonctions de calcul en Code Inline sont même capables d'utiliser le contenu de cellules d'objets KGFGrid, directement à partir de code Panoramic. Vous voulez connaître la valeur moyenne des cellules d'une colonne d'un tableau ? Ou l'écart-type des données dans un tableau ? Rien de plus facile - un petit Code Inline, et c'est fait, sans avoir à modifier le KGFGrid ! En tout cas, ce sera le cas dès que l'intégration dans KGFGrid sera réalisé, ce qui est déjà bien avancé.

Et, ce qui est bien, c'est qu'il est très facile d'ajouter de nouvelles opérations et/ou de nouvelles fonctions intrinsèques, même de nouvelles commandes de contrôle de flux ! Les extensions sont très faciles.

Les nouvelles fonctions:

ScrollCurrentMemoPositionIntoView
Syntaxe: res% = dll_call3("ScrollCurrentMemoPositionIntoView",hmemo%,posit%,haut%)
Aide: https://klauspanoramic.000webhostapp.com/ScrollCurrentMemoPositionIntoVie.html#ScrollCurrentMemoPositionIntoView_fr

ExecuteInlineCode
Syntaxe:
res% = dll_call5("ExecuteInlineCode",handle(memo%),adr(p1),adr(p2),adr(p3),adr(p4),adr(p5))
Aide: https://klauspanoramic.000webhostapp.com/ExecuteInlineCode.html#ExecuteInlineCode_fr

DefineInlineCodeVariable
Syntaxe: res% = dll_call2("DefineInlineCodeVariable",adr(varnam$)),adr(variable))
Aide: https://klauspanoramic.000webhostapp.com/DefineInlineCodeVariable.html#DefineInlineCodeVariable_fr

GetInlineCodeResult
Syntaxe: res% = dll_call1("GetInlineCodeResult",adr(variable))
Aide: https://klauspanoramic.000webhostapp.com/GetInlineCodeResult.html#GetInlineCodeResult_fr

Et voici une démo:
Code:
' test_ExecuteInlineCode.bas

label calculer, click3
dim res%, inFormula$, outFormula$, resultat, s$, s1$, p%, p1, p2, p3, p4, p5

dll_on "KGF.dll"

alpha 1 : top 1,10 : left 1,10 : caption 1,"Formule:"
memo 2 : top 2,10 : left 2,80 : width 2,300 : bar_both 2
list 3 : top 3,10 : left 3,390 : width 3,100 : height 3,300
  on_click 3,click3
alpha 11 : top 11,120 : left 11,10 : caption 11,"P1:"
edit 21 : top 21,120 : left 21,40 : width 21,100
alpha 12 : top 12,145 : left 12,10 : caption 12,"P2:"
edit 22 : top 22,145 : left 22,40 : width 22,100
alpha 13 : top 13,170 : left 13,10 : caption 13,"P3:"
edit 23 : top 23,170 : left 23,40 : width 23,100
alpha 14 : top 14,195 : left 14,10 : caption 14,"P4:"
edit 24 : top 24,195 : left 24,40 : width 24,100
alpha 15 : top 15,220 : left 15,10 : caption 15,"P5:"
edit 25 : top 25,220 : left 25,40 : width 25,100

button 99 : top 99,300 : left 99,200 : caption 99,"Calculer" : on_click 99,calculer
to_foreground 0
display

item_add 3,"()"
item_add 3,"abs()"
item_add 3,"cos()"
item_add 3,"arccos()"
item_add 3,"cosh()"
item_add 3,"arccosh()"
item_add 3,"sin()"
item_add 3,"arcsin()"
item_add 3,"sinh()"
item_add 3,"arcsinh()"
item_add 3,"tan()"
item_add 3,"arctan()"
item_add 3,"tanh()"
item_add 3,"arctanh()"
item_add 3,"degtorad()"
item_add 3,"radtodeg()"
item_add 3,"if(,,)"
item_add 3,"sqr()"
item_add 3,"sqrt()"
item_add 3,"exp()"
item_add 3,"ln()"
item_add 3,"log10()"
item_add 3,"logn(,)"
item_add 3,"pow(,)"
item_add 3,"(,)"
item_add 3,"--"
item_add 3,"++"
item_add 3,"-@"
item_add 3,"+@"
item_add 3,"^@"
item_add 3,"div"
item_add 3,"mod"
item_add 3,">"
item_add 3,">="
item_add 3,"<="
item_add 3,"<"
item_add 3,"<>"
item_add 3,"="
item_add 3,"not"
item_add 3,"or"  
item_add 3,"and "
item_add 3,"xor"
item_add 3,"goto()"
item_add 3,"ifgoto(,,,)"
item_add 3,"stop"
item_add 3,"pi"
item_add 3,"min(,)"
item_add 3,"max(,)"
item_add 3,"randg(,)"
item_add 3,"random"
item_add 3,"round()"
item_add 3,"trunc()"
item_add 3,"cell(,,)"
item_add 3,"sum(,,,,)"
item_add 3,"store(,,,)"
item_add 3,"display()"
end

click3:
  p% = caret_position(2)
  s$ = text$(2)
  s1$ = item_index$(3)
  s$ = left$(s$,p%) + s1$ + mid$(s$,p%+1,len(s$))
  clear 2
  item_add 2,s$
  set_focus 2
  caret_position 2,p%+len(s1$)
  res% = dll_call3("ScrollCurrentMemoPositionIntoView",handle(2),p%,3)
  return

Calculer:
  inFormula$ = text$(2)
  if numeric(text$(21))=0 then text 21,"0"  
  if numeric(text$(22))=0 then text 22,"0"  
  if numeric(text$(23))=0 then text 23,"0"  
  if numeric(text$(24))=0 then text 24,"0"  
  if numeric(text$(25))=0 then text 25,"0"  
  p1 = val(text$(21))                                                    
  p2 = val(text$(22))                                                    
  p3 = val(text$(23))                                                    
  p4 = val(text$(24))                                                    
  p5 = val(text$(25))                                                    
  res% = dll_call6("ExecuteInlineCode",handle(2),adr(p1),adr(p2),adr(p3),adr(p4),adr(p5))
  if res%<0
    messsage "Erreur "+str$(res%)
    return
  end_if
  res% = dll_call1("GetInlineCodeResult",adr(resultat))
  message "Résultat: "+str$(resultat)
  return
  
end

Mode d'emploi:
On saisit le code Inline dans le mémo à gauche. La liste à droite contient des maquettes (prototypes) des commandes, opérations et fonctions du code Inline. Un clic sur une de ces lignes insère la maquette dans le code contenu dans le mémo, exactement à la position du curseur, puis positionne cette ligne de sorte qy'elle soit visible, avec 3 lignes affichées au-dessus. Un clic sur le bouton "Calculer" permet de tester le code du mémo.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptySam 16 Fév 2019 - 18:23

Nouvelle version:
KGF.dll V8.78 du 16/02/2019

Nouveautés:
- KGFGrid: nouveau type ce cellule: 7 = Bouton

Modules modifiés:
KGF.dll
KGF.chm

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

Ce type de cellule est surtout destiné au mode "expression", avec des formules en Code Inline. C'est une cellule de type texte (recevant un libellé), mais affichée sous forme d'un bouton. On peut cliquer ce bouton, et si la cellule est active et si une formule lui est attachée, alors celle-ci sera exécutée.

Evidemment, une cellule de ce type ne peut pas recevoir le résultat d'une formule de calcul, étant donné que sa "valeur" est considérée comme chaîne de caractères et sert de libellé pour le bouton. Mais, bien sûr, ce libellé peut être changé à tout moment par la fonction SetKGFGridCellRangeValue.

Le fragment de code suivant:
Code:
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$))
transforme la cellule (8,4) en bouton, et un clic sur ce bouton affiche la valeur de PI, calculée par la formule. Evidemment la formule peut être très complexe, multi-ligne et faire des traitements très divers.
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyMer 20 Fév 2019 - 13:20

Nouvelle version:
KGF.dll V8.79 du 18/02/2019

Nouveautés:
- KGFGrid: nouveau types ce cellule: 8 = combo Integer, 9 = combo Floating, 10 = combo String
Nouvelles fonctions: SetKGFGridComboCellText, SetKGFGridComboCellIndex, GetKGFGridComboCellIndex


Modules modifiés:
KGF.dll
KGF.chm


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

Cette version permet d'afficher et de gérer des cellules d'un objet KGFGrid comme une combo déroulante. Une sélection d'une ligne dans une telle combo génère un USER_EVENT, tout comme maintenant le clic sur une cellule de type bouton.

Voici une démo de ces nouveaux types de cellules. Au démarrage, il est normal d'être obligé de valider plusieurs messages - les formules chargées dans le tableau comprennent une commande "display". Une fois que tout est stabilisé, on voit une cellule "bouton" et une cellule "combo integer". Un clic sur la cellule bouton lance la formule qui lui est associée et affiche la valeur de PI. Une sélection dans la combo affiche le numéro de ligne sélectionnée. Observez dans la gestion du USER_EVENT, comment la reconnaissance du type d'évèrement est réalisée !
Code:
' Test_InlineCodeAvecKGFGrid.bas

label UserEvent
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,11,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,11,1,6,0)   : ' ligne des totaux
res% = dll_call6("SetKGFGridCellRangeValue",KG17%,1,1,1,1,adr(v$))
  
' ****** ici, placer les formules !
clear 130
item_add 130,"display(C)"
item_add 130,"Result := Cell(1,2,2)*Cell(1,2,3)"
item_add 130,"store(1,2,4,Result)"                              
f1$ = text$(130)
' message "f1$="+f1$
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,2,2,4,4,0)               : ' à terme:   KG17%,2,14,4,4,0)  
res% = dll_call6("SetKGFGridCellRangeFormula",KG1%,2,2,4,4,adr(f1$))        : ' à terme:   KG17%,2,14,4,4,adr(f1$))  
res% = dll_call6("SetKGFGridCellRangeActive",KG17%,2,2,4,4,1)               : ' à terme:   KG17%,2,14,4,4,1)  
res% = dll_call6("SetKGFGridCellRangeColor",KG1%,2,14,4,4,hex("C0C0FF"))    


' ****** 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))

on_user_event UserEvent

end

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))
  
  
  
  ' 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))
            
  clear 130
  item_add 130,"C := Cell(1,0,2)*Cell(1,0,3)"
  item_add 130,"store(1,0,4,C)"                              
  res% = dll_call6("ExecuteInlineCode",handle(130),0,0,0,0,0)
  res% = dll_call1("GetInlineCodeResult",adr(value))
                                                  
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 29 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 29 EmptyJeu 7 Mar 2019 - 10:13

Nouvelle version:
KGF.dll V8.80 du 04/03/2019

Nouveautés:
- KGFGrid: type de cellule 7=Bouton: remplacement du bouton "dessiné" par un objet TButton
- KGFGrid: correction d'un bug dans la gestion de la hauteur des cellules
- Nouvelles fonctions: GetInlineCodeVariable, SetKGFGridCellRangeEditable, SetKGFGridCellRangeSigned
- KGFGrid formules Inline: Nouvelle fonction intrinsèque: Exec(G,R,C)
- KGFGrid: possibilité de saisir le contenu formaté de cellules test ou numériques si elles sont éditables
(par un clic droit dans la cellule)


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 majeure de l'obje KGFGrid. Il atteint maintenant une certaine maturité.

On peut maintenant saisir une valeur directement dans une cellule, pourvu qu'elle ait été configurée comme "éditable" via la fonction SetKGFGridCellRangeEditable. Ceci concerne les cellules de type chaîne de caractères, valeurs entières et valeurs flottantes.

On peut maintenant pleinement exploiter le code Inline pour programmer les calculs. C'est plus lisible que le code en notation polonaise inversée, mais surtout, il y a beaucoup plus de fonctions intrinsèques, en particulier dans le domaine numérique, et il sera très facile d'en ajouter à la demande, selon les besoins des Panoramiciens.

Le programme de démo ci-après reprend l'exemple d'une facture de plomberie déjà publiée (mais en version notation polonaise inversée). Cette fois, les formules sont en code Inline, et les colonnes 1 (libellés), 2 (quantité) et 3 (prix unitaire) sont éditables. Lorsqu'on change une quantité ou un prix unitaire, le tableau entier se recalcule automatiquement, un peu comme dans Excel.

Il y a deux suppléments dans ce programme qui n'ont rien à voir avec la facture. C'est juste pour démontrer les nouvelles possibilités offertes par des cellules de type Combo et de type Bouton.

N'hésitez pas à parcourir la doc (en ligne et/ou téléchargeable selon les liens dans ma signature). KGF.dll est sur mon site (lien dans ma signature) et sur mon WebDav, dossier "KGF DLL".

Voici la démo:
Code:
' Test_InlineCodeAvecKGFGrid.bas

label UserEvent
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))

on_user_event UserEvent

end

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
Contenu sponsorisé





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

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