Mai 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 | 31 | | | Calendrier |
|
| | Histogrammes barres et/ou camembert | |
|
+5exdragon Jicehel Nardo26 JL35 Klaus 9 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 12:59 | |
| Voilà une petite pépite que j'ai écrite sous forme de DLL (encore !) en Delphi 6. Elle permet de faire des histogrammes en mode barres 3D pour 1 ou plusieurs séries de données, ou camembert 3D pour 1 série de données. On peut copier l'histogramme dans le presse-papier pour le charger dans un picture ou image, ou on peut le sauver en format BMP ou JPG. Titres, légendes etc sont gérées. On peut imaginer de générer un histogramme en format JPG, puis de l'inclure dans une édition papier à l'aide de Print.dll... Voici un programme de démonstration (la DLL correspondante se touve dans DLL divers sur mon site, et la doc est mise à jour): - Code:
-
label draw
dim i%, file$, nval%, nser%
file$ = "Test_histo.txt"
button 1 : top 1,400 : left 1,10 : width 1,150 caption 1,"Dessiner l'histogramme" on_click 1,draw
alpha 4 : top 4,60 : left 4,10 : caption 4,"Nombre de valeurs:" edit 5 : top 5,60 : left 5,110 : width 5,40 alpha 6 : top 6,60 : left 6,170 : caption 6,"Les deux séries doivent avoir le MEME nombre de valeurs !" alpha 7 : top 7,30 : left 7,10 : caption 7,"Type d'histogramme:" option 8 : top 8,30 : left 8,130 : caption 8,"Barres" option 9 : top 9,30 : left 9,190 : caption 9,"Camembert"
alpha 2 : top 2,90 : left 2,10 : caption 2,"Série 1" memo 11 : top 11,110 : left 11,10 : width 11,70 : height 11,200 alpha 3 : top 3,90 : left 3,110 : caption 3,"Série 2" memo 12 : top 12,110 : left 12,110 : width 12,70 : height 12,200 alpha 10 : top 10,90 : left 10,220 : caption 10,"Légendes" memo 13 : top 13,110 : left 13,220 : width 13,70 : height 13,200
alpha 21 : top 21,330 : left 21,10 : caption 21,"Légende série 1:" edit 22 : top 22,330 : left 22,110 alpha 23 : top 23,360 : left 23,10 : caption 23,"Légende série 1:" edit 24 : top 24,360 : left 24,110
alpha 31 : top 31,110 : left 31,350 : caption 31,"Titre haut;" alpha 32 : top 32,140 : left 32,350 : caption 32,"Titre gauche;" alpha 33 : top 33,170 : left 33,350 : caption 33,"Titre droite;" alpha 34 : top 34,200 : left 34,350 : caption 34,"Titre bas;" edit 35 : top 35,110 : left 35,420 edit 36 : top 36,140 : left 36,420 edit 37 : top 37,170 : left 37,420 edit 38 : top 38,200 : left 38,420
mark_on 8 end
draw: if numeric(text$(5))=0 message "Nombre de valeurs invalide" return end_if nval% = val(text$(5)) if nval%<2 message "Nombre de valeurs trop petit" return end_if if count(11)<>nval% message "Nombre de valeurs de la série 1 non conforme" return end_if if count(12)>0 if count(12)<>nval% message "Nombre de valeurs de la série 2 non conforme" return end_if end_if for i%=1 to nval% if numeric(item_read$(11,i%))=0 message "Série 1 ligne "+str$(i%)+" invalide" return end_if next i% nser% = 1 if count(12)>0 for i%=1 to nval% if numeric(item_read$(12,i%))=0 message "Série 2 ligne "+str$(i%)+" invalide" return end_if next i% nser% = 2 end_if file_open_write 1,file$ if checked(8)=1 file_writeln 1,"#Type=BAR" else file_writeln 1,"#Type=PIE" end_if file_writeln 1,"#Séries="+str$(nser%) file_writeln 1,"#Valeurs="+str$(nval%) file_writeln 1,"#Données=1" for i%=1 to nval% file_writeln 1,item_read$(11,i%) next i% if nser%=2 file_writeln 1,"#Données=2" for i%=1 to nval% file_writeln 1,item_read$(12,i%) next i% end_if file_writeln 1,"#Titres" if text$(35)<>"" then file_writeln 1,"Haut="+text$(35) if text$(36)<>"" then file_writeln 1,"Gauche="+text$(36) if text$(37)<>"" then file_writeln 1,"Droite="+text$(37) if text$(38)<>"" then file_writeln 1,"Bas="+text$(38) file_writeln 1,"#Légendes séries" if text$(22)<>"" then file_writeln 1,text$(22) if text$(24)<>"" then file_writeln 1,text$(24) file_writeln 1,"#Légendes valeurs" for i%=1 to nval% file_writeln 1,item_read$(13,i%) next i% file_writeln 1,"#Fin" file_close 1 DLL_on "histo.dll" i% = DLL_call1("Histogramme",adr(file$)) DLL_off end
Voici un histogramme généré par cela: [img] [/img] | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 16:49 | |
| C'est génial et spectaculaire ! Mais on ne fournit plus à tester tes nouveautés, ça m'occupe à temps plein ! | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 16:57 | |
| J'ai simplement rendu accessible un contrôle fourni avec Delphi 6, et encore, uniquement avec les options basiques. Il y a encore un fort potentiel d'évolution, tant au niveau des types de graphiques qu'au niveau des paramétrages.
| |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 17:12 | |
| Cependant (pour moi) le fonctionnement ne saute pas aux yeux. Pourquoi deux séries de valeurs ? Au vu de ton exemple je ne vois qu'une série de valeurs (les pourcentages), avec éventuellement une légende explicative pour chaque valeur... (mais j'avoue que je n'ai pas étudié ton programme, juste lancé, pour voir). Bon je regarde à nouveau la doc, que je n'ai que survolée. | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 17:31 | |
| La version "camembert, ne prend en compte qu'une seule série de données. La version "barres" prend en compte entre 1 et n séries ayant toutes le MEME nombre de valeurs.
Mon programme de démo est limité à 2 séries, mais techniquement, sur le même modèle, on peut soumettre plusieurs séries, et l'histogramme par barres les montre toutes dans le même diagramme.
Si, par mon programme de démo, tu envoies 2 séries de données, tu obtiens un histogramme en mode barres par défaut, montrant les deux séries. Tu peux alors cliquer sur "Camembert" pour obtenir cette représentation, évidemment seulement pour la première série, puis bouton "Barres" et on récupère la précédente présentation. Des boutons permettent d'enregistrer le diagramme en format BMP ou JPG ou de le copier dans le presse-papier.
Les titres sont des chaines de caractères affichées horizontalement en haut et en bas, et verticalement à gauche et à droite du diagramme. En mode barres, les légendes des séries sont affichées à côté de chaque série correspondante, et les légendes des valeurs sont affichées, selon l'axe horizontal, devant chaque colonne représentant une valeur, et ceci de façon inclinée en respectant l'angle de la perspective.
| |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 17:40 | |
| Merci pour tes explications limpides, comme toujours. Évidemment j'étais parti sur le camembert, alors je ne comprenais pas les deux séries ! | |
| | | Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 18:37 | |
| Un truc tout bête, je me demandai si on pouvait pas le faire entièrement en basic panoramic.... et je viens de m’apercevoir qu'il n'existe pas de fonction 2D/3D pour faire un ovale...
| |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 18:43 | |
| Ou alors point par point... | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 18:57 | |
| Super Génial Klaus, même si tu n'a "que" rendu accessible un contrôle accessible sous Delphi, c'est un complément super pratique, ne te gène pas si tu en a d'autres aussi pratique et complémentaire. Pour faire des programmes "pro" ce genre de fonctions en jette et même si en principe le principal c'est que le programme fonctionne. Dans les fait, ce sont ce genre de fonctions dont les gens se rappellent Perso quand j'ai commencé dans la vie active, en attendant des informations des automates, j'avais fais un afficheur à segment. Quand j'ai présenté mon programme de supervision, bien sûr ils étaient content, mais là où ils m'ont tous félicitaient, c'est sur la console qui s'affichait avec l'afficheur à segments... J'étais à la fois flatté et un peu désabusé... Pour moi, c'était juste un petit gadget pour m'occuper ... ^^ | |
| | | Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 19:00 | |
| Oui, on peut faire ça à "l'ancienne" avec des cos et de sin... Néanmoins, la solution de Klaus, facilite les choses... @Jicehel : et oui c'est le pb de la prog : on ne voit pas le boulot qu'il y a derriere... Perso dans ma boite, j'étais pour certains, juste le type qui allait mettre un petit composant de merde (une EPROM) sur une machine de 2m de haut sur 10m de long...(ça pèse pas lourd... ) Difficile pour eux de réaliser le boulot qu'il y avait dedans... c'est sûr : cela en jette moins que de la tole pliée avec des moteurs de partout... C'est même pire maintenant quand je me pointe avec mes "after-height" (flashdisk) lol | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Dim 8 Jan 2012 - 19:12 | |
| Je connais bien, après mon BTS informatique Industielle, le programme que je faisait récupérait les données des automates des lignes de vernissage de boite métalliques (Après j'en ai fais aussi pour les lignes de fabrication de boites avec des machines pour souder, des chemins, des palétiseurs, etc ... | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Sam 14 Jan 2012 - 15:44 | |
| J'ai remis une nouvelle version en ligne. Nouveautés: - adaptation automatique de l'échelle verticale à la fourchette des valeurs transmises - affichage de la légende des valeurs le long de l'axe horizontal - paramétrage du nombre de caractères à afficher dans la légende des valeurs le long de l'axe horizontal Si le nombre de valeurs est tel que l'histogramme déborde en largeur le cadre visible, une barre de défilement permet de visualiser le graphique entier. Et, pour montrer les possibilités de la DLL, j'ai fait un petit programme Panoramic qui récupère des statistiques INSEE concernant la retraite, en comparant cotisants, retraités et rapport entre les deux, entre 1975 et 2010, dont voici le lien. Le programme va chercher le tableau en format Excel (*.xls) tel que mis à disposition par l'INSEE. Il affiche le mode d'emploi pour la récupération. Pour ceux qui n'ont pas Excel, il y a une variable EXCEL%=1 qu'il faut changer en EXCEL%=0, et je donne ici le contenu du fichier converti en fichier text avec TAB comme séparateur: - Citation :
- Cotisants, retraités et rapport démographique du régime général en 2010
effectifs en millions (1) Cotisants Retraités (2) Rapport démographique (3) 1975 13,0 4,1 3,14 1976 13,2 4,4 3,02 1977 13,4 4,5 2,95 1978 13,4 4,7 2,83 1979 13,4 4,8 2,77 1980 13,4 5,0 2,68 1981 13,2 5,1 2,58 1982 12,9 5,2 2,50 1983 12,9 5,3 2,44 1984 13,0 5,6 2,34 1985 12,9 5,9 2,21 1986 12,8 6,2 2,08 1987 12,8 6,4 1,99 1988 12,9 6,7 1,93 1989 13,4 7,0 1,91 1990 13,7 7,3 1,88 1991 13,7 7,6 1,79 1992 14,1 7,9 1,77 1993 13,7 8,2 1,66 1994 13,8 8,5 1,62 1995 14,1 8,8 1,61 1996 14,0 9,0 1,56 1997 14,1 9,2 1,54 1998 14,5 9,4 1,54 1999 14,9 9,6 1,56 2000 15,4 (*) 9,7 1,59 2001 15,8 9,8 1,61 2002 16,5 10,0 1,65 2003 16,5 10,2 1,62 2004 16,5 10,4 1,58 2005 16,6 10,7 1,55 2006 16,8 11,1 1,51 2007 17,1 11,5 1,49 2008 17,9 11,9 1,50 2009 (r) 17,6 12,2 1,44 2010 (p) 17,8 12,6 1,42 * : rupture de série en 2000 à la suite du non dénombrement des comptes anticipés. p : données provisoires. r : données révisées. (1) : effectifs au 31 décembre jusqu'en 1981, au 1er juillet à partir de 1982. (2) : ensemble des retraités (droits directs et indirects) payés par 16 caisses de métropole. (3) : nombre de cotisants/nombre de retraités. Champ : France métropolitaine. Source : Caisse nationale d'assurance vieillesse.
Je reprécise que la séparation entre les colonnes doit être un TAB (chr$(9)). Le fichier peut être laissé tel quel: les lignes inutiles sont automatiquement éliminées, ainsi que les (r) etc. Voici le source du programme: - Code:
-
' ce programme télécharge les statistiques Actifs-Retraités INSEE ' puis produit un histogramme avec ces données. ' ' Le téléchargement arrive en format Excel (*.xls). Ouvrir ce ' fichier avec Excel et sauvegarder en format texte avec séparateur TAB, ' sous le nom de fichier Actifs-REtraités.txt. ' ' Si Excel n'est pas disponible, mettre la valeur de EXCEL% à zéro, ' et le programme suppose la préexistance du fichier texte.
label purger_ligne, extraire_valeur, charger_fichier label telecharger_fichier, generer
' paramètres à adapter dim EXCEL% : EXCEL% = 1 dim lien$ : lien$ = "http://www.insee.fr/fr/ffc/figure/NATTEF04560.xls" dim file_stat$ : file_stat$ = "Actifs-Retraités.txt" dim file_histo$ : file_histo$ = "Histogramme.txt"
height 0,550 dim annees%(50), cotisants(50), retraites(50), rapport(50) dim n_lignes%, canal%, ligne$, i% , j%, s$, crlf$
crlf$ = chr$(13) + chr$(10) button 2 : top 2,10 : left 2,10 : width 2,200 caption 2,"Charger Actifs-Retraités.txt" on_click 2,charger_fichier if EXCEL%=1 alpha 3 : top 3,40 : left 3,10 s$ = "Pour charger les statistiques Actifs-Retraités de l'INSEE," + crlf$ s$ = s$+"Cliquez sur le bouton Télécharger" caption 3,s$ alpha 4 : top 4,40 : left 4,10 s$ = "Dans le tableau Excel, faire:"+chr$(13)+chr$(10) s$ = s$ + " Ficher/Enregistrer sous: "+file_stat$+crlf$ s$ = s$ + " Type de fichier: Texte (séparateur: tabulation) (*.txt)"+crlf$ s$ = s$ + "Puis cliquer sur le bouton Charger" caption 4,s$ : hide 4 hide 2 : hide 4 button 1 : top 1,10 : left 1,10 : width 1,200 caption 1,"Télécharger statistiques du net" on_click 1,telecharger_fichier end_if
' memo 10 : hide 10 : top 10,10 : left 10,10 : width 10,250 : height 10,500 button 11 : hide 11 : top 11,10 : left 11,270 : width 11,120 caption 11,"Générer histogramme" on_click 11,generer
end
generer:
file_open_write 1,file_histo$ file_writeln 1,"#Type=BAR" file_writeln 1,"#Largeur=2" file_writeln 1,"#Séries=3" file_writeln 1,"#Valeurs="+str$(n_lignes%) file_writeln 1,"#Données=1" for i%=1 to n_lignes% s$ = str$(rapport(i%)) j% = instr(s$,".") if j%>0 then s$ = left$(s$,j%-1)+","+mid$(s$,j%+1,len(s$)) file_writeln 1,s$ next i% file_writeln 1,"#Données=2" for i%=1 to n_lignes% s$ = str$(retraites(i%)) j% = instr(s$,".") if j%>0 then s$ = left$(s$,j%-1)+","+mid$(s$,j%+1,len(s$)) file_writeln 1,s$ next i% file_writeln 1,"#Données=3" for i%=1 to n_lignes% s$ = str$(cotisants(i%)) j% = instr(s$,".") if j%>0 then s$ = left$(s$,j%-1)+","+mid$(s$,j%+1,len(s$)) file_writeln 1,s$ next i% file_writeln 1,"#Titres" file_writeln 1,"Haut="+"Actifs/Retraités (en millions)" file_writeln 1,"Bas=Années "+str$(annees%(1))+" à "+str$(annees%(n_lignes%)) file_writeln 1,"#Légendes séries" file_writeln 1,"Rapport" file_writeln 1,"Retraités" file_writeln 1,"Cotisants" file_writeln 1,"#Légendes valeurs" for i%=1 to n_lignes% ' file_writeln 1,right$(str$(annees%(i%)),2) file_writeln 1,str$(annees%(i%)) next i% file_writeln 1,"#Fin" file_close 1
dll_on "histo.dll" i% = DLL_call1("Histogramme",adr(file_histo$)) dll_off return
telecharger_fichier: hide 1 : hide 3 execute lien$ show 2 : show 4 return charger_fichier: hide 2 : if EXCEL%=1 then hide 4 canal% = 1 : ' suite au bug relevé par Jecehel file_open_read canal%,file_stat$ n_lignes% = 0 file_readln canal%,ligne$ file_readln canal%,ligne$ file_readln canal%,ligne$ file_readln canal%,ligne$
file_readln canal%,ligne$ while numeric(left$(ligne$,4))=1 gosub purger_ligne item_add 10,ligne$ n_lignes% = n_lignes% + 1 gosub extraire_valeur annees%(n_lignes%) = val(s$) gosub extraire_valeur cotisants(n_lignes%) = val(s$) gosub extraire_valeur retraites(n_lignes%) = val(s$) gosub extraire_valeur rapport(n_lignes%) = val(s$) file_readln canal%,ligne$ end_while file_close canal% show 10 : show 11 return
purger_ligne: i% = instr(ligne$," (") if i%>0 then ligne$ = left$(ligne$,i%-1) + mid$(ligne$,instr(ligne$,")")+1,len(ligne$)) i% = instr(ligne$,"(") if i%>0 then ligne$ = left$(ligne$,i%-1) + mid$(ligne$,instr(ligne$,")")+1,len(ligne$)) i% = instr(ligne$," ") if i%>0 then ligne$ = left$(ligne$,i%-1) + mid$(ligne$,i%+1,len(ligne$)) return
' extraire_valeur: ' i% = instr(ligne$,chr$(9)) ' s$ = left$(ligne$,i%-1) ' j% = instr(s$,",") ' if j%>0 then s$ = left$(s$,j%-1) + "." + mid$(s$,j%+1,len(s$)) ' ligne$ = mid$(ligne$,i%+1,len(ligne$)) ' return
' remplacement par Jecehel extraire_valeur: i% = instr(ligne$,chr$(9)) if i% > 0 s$ = left$(ligne$,i%-1) j% = instr(s$,",") if j%>0 then s$ = left$(s$,j%-1) + "." + mid$(s$,j%+1,len(s$)) ligne$ = mid$(ligne$,i%+1,len(ligne$)) end_if return Et voici le résultat: [img] [/img]
Dernière édition par Klaus le Sam 14 Jan 2012 - 18:46, édité 2 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Sam 14 Jan 2012 - 17:55 | |
| Tout d'abord merci pour cette nouvel apport. Par contre sur l'exemple, je pense qu'il faut revoir la partie "sans Excel" à moins que j'aille fait des erreurs. Par exemple, on utilise l'objet 4 alors que l'on ne le créé pas... Perso, ça c'est simple, j'ai fais - Code:
-
if EXCEL%=1 alpha 3 : top 3,40 : left 3,10 s$ = "Pour charger les statistiques Actifs-Retraités de l'INSEE," + crlf$ s$ = s$+"Cliquez sur le bouton Télécharger" caption 3,s$ alpha 4 : top 4,40 : left 4,10 s$ = "Dans le tableau Excel, faire:"+chr$(13)+chr$(10) s$ = s$ + " Ficher/Enregistrer sous: "+file_stat$+crlf$ s$ = s$ + " Type de fichier: Texte (séparateur: tabulation) (*.txt)"+crlf$ s$ = s$ + "Puis cliquer sur le bouton Charger" caption 4,s$ : hide 4 hide 2 : hide 4 button 1 : top 1,10 : left 1,10 : width 1,200 caption 1,"Télécharger statistiques du net" on_click 1,telecharger_fichier else alpha 4 : top 4,40 : left 4,10 : hide 4 end_if
Après, il y a un problème de traitement des données du fichier texte, perso, j'ai fait comme ça ... - Code:
-
extraire_valeur: i% = instr(ligne$,chr$(9)) if i% > 0 s$ = left$(ligne$,i%-1) j% = instr(s$,",") if j%>0 then s$ = left$(s$,j%-1) + "." + mid$(s$,j%+1,len(s$)) ligne$ = mid$(ligne$,i%+1,len(ligne$)) end_if return
J'affiche bien les données, mais quand je clique sur Histo, j'obtiens: Exeption EOleSysError in module histo.dll at 000536ED | |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: Histogrammes barres et/ou camembert Sam 14 Jan 2012 - 18:19 | |
| Vraiment bravo Klaus, c'est magnifique ce que tu fais !!!
| |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Sam 14 Jan 2012 - 18:45 | |
| @Jecehel: Pour ta première remarque: tu as bien relevé un bug si EXCEL%=0, et le l'ai corrigé dans mon source posté ci-dessus, mais par un ajout d'un IF très simple... Pour ta seconde remarque: tu as ajouté un IF pour conditionner le traitement , et j' prends cette modif (corrigé dans le source ci-dessus). Pour ta troisième remarque; Je n'ai pas du tout ce probleme: L'histogramme est fait par un contrôle ActiveX distribué avec Delphi 6 sans ajout particulier. Il s'appelle Chartfx et est en V2.0. Voici ce que dit la doc à ce sujet: - Citation :
- Chart FX includes the following files
CFX32.OCX (OLE Control) CFX32.LIC (License file) CFXOCX.PAS (Include File. Contains all the constants needed to work with Chart FX) Vérifie si ces fichiers sont sur ton système. Si tu ne les as pas, je peux les uploader et te communiquer le lien. EDIT: Voici le lien. Une fois téléchargé, tu le places dans Windows\system3\ (ou là où se trouvent les autres *.OCX), puis tu valides le contrôle dans une fenêtre dos par la commande - Citation :
- Regsvr32 CFX32.OCX
C'est tout. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Sam 14 Jan 2012 - 21:46 | |
| Désolé, j'ai toujours une erreur quand j'essaye de faire le regsrv32 sur mon Windows7 ... Je n'arrive pas à enregistrer l'ocx Je l'ai copié dans c:\windows\system32 Message: "Echec de chargement du module Vérifiez que le fichier binaire est stocké à l'emplacement désigné par le chemin... " Est-ce que ça marche pour d'autres utilisateur sous 7 64bits ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Sam 14 Jan 2012 - 22:30 | |
| Solution trouvé: il faut faire ça: lancer une commande cmd faire: cd C:\Windows\SysWOW64 faire: regsvr32 CFX32.DLL
=> enregistrement réussit ... en fait il y a 2 fois la commande regsrv32 l'une en 64 bits et l'autre en 32 ...
Je découvre mon ordi, désolé, mais bon, j'espère que ça servira à d'autres pour gagner du temps | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Sam 14 Jan 2012 - 23:00 | |
| Ah, W7... je ne l'ai pas. Je suis encore un vieux dinosaure - accro au XP pro SP3
Mais je suis très content que tu aies trouvé la solution, ce qui servira à tous ceux qui s'y intéresseront. Merci à toi pour ta persévérance ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Dim 15 Jan 2012 - 0:12 | |
| Bon donc sinon, Klaus, le programme fonctionne très bien, mais quand on lance histo.dll, a-t-on la possibilité d'activer / désactiver les boutons de droite ? (sauvegarde, affichage sous forme de camembert ?) Peut-on afficher une légende (et peut-on paramétrer son emplacement (gauche, bas, droite))? Ce n'est pas que je veuille imiter JL35 avec la DLL d'impression, mais bon, je l'aime bien cette DLL moi Si c'est juste un paramétrage, tant mieux. Si tu dois développer des options et que ça te dit, nickel. Si ce n'est pas possible ou si tu n'as pas envie de me creuser plus car ça répond pleinement à ton besoin, je ferais avec. Par contre, si tu veux que je te donne des idées pour la pousser encore plus loin (dans la mesure du possible, j'essayerais de poser de bonnes questions / propositions ) | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Dim 15 Jan 2012 - 1:10 | |
| Je l'ai déjà affirmé dans d'autres posts: je suis tout à fait ouvert à des suggestions visant à moduler ou rendre plus souple ou plus performant ce que je fais. Et tes suggestions sont exactement dans cette ligne. Je vais donc y réfléchir, et un verra bien.
Pour le moment, ce que j'ai fait, c'est de créer un outil permettant de faire quelque chose dont j'avais besoin pour mes besoins quiqui serait extrèmement difficile à réaliser en Panoramic pur. Je suis un fan inconditionnel de ce langage, et c'est justement pour ça que j'essaie de lui ajouter ce qui lui manque dans ma vision des choses, au lieu de vévier vers un autre langage ou autre système de programmation.
donc, pour le moment, je suis tombé sur ce composant qui résoud exactement mon problème, et je me suis dit que cela pourrait intéresser d'autres. Maintenant, les boutons, la position, les dimensions etc, ce sont dec choix que j'ai faites essentiellement pour moi, et il est certainement TRES facile de rendre tout cela paramétrable, voir même d'étendre cet aspect en ajoutant d'autres fonctions (comme d'autres types de graphes, par exemple).
Donc, continue à contribuer au brainstorming - comme pour Print.dll et WTP.exe, cela ne pourra qu'avoir un effet bénéfique. | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Dim 15 Jan 2012 - 9:40 | |
| Alors tu peux compter sur moi puisque je suis très fan de cette DLL qui combinée avec les grid ou les feuilles de saisies ou le traitement des fichiers comme dans ton exemple, ouvre des tas de possibilités. Mes suggestions premières sont: Affichage par défaut: seul le graphique apparait à l'écran (avec la croix pour fermer en haut) Autres boutons activables par paramètres dans le fichier (copier, enregistrer en bmp, jpg, camembert, barres, Fermer) Éventuellement, bouton "ouvrir un fichier de données" Position des boutons en paramètres optionnels (droite par défaut, mais possible bas, haut ou gauche) Possibilité de remplacer les boutons par un menu en haut avec les mêmes options Sinon dans les graphiques, il y a un truc super pratique c'est la courbe de tendance Bon il y a un truc plus simple à faire en Panoramic pur, mais qui serait bien à ajouter pour profiter de la simplicité d'utilisation de ta DLL ce sont les courbes (lisées ou non en paramètre) Et bien sûr la DLL pourrait intégrer la fonction imprimer avec les paramètres qui vont bien directement (qui utiliserait ta print.DLL) Voilà, ce sont mes première propositions et encore merci Klaus pour tes idées (et tes mises en pratiques partagées ) | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Dim 15 Jan 2012 - 10:30 | |
| Je note, et je vais voir ce que je peux faire. La plupart des suggestion me semble facile à réaliser. Wait and see... | |
| | | jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Histogrammes barres et/ou camembert Dim 15 Jan 2012 - 14:52 | |
| | |
| | | Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Histogrammes barres et/ou camembert Dim 15 Jan 2012 - 16:02 | |
| Merci Jean | |
| | | Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Histogrammes barres et/ou camembert Dim 15 Jan 2012 - 18:25 | |
| Nouvelle version de Histo.dll (et de la doc dans DLL Divers): J'ai ajouté une nouvelle routine res%=DLL_call2("HistogrammeEX",adr(nom_fichier$),config%) La différence avec la routine précédente est l'ajout du paramètre config% qui peut prendre les valeurs suivantes: 0 = histogramme seul, pas de boutons 1 = histogramme + boutons à droite (identique à la routine Histogramme) 2 = histogramme + boutons à gauche 3 = histogramme + boutons en haut 4 = histogramme + boutons en bas Ceci est le début de la "customisation", d'autres possibilités suivront. Et voici le programme de démo adapté à cette version: - Code:
-
' ce programme télécharge les statistiques Actifs-Retraités INSEE ' puis produit un histogramme avec ces données. ' ' Le téléchargement arrive en format Excel (*.xls). Ouvrir ce ' fichier avec Excel et sauvegarder en format texte avec séparateur TAB, ' sous le nom de fichier Actifs-REtraités.txt. ' ' Si Excel n'est pas disponible, mettre la valeur de EXCEL% à zéro, ' et le programme suppose la préexistance du fichier texte.
label purger_ligne, extraire_valeur, charger_fichier label telecharger_fichier, generer
' paramètres à adapter dim EXCEL% : EXCEL% = 0 dim lien$ : lien$ = "http://www.insee.fr/fr/ffc/figure/NATTEF04560.xls" dim file_stat$ : file_stat$ = "Actifs-Retraités.txt" dim file_histo$ : file_histo$ = "Histogramme.txt"
height 0,550 dim annees%(50), cotisants(50), retraites(50), rapport(50) dim n_lignes%, canal%, ligne$, i% , j%, s$, crlf$, config%
crlf$ = chr$(13) + chr$(10) button 2 : top 2,10 : left 2,10 : width 2,200 caption 2,"Charger Actifs-Retraités.txt" on_click 2,charger_fichier if EXCEL%=1 alpha 3 : top 3,40 : left 3,10 s$ = "Pour charger les statistiques Actifs-Retraités de l'INSEE," + crlf$ s$ = s$+"Cliquez sur le bouton Télécharger" caption 3,s$ alpha 4 : top 4,40 : left 4,10 s$ = "Dans le tableau Excel, faire:"+chr$(13)+chr$(10) s$ = s$ + " Ficher/Enregistrer sous: "+file_stat$+crlf$ s$ = s$ + " Type de fichier: Texte (séparateur: tabulation) (*.txt)"+crlf$ s$ = s$ + "Puis cliquer sur le bouton Charger" caption 4,s$ : hide 4 hide 2 : hide 4 button 1 : top 1,10 : left 1,10 : width 1,200 caption 1,"Télécharger statistiques du net" on_click 1,telecharger_fichier end_if
' memo 10 : hide 10 : top 10,10 : left 10,10 : width 10,250 : height 10,500 button 11 : hide 11 : top 11,10 : left 11,270 : width 11,120 caption 11,"Générer histogramme" on_click 11,generer
container_option 20 : hide 20 : top 20,40 : left 20,270 : width 20,200 : height 20,130 caption 20,"Format" option 21 : parent 21,20 : top 21,20 : left 21,10 : caption 21,"Sans boutons" option 22 : parent 22,20 : top 22,40 : left 22,10 : caption 22,"Boutons à droite" option 23 : parent 23,20 : top 23,60 : left 23,10 : caption 23,"Boutons à gauche" option 24 : parent 24,20 : top 24,80 : left 24,10 : caption 24,"Boutons en haut" option 25 : parent 25,20 : top 25,100 : left 25,10 : caption 25,"Boutons en bas"
mark_on 22
end
generer:
file_open_write 1,file_histo$ file_writeln 1,"#Type=BAR" file_writeln 1,"#Largeur=2" file_writeln 1,"#Séries=3" file_writeln 1,"#Valeurs="+str$(n_lignes%) file_writeln 1,"#Données=1" for i%=1 to n_lignes% s$ = str$(rapport(i%)) j% = instr(s$,".") if j%>0 then s$ = left$(s$,j%-1)+","+mid$(s$,j%+1,len(s$)) file_writeln 1,s$ next i% file_writeln 1,"#Données=2" for i%=1 to n_lignes% s$ = str$(retraites(i%)) j% = instr(s$,".") if j%>0 then s$ = left$(s$,j%-1)+","+mid$(s$,j%+1,len(s$)) file_writeln 1,s$ next i% file_writeln 1,"#Données=3" for i%=1 to n_lignes% s$ = str$(cotisants(i%)) j% = instr(s$,".") if j%>0 then s$ = left$(s$,j%-1)+","+mid$(s$,j%+1,len(s$)) file_writeln 1,s$ next i% file_writeln 1,"#Titres" file_writeln 1,"Haut="+"Actifs/Retraités (en millions)" file_writeln 1,"Bas=Années "+str$(annees%(1))+" à "+str$(annees%(n_lignes%)) file_writeln 1,"#Légendes séries" file_writeln 1,"Rapport" file_writeln 1,"Retraités" file_writeln 1,"Cotisants" file_writeln 1,"#Légendes valeurs" for i%=1 to n_lignes% ' file_writeln 1,right$(str$(annees%(i%)),2) file_writeln 1,str$(annees%(i%)) next i% file_writeln 1,"#Fin" file_close 1
dll_on "histo.dll" ' i% = DLL_call1("Histogramme",adr(file_histo$)) config% = 0 for i%=2 to 5 if checked(20+i%)=1 then config% = i% - 1 next i% i% = DLL_call2("HistogrammeEX",adr(file_histo$),config%) dll_off return
telecharger_fichier: hide 1 : hide 3 execute lien$ show 2 : show 4 return charger_fichier: hide 2 : if EXCEL%=1 then hide 4 canal% = 1 file_open_read canal%,file_stat$ n_lignes% = 0 file_readln canal%,ligne$ file_readln canal%,ligne$ file_readln canal%,ligne$ file_readln canal%,ligne$
file_readln canal%,ligne$ while numeric(left$(ligne$,4))=1 gosub purger_ligne item_add 10,ligne$ n_lignes% = n_lignes% + 1 gosub extraire_valeur annees%(n_lignes%) = val(s$) gosub extraire_valeur cotisants(n_lignes%) = val(s$) gosub extraire_valeur retraites(n_lignes%) = val(s$) gosub extraire_valeur rapport(n_lignes%) = val(s$) file_readln canal%,ligne$ end_while file_close canal% show 10 : show 11 : show 20 return
purger_ligne: i% = instr(ligne$," (") if i%>0 then ligne$ = left$(ligne$,i%-1) + mid$(ligne$,instr(ligne$,")")+1,len(ligne$)) i% = instr(ligne$,"(") if i%>0 then ligne$ = left$(ligne$,i%-1) + mid$(ligne$,instr(ligne$,")")+1,len(ligne$)) i% = instr(ligne$," ") if i%>0 then ligne$ = left$(ligne$,i%-1) + mid$(ligne$,i%+1,len(ligne$)) return
' extraire_valeur: ' i% = instr(ligne$,chr$(9)) ' s$ = left$(ligne$,i%-1) ' j% = instr(s$,",") ' if j%>0 then s$ = left$(s$,j%-1) + "." + mid$(s$,j%+1,len(s$)) ' ligne$ = mid$(ligne$,i%+1,len(ligne$)) ' return
' remplacement par Jecehel extraire_valeur: i% = instr(ligne$,chr$(9)) if i% > 0 s$ = left$(ligne$,i%-1) j% = instr(s$,",") if j%>0 then s$ = left$(s$,j%-1) + "." + mid$(s$,j%+1,len(s$)) ligne$ = mid$(ligne$,i%+1,len(ligne$)) end_if return
| |
| | | Contenu sponsorisé
| Sujet: Re: Histogrammes barres et/ou camembert | |
| |
| | | | Histogrammes barres et/ou camembert | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |