FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Compilateur FBPano
par jean_debord Aujourd'hui à 10:54

» demande pour recuperer un text speciale
par pascal10000 Hier à 22:04

» Casse-tête : Echanger les positions des cavaliers
par papydall Hier à 19:51

» KGF_dll - nouvelles versions
par Klaus Hier à 14:29

» Amélioration de la commande HINT
par papydall Mer 19 Juil 2017 - 3:30

» TEST SUR SHAPE
par papydall Mer 19 Juil 2017 - 1:17

» Un challenge à relever
par papydall Mar 18 Juil 2017 - 21:25

» Astuce : Indenter plusieurs lignes de code à la fois
par papydall Mar 18 Juil 2017 - 1:32

» Suggestion pour le forum
par papydall Lun 17 Juil 2017 - 20:28

» Truver les handles des onglets de Panoramic Editor
par Klaus Lun 17 Juil 2017 - 18:20

» Synedit_Editor - nouvelles versions
par Klaus Lun 17 Juil 2017 - 13:46

» Détermine si oui ou non un objet est PARENT d'un autre objet
par Klaus Dim 16 Juil 2017 - 11:58

» Une autre façon de terminer une application.
par papydall Dim 16 Juil 2017 - 3:53

» Déterminer le Handle de l’objet ayant le focus
par papydall Dim 16 Juil 2017 - 3:15

» Déterminer le HANDLE du Bureau
par papydall Dim 16 Juil 2017 - 1:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2017
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
CalendrierCalendrier

Partagez | 
 

 Histogrammes barres et/ou camembert

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2, 3, 4, 5, 6, 7  Suivant
AuteurMessage
Klaus

avatar

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

MessageSujet: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 14: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]
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 18:49

C'est génial et spectaculaire ! cheers
Mais on ne fournit plus à tester tes nouveautés, ça m'occupe à temps plein !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 18: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.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 19: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 19: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.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
JL35



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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 19:40

Merci pour tes explications limpides, comme toujours. Évidemment j'étais parti sur le camembert, alors je ne comprenais pas les deux séries !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 20: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...



Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
JL35



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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 20:43

Ou alors point par point...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 20: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 Smile

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 ... ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 21:00

Oui, on peut faire ça à "l'ancienne" avec des cos et de sin... Wink
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... Laughing )
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... Wink

C'est même pire maintenant quand je me pointe avec mes "after-height" (flashdisk) lol
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 8 Jan 2012 - 21: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 Smile (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 ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Sam 14 Jan 2012 - 17: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 - 20:46, édité 2 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Sam 14 Jan 2012 - 19: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
exdragon

avatar

Nombre de messages : 601
Date d'inscription : 05/01/2012

MessageSujet: Re: Histogrammes barres et/ou camembert   Sam 14 Jan 2012 - 20:19

Vraiment bravo Klaus, c'est magnifique ce que tu fais !!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Sam 14 Jan 2012 - 20: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Sam 14 Jan 2012 - 23: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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 0: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 1: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 2: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 Smile
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 Smile )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 3: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 11: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 Smile )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 12:30

Je note, et je vais voir ce que je peux faire. La plupart des suggestion me semble facile à réaliser. Wait and see...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
jean_debord

avatar

Nombre de messages : 734
Age : 62
Localisation : Limoges
Date d'inscription : 21/09/2008

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 16:52

Pour les courbes de tendance, vous pouvez utiliser ma bibliothèque DMath pour Delphi :

http://www.unilim.fr/pages_perso/jean.debord/tpmath/dmat086.zip
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.unilim.fr/pages_perso/jean.debord/index.htm
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 18:02

Merci Jean Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Dim 15 Jan 2012 - 20: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Histogrammes barres et/ou camembert   

Revenir en haut Aller en bas
 
Histogrammes barres et/ou camembert
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 7Aller à la page : 1, 2, 3, 4, 5, 6, 7  Suivant
 Sujets similaires
-
» Histogrammes barres et/ou camembert
» Camembert pané
» Impossible de changer l'image des barres (déco) catégories et sous catégories
» Les barres dans Champs du profil
» Les chiffres ne s'affichent pas avec mes barres (fiches personnages)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: