| Un vrai tableur pour Panoramic dans une DLL | |
|
|
|
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Jeu 5 Avr 2012 - 19:16 | |
| Oui, avec n'importe quelle couleur autre que clWindow qui est la couleur par défaut d'une cellule. clWindow = RGB(240, 240, 240)
| |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Jeu 5 Avr 2012 - 20:16 | |
| Tu as une piste pour le problème des calculs décimaux ? | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Jeu 5 Avr 2012 - 21:06 | |
| Je suis dessus, mais ce n'est pas évident. C'est lié à la représentation différente des nombres entre le système anglo-saxon et français, mais remplacer simplement les "." par des "," et vice-versa ne suffit pas. Mais ça viendra. | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Jeu 5 Avr 2012 - 21:16 | |
| Au pire désactive la séparation des nombre par des "," nous sommes majoritairement français ou sinon tu peut obliger le séparateur des décimales à être le . si c'est plus simple à coder. En tout cas bon courage, c'est clair qu'il faut que ça marche ça pour que le tableur ait un sens et soit utilisé. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Jeu 5 Avr 2012 - 23:48 | |
| Pour le moment, je me suis fait plaisir: j'ai créé la définition des bordures d'une plage de cellules sélectionnée, avec choix sélectif des 4 côtés ainsi que de la couleur. Les bordures sont imprimées correctement, et la facture en montre l'usage. Il faut savoir que les bordures sont imprimées avec une largeur de 1 pixel, juste à l'intérieur des cellules concernées. Si une cellule imprime la bordure de droite, et la cellule suivante la bordure de gauche, il y aura une bordure apparente de 2 pixels si les deux bordures sont de la même couleur. Sinon, les deux couleurs apparaissent distinctement. Voici la facture dans la fenêtre du tableur: Et voici la facture imprimée: C'est sympa de pouvoir faire ça en Panoramic, non ? | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Ven 6 Avr 2012 - 12:23 | |
| Nouvelle version:
J'ai corrigé le bug sur les valeurs décimales ! Il n'y a plus de problèmes avec la représentation des valeurs flottantes.
Et j'ai ajouté une fonction permettant de choisir les options suivantes du tableur: - nombre de chiffres après la virgule (défaut=2) - utilisation de séparateurs de milliers (défaut=oui) - représentation française ou anglaise des nombres (défaut=française)
La représentation des nombres est: Française: 12.345,6789 Anglaise: 12,345.6789
Les prix unitaires de la facture unt été passés avec des décimales pour montrer le résultat.
Prochaine étape: pouvoir sauvegarder et recharger un tableau avec les adaptations de couleurs et bordures.
| |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Ven 6 Avr 2012 - 14:24 | |
| Bien joué Klaus, je teste ça ce soir | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Ven 6 Avr 2012 - 16:38 | |
| Klaus, il serait pratique aussi d'avoir une fonction On_change sur certaines cellules, je pense pour pouvoir déclencher des traitement dans panoramic quand certaines cases sont modifiées (cases type A1, Colonne, Ligne ou ensemble de cellule, de ligne ou de colonnes). Est-ce que cela te parrait interessant et faisable ?
| |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Ven 6 Avr 2012 - 17:25 | |
| Tu touches là la limite de ce qu'on peut faire dans une DLL, par rapport à Panoramic. Je ne peux pas déclencher directement un évènement spécifique.
Par contre, je peux déclencher un évènement ON_CHANGE dans un EDIT. Si j'ai le handle du EDIT - et on peut maintenant avoir le handle d'un EDIT en Panoramic - je peux charger une valeur dans le EDIT concerné, et ceci déclenche l'évènement ON_CHANGE. Pn peut alors utiliser la fonction TEXT$ pour récupérer le contenu du EDIT et faire un traitement en rapport. Pour ne pas déranger l'afficha de la form principale, il suffit de faire HIDE de ce EDIT. Je vais implémenter cette fonctionnalité qui me paraît intéressante. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Ven 6 Avr 2012 - 17:38 | |
| Sauvegarde et restauration marchent bien maintenant,en préservant données, formules, couleurs et bordures.
Voilà, le tableur est pleinement utilisable. Tout ce qui suit servira à le rendre encore plus performant ou plus facile à utiliser, lais dès lors, il est fonctionnellement complet. | |
|
| |
Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Ven 6 Avr 2012 - 17:48 | |
| | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Ven 6 Avr 2012 - 19:40 | |
| Merci, Jack ! Ca me va droit au coeur ! Et Jicehel m'inspire: voici une version qui permet de définir un évènement ON_CHANGE si le contenu d'une cellule spécifique a changé ! Pour cela, on déclare un EDIT "bidon" de la amnière suivante: - Code:
-
label tableurchange dim s$ EDIT 17 : hide 17 : on_change 17,tableurchange .. tableurchange: s$ = text$(17) ' ici, s$ contient un texte du type "Change: (12,5) xxxxx" ' avec xxxx=nouveau contenu de la cellule (12,5) return
Et le plus intéressant: on peut définir le même évènement pour plusieurs cellules, ou des évènements, un pour chaque cellule, etc. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 9:03 | |
| Nouvelle version:
J'ai ajouté une fonction permettant de protéger/déprotéger globalement un tableau contre toute modification en saisie (données et/ou formules). La modification par programme reste possible.
J'ai ajouté aussi une fonction permettant de protéger/déprotéger une plage de cellules sélectionnées contre toute modification en saisie (données et/ou formules). La modification par programme reste possible.
L'usage de la seconde fonction avec une plage englobant le rectangle complet utile en mode protection, puis des appels successifs à le même fonction avec des plages sélectives en mode déprotection permet d'autoriser en saisie juste les zones censées être vafriables et de garder les autres fixes. J'ai appliqué cela à la facture: les références, libellés et quantités peuvent être saisies, mais rien d'autre. | |
|
| |
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 11:22 | |
| Bravo Klaus !
As-tu pensé à mettre les sources de ta DLL sur SourceForge ? Le tableur d'origine y était déjà. Cela permettrait aux gens intéressés de récupérer les sources à mesure qu'elles sont modifiées. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 11:43 | |
| Oui, je le soumettrai à Sourceforge, dès que la version sera suffisamment stable. Pour le moment, j'ajoute des fonctions en permanence, et j'imagine qu'il peut encore y avoir des bugs. Mais c'est prévu, et à ce titre, j'ai laissé tous les commentaires d'origine, avec les noms des personnes etc. J'ai juste ajouté mon nom dans la liste, avec un bref descriptif des modifs apportées.
Et une nouvelle version: j'ai ajouté une fonction qui permet de bloquer et débloquer l'appel de l'éditeur de cellules par le menu. J'ai ajouté aussi une case à cocher "cellule protégée" dans l'éditeur de cellules - on peut ainsi constituer un formulaire avec des champs protégés, soit par programme, soit interactivement par l'éditeur de cellules.
| |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 12:30 | |
| Je suis en train de tester Klaus. Bon boulot vraiment. Test calcul avec décimal ok Attention toutefois, on travaille avec la virgule => OK mais si on est anglais, il n'affiche pas d'erreur si on met le décimal avec un . par contre, il ignore l'erreur et considère 2.3 comme 23 Test d'alerte sur modification d'une valeur ok, par contre, ce serait bien d'avoir l'option qui désactive les calculs temps que l'on modifie les valeurs (au moins temps que l'on n'a pas validé le contenu). En effet si on mets une alerte sur le total par exemple, à chaque fois que l'on modifie un nombre quelconque, le traitement de l'alerte s'effectue. Ce n'est pas forcément ce qui est attendu Imaginons par exemple que l'on veuille être alerté si un résultat d'entreprise est négatif, si on change la valeur du bénéfice, on supprime le contenu de la cellule => traitement de l'alarme et on saisi le bénéfice (par exemple à 6 chiffres). Pour les 5 premiers chiffres, l'alerte se déclenchera. Qu'en penses-tu ? Dans le code de la facture, tu répètes plusieurs fois: - Code:
-
i% = dll_call4("BordurePlageTableur",adr(s$),0,0,255) => Est ce une erreur de copié coller (je pense) ou est-ce que ça a un interet qui m'a échappé ? Je pense que c'est un problème de copier / coller car tu repète aussi le S$="TBLR" alors qu'il ne change pas de valeurs (mais ça aurait pu être aussi pour rendre le code plus pédagogique, toutefois vu le source, j'en doute) Note: en regardant ton source, j'ai compris ce qui m'échappait hier, car je n'avais pas pris le temps d'étudier la modif de ton exemple (shame on me ..) C'est la fonction: - Code:
-
i% = dll_call3("SiCelluleChangeTableur",handle(9),6,5) qui permet d'utiliser l'edit factice PS: quand on quitte la facture, après avoir affiché le message (bien ce message), il demande 2 fois si on vaut sauvegarder, je pense que c'est un bug En tout cas Klaus, tu es encore en train de faire un truc vraiment super. Merci pour tout le monde | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 13:01 | |
| Merci d'analyser mon programme. Voilà mes réponses, point par point: - Citation :
-
Attention toutefois, on travaille avec la virgule => OK mais si on est anglais, il n'affiche pas d'erreur si on met le décimal avec un . par contre, il ignore l'erreur et considère 2.3 comme 23
J'ai tout modifié pour que cela marche en mode Français. Il y a une option "représentation anglaise". Est-ce que tu l'as essayé ou tu essaies seulement de rentrer 2.3 comme valeur décimale en mode français ? Avec la virgule, tout marche bien, y compris avec les "." comme séparateurs de milliers. Je testerai le monde anglais lorsque, vers la fin, j'ajouterai l'option multi-langage avec français, anglais, allemand. - Citation :
Test d'alerte sur modification d'une valeur ok, par contre, ce serait bien d'avoir l'option qui désactive les calculs temps que l'on modifie les valeurs (au moins temps que l'on n'a pas validé le contenu). En effet si on mets une alerte sur le total par exemple, à chaque fois que l'on modifie un nombre quelconque, le traitement de l'alerte s'effectue. Ce n'est pas forcément ce qui est attendu Imaginons par exemple que l'on veuille être alerté si un résultat d'entreprise est négatif, si on change la valeur du bénéfice, on supprime le contenu de la cellule => traitement de l'alarme et on saisi le bénéfice (par exemple à 6 chiffres). Pour les 5 premiers chiffres, l'alerte se déclenchera. Qu'en penses-tu ?
Tu peux activer/désactiver par programme, le déclenchement de l'évènement. Mais je ne peux pas faire cela de façon automatique. Pour cela, il faudrait savoir si un changement de contenu de cellule est le "dernier" à ce produire - or, il faudrait être préscient pour le savoir. C'est le même problème que pour la détection du double clic - seul un timer avec un délai arbitraire permet de savoir si deux clics sont suffisamment proches pour être considérés comme un double clis. De même, il faudrait un timer pour savoir si pour deux modifications d'une même cellule, il ne faudrait prendre en compte que le dernier. Et ceci, tu peux le faire en Panoramic, mais je ne peux pas bloquer cela arbitrairement dans la dll. - Citation :
Dans le code de la facture, tu répètes plusieurs fois: Code: i% = dll_call4("BordurePlageTableur",adr(s$),0,0,255)
=> Est ce une erreur de copié coller (je pense) ou est-ce que ça a un interet qui m'a échappé ? Je pense que c'est un problème de copier / coller car tu repète aussi le S$="TBLR" alors qu'il ne change pas de valeurs (mais ça aurait pu être aussi pour rendre le code plus pédagogique, toutefois vu le source, j'en doute)
Non, ce n'est ni une erreur ni un oubli. si tu regardes bien, les plages choisies sont chaque fois différentes. ceci me permet de définir des cadres autour de zones distinctes, dans la facture. mais effectivement, les lignes "S$=..." se répètent alors que la définition des bords ne change pas - là, c'est par pédagogie... - Citation :
i% = dll_call3("SiCelluleChangeTableur",handle(9),6,5) qui permet d'utiliser l'edit factice
Avec cet appel, je déclare un évènement on_change sur une cellule (6,5) que j'ai choisie arbitrairement. On peut appeler cette fonction plusieurs fois sur des cellules différentes et avec le même handle - on obtient alors le déclenchement du même évènement pour le changement de données de n'importe laquelle de ces cellules. La différentiation peut se faire par le texte déposé dans l'edit factice: on y touve les coordonnées de la cellule causant l'évènement. On peut aussi donner chaque fois un handle différent (donc avoir des edit factices multiples) et avoir ainsi plusieurs routines évènement en fonction du type d'évènement souhaité. Théoriquement, on peut programmer un évènement distinct sur CHAQUE cellule ! - Citation :
PS: quand on quitte la facture, après avoir affiché le message (bien ce message), il demande 2 fois si on vaut sauvegarder, je pense que c'est un bug
Oui, c'est un bug, et je le corrigerai prochainement. | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 14:00 | |
| Klaus, je pense avoir trouvé un autre bug en utilisant le programme de test Non-modal. Si tu supprimes des lignes, ça supprimes bien les lignes mais le programme recopie seulement 2 lignes (les autres restent à leur position d'origine) | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 15:50 | |
| Crée le tableau dans lequel tu veux supprimer des lignes, et enregistre-le par le menu File/Save as.... Tu obtiens un fichier montableau.sss qui est un simple fichier texte. Poste-moi ce fichier dans un encadré "citer" (quote) et indique-moi à partir de quelle ligne tu veux supprimer combien de lignes. Je pourrai alors le regarder.
Nouvelle version en ligne: C'est le début de la version multi-langage ! J'ai prévu 3 langues pour le moment: anglais, français et allemand. Pour le moment, tous les menus du tableur sont traduits, mais pas encore les messages et les libellés des champs dans les fenêtres.
Dans le programme de démo, j'ai mis la facture en version française, et laissé le modal et non-modal en anglais. La traduction est réalisée par une nouvelle fonction appelée juste après avoir lancé le tableur en mode non-modal, mais en fait on peut faire la traduction à n'importe quel moment. | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 16:06 | |
| Klaus pour le faire, c'est tout simple, je marque 1 dans une case, 2 en dessous puis 3 ... jusqu'à 10 (Bref de 1 à 10 dans une colonne) J'utilise le bouton Sup. lignes (mais ça fait pareil si on fait la manip. par le menu Nb of Rows 2 Starting row: 2 => j'obtiens en ligne 1:1 (c'est bon), ligne 2 et 3 j'ai 4 et 5 (c'est bon) Par contre en dessous, j'ai 2 lignes blanches puis 6,7,8,9 et 10 => Résultat, seules 2 lignes ont été recopiées
Si je supprime 3 lignes, il en recopie 3 puis mets 3 lignes blanches en dessous et ne remonte pas les autres. Si j'en supprime 6, j'obtiens en ligne 1:1, ligne 2:8 (c'est bon jusqu'à la ligne 7:13) puis 6 lignes blanches puis les autres lignes sont inchangées.
Tiens d'ailleurs, un truc sympa, quand on commence à remplir 1,2,3,... Quand on insert des lignes, il recopie la valeur dans les nouvelles cases et les incrémente. C'était peut être marqué dans la doc, mais j'avais dû passer à coté. C'est bien pratique ^^ | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 16:34 | |
| | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 17:47 | |
| BUG corrigé ! C'était un bug dans le logiciel d'origine ! | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 17:57 | |
| Je n'avais même pas supposé que ça pouvait venir d'ailleurs ^^ Je pense que les auteurs de ce source y gagneront à ce que tu mette ton nez dedans ^^ Mais bon, ça ne retire rien à leur mérite pour avoir commencer leur DLL et pour la partager, mais avoir quelqu'un comme toi pour les aider à avancer ne peut être que positif. S'il continue de faire évoluer leur programme, je pense que ça devrait les motiver. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Sam 7 Avr 2012 - 19:30 | |
| Leur mérite est énorme ! La partie "calcul des formules" est puissante, performante et ingénieuse, et de plus extensible ! Rien que pour ça, ça vaut le coup !
Nouvelle version: extension de la traduction (en,fr,de) pour l'essentiel des messages et libellés, y compris dans l'éditeur de cellules et la fenêtre des options. Si tu trouves des messages en anglais, signale-les-moi !
D'ailleurs, as-tu remarqué qu'on peut invoquer l'éditeur de cellules par un simple clic droit sur une cellule ? Il apparait alors avec le contenu et/ou la formule associés à cette cellule, ainsi que l'état de protection...
EDIT
Correction de deux bugs mineurs dans la DLL (dans l'évaluation de certaines plages de cellules au niveau des fonctions SUM et COUNT). Egalement mise à jour de la doc sss.rtf pour documenter les 3 opérateurs AND, OR et XOR qui existaient bien mais qui n'étaient pas documentés. Correction d'une inversion entre les opérateurs MIN et MAX. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL Lun 9 Avr 2012 - 18:43 | |
| Nouvelle version, avec un ajout très important; on peut maintenant utiliser des fonctions et opérateurs sur des chaînes de caractères !
Première fonction: STR(lig;col) prenant une cellule comme chaîne de caractères (attention: ";" !). Par exemple: E3 est la valeur NUMERIQUE de la cellule ligne 3 colonne 5 (ou E). Par contre, STR(3;5) prend le même contenu, mais en tant que chaîne de caractères.
Seconde fonction: CMD(lig;col) prenant le contenu d'une cellule comme commande à exécuter.
Premier opérateur: | (barre verticale) pour concatener deux chaînes de caractères. Pour le moment, n'ayant que deux fonctions de chaîne de caractères, on ne peut que concatener deux ou plusieurs cellules, ou les exécuter comme formules. Mais d'autres fonctions et opérateurs sont en préparation.
Ainsi, la formule STR(7;3)|STR(2;4) produit la concaténation de F3 et B4. La formule CMD(4;3) prend le contenu de D3 et l'exécute comme commande.
EDIT
La fenêtre de l'éditeur de cellules contient maintenant des cases à cocher qui montent l'état des bordures de la cellule choisie. On peut ainsi configurer les bordures interactivement. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Un vrai tableur pour Panoramic dans une DLL | |
| |
|
| |
| Un vrai tableur pour Panoramic dans une DLL | |
|