Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+12JL35 Oscaribout bignono Pedro pascal10000 silverman Jicehel papydall Minibug Marc Yannick Klaus 16 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 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 | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 15 Avr 2018 - 21:01 | |
| Merci klaus. Je vais tester tout ça ce soir. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Dim 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%) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 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. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 16 Avr 2018 - 0:13 | |
| - Klaus a écrit:
- Depuis quand peut-on coder comme cela ?
euhhh, bin depuis aujourd'hui ! non ? Bon, ok je sort... Désolé Klaus, je ne suis pas très attentif en ce moment... Je cumule des erreurs et les bévues... Pour trouver la solution, j'ai tenté plusieurs choses mais pas celle-ci bien sûr ! PS : J'ai testé et ça fonctionne correctement je reprendrai tout ça demain soir. Bonne nuit ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 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: 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). | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 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. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Sam 26 Mai 2018 - 23:01 | |
| Je ne maîtrise pas du tout la 3D ! Dommage, car cela semble rudement intéressant et rapide... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Sam 26 Mai 2018 - 23:30 | |
| - Klaus a écrit:
- 57 micro-secondes par rotation, qui dit mieux ?
Euuuh... MOI ! 20µS ! Merci et bravo Klaus ! Je suis en apprentissage 1ère année section 3D Je fais mes débuts en 3D et voilà qui pourra m'intéresser ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 26 Mai 2018 - 23:45 | |
| - Citation :
- Euuuh... MOI ! Laughing 20µS !
Tu m'intéresses ! Comment fais-tu ? En quel langage ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Sam 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 27 Mai 2018 - 0:13 | |
| Ah, je comprends mieux ! Merci pour cette précision !
20 micro-secondes, c'est en effet époustouflant ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 31 Jan 2019 - 17:46 | |
| Nouvelle version: KGF.dll V8.74 du 31/01/2019Nouveautés: - nouvelle fonction GetExifInfoFromJPG (dans la catégorie Gestion d'images)Modules modifiés: KGF.dll KGF.chmLa 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
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 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 ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 5 Fév 2019 - 14:17 | |
| Nouvelle version: KGF.dll V8.75 du 05/02/2019Nouveautés: - nouvelles fonctions GetKGFGridRowAsXML et GetKGFGridRowAsXMLModules 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 | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 5 Fév 2019 - 17:32 | |
| Toutes les sources sont à jour sur le WebDav. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 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... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 11 Fév 2019 - 12:51 | |
| Nouvelle version: KGF.dll V8.76 du 10/02/2019Nouveautés: - nouvelles fonctions ScrollCurrentMemoPositionIntoView, ExecuteInlineCode, DefineInlineCodeVariable, GetInlineCodeResultModules modifiés: KGF.dll KGF.chmLa 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: ScrollCurrentMemoPositionIntoViewSyntaxe: res% = dll_call3("ScrollCurrentMemoPositionIntoView",hmemo%,posit%,haut%)Aide: https://klauspanoramic.000webhostapp.com/ScrollCurrentMemoPositionIntoVie.html#ScrollCurrentMemoPositionIntoView_frExecuteInlineCodeSyntaxe: res% = dll_call5("ExecuteInlineCode",handle(memo%),adr(p1),adr(p2),adr(p3),adr(p4),adr(p5))Aide: https://klauspanoramic.000webhostapp.com/ExecuteInlineCode.html#ExecuteInlineCode_frDefineInlineCodeVariableSyntaxe: res% = dll_call2("DefineInlineCodeVariable",adr(varnam$)),adr(variable)) Aide: https://klauspanoramic.000webhostapp.com/DefineInlineCodeVariable.html#DefineInlineCodeVariable_frGetInlineCodeResultSyntaxe: res% = dll_call1("GetInlineCodeResult",adr(variable))Aide: https://klauspanoramic.000webhostapp.com/GetInlineCodeResult.html#GetInlineCodeResult_frEt 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 16 Fév 2019 - 18:23 | |
| Nouvelle version: KGF.dll V8.78 du 16/02/2019Nouveautés: - KGFGrid: nouveau type ce cellule: 7 = BoutonModules 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. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 20 Fév 2019 - 13:20 | |
| Nouvelle version: KGF.dll V8.79 du 18/02/2019Nouveautés: - KGFGrid: nouveau types ce cellule: 8 = combo Integer, 9 = combo Floating, 10 = combo String Nouvelles fonctions: SetKGFGridComboCellText, SetKGFGridComboCellIndex, GetKGFGridComboCellIndexModules modifiés: KGF.dll KGF.chmLa 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
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 7 Mar 2019 - 10:13 | |
| Nouvelle version: KGF.dll V8.80 du 04/03/2019Nouveauté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.chmLa 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
| |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |