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
» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 13:26

» Compilateur FBPano
par Ouf_ca_passe Aujourd'hui à 12:25

» mise a jour calculatrice
par papydall Aujourd'hui à 2:01

» double guillemets "" dans un EDIT
par Marc Hier à 23:43

» Documentation de KGF
par Klaus Lun 20 Nov 2017 - 22:52

» Zoom sur une portion d'écran
par JL35 Lun 20 Nov 2017 - 21:51

» Recherche d'une expression dans un source
par Marc Lun 20 Nov 2017 - 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 17 Nov 2017 - 11:49

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

 Histogrammes barres et/ou camembert

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

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Mer 11 Juil 2012 - 11:05

Bug corrigé. Voici un extrait de ton fichier texte:
Citation :
50
90
50
#Minimum Y=0
#Maximum Y=1000
#Ecart Y=100
#Légende Y=0
#Titres
Les légendes de l'axe vertical sont bien échelonnées de 0 à 1000, et le graphique est ajusté par rapport à cela, en 2D ou 3D, et wte ce soit LINE ou BAR.

Les commandes #Legende Y= ne sont utiles que si la légende doit être différente de la valeur seule. Exemple:
Citation :

#Légende Y=(Rien) 0
#Légende Y=(Peu) 100
#Légende Y=(Peu) 200
#Légende Y=(Peu) 300
#Légende Y=(Moyen) 400
#Légende Y=(Moyen) 500
etc.

Avec mes excuses pour le bug !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Mer 11 Juil 2012 - 12:19

Complément d'info:
Le fichier Autres_DLL.rtf a été mis à jour pour la doc de l'histogramme, et j'ai ajouté la doc de MouseOperations.dll.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 11 Juil 2012 - 13:41

Merci klaus

Tu n'as pas à t'excuser de quoi que ce soit .
Les dlls que tu nous fournis sont tellement pointu
et nous sont d'une si grande utilité .

quelqu'un à dit :

"...que celui qui n'a jamais péché lui jette la première pierre."

Je récupère tout ce coup ci (dll + fichier rtf ) et je mets à jours mon appli sur le webdev.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re après essai   Mer 11 Juil 2012 - 19:52

J'ai essayé la dernière version de histo.dll

On a toujours la perte des cadres de légende pour les autres types que barres


Je ne me suis pas servi de : #Légende Y

juste :

#Minimum Y=0
#Maximum Y =1000
#Ecart Y=100
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Mer 11 Juil 2012 - 23:44

C'est corrigé pour TOUS les types d'histogramme. Merci pour la visualisation très claire !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 12 Juil 2012 - 1:08

cheers cheers cheers cheers cheers cheers cheers cheers
Bravo !!!
TOUT FONCTIONNE !!!!


GDF Suez v0.2
http://www.mydrive.ch/
login : panoramicien@ygeronimi_panoramic
mot de passe : panoramic123
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 2:55

Juste pour s'amuser un peu:

J'ai écrit aujourd'hui un "mini" histogramme, entièrement en Panoramic.
Cela se présente sous forme d'un fichier BAS qu'un inclut avec #INCLUDE.
Il y a aussi un programme de test.
Copie le tout dans un même répertoire et exécute le programme de text:
Cliquer d'abort sur Ouvrir, puis sur Histo, puis sur Fermer.
Tu peux changer les données, et le type de graphique peut être différent pour chaque série !

Voici le module PanHisto.bas:
Code:
' PanHisto.bas
  if label("PanHisto_labels")=0
    label PanHisto_labels : gosub PanHisto_labels
    gosub PanHisto_constantes
    gosub PanHisto_variables
  end_if
  return
 
PanHisto_labels:
  label PanHisto_constantes
  label PanHisto_variables
  label PanHisto_open, PanHisto_close
  label PanHisto_draw
  label PanHisto_interne_conversion
  return
 
PanHisto_constantes:
  return
 
PanHisto_variables:
  ' variables d'interface
  dim PanHisto_form_size%(1)  : ' 0=width  1=height
  dim PanHisto_form_no%, PanHisto_form_caption$
  dim PanHisto_serie_count%, PanHisto_serie_size%
  dim PanHisto_serie_color%(4,2)  : ' (,0)=R  (,1)=G  (,2)=B
  dim PanHisto_serie_values(4,49)
  dim PanHisto_type%(4) : ' 1=BAR  2=LINE  3=POINT
  dim PanHisto_y_delta, PanHisto_y_delta%, PanHisto_x_delta%
  dim PanHisto_Y_legend$(10)
  ' variables internes
  dim PanHisto_i%, PanHisto_j%
  dim PanHisto_interne_max,PanHisto_interne_min
  dim PanHisto_f_init%, PanHisto_org_x%, PanHisto_org_y%
  dim PanHisto_interne_y, PanHisto_interne_y%, PanHisto_interne_x%
  dim PanHisto_interne_interval(2) : ' (0)=longeur  (1)=start  (2)=end
  dim PanHisto_interne_h%, PanHisto_interne_bar_width%

  return
 
PanHisto_open:
  if PanHisto_f_init%=1
    message "PanHisto est déjà ouvert !"
    return
  end_if
 
    for PanHisto_i%=0 to 2
      if object_exists(PanHisto_form_no%+PanHisto_i%)=1
        message "Impossible d'utiliser les numéros réservés !"
        return
      end_if
    next PanHisto_i%
    if (PanHisto_serie_count%<1) or (PanHisto_serie_count%>5)
      message "Nombre de séries invalide !"
      return
    end_if
    if (PanHisto_serie_size%<1) or (PanHisto_serie_size%>50)
      message "Taille des séries invalide !"
      return
    end_if

   
    form PanHisto_form_no% : hide PanHisto_form_no%
      if PanHisto_form_size%(0)=0
        PanHisto_form_size%(0) = width(PanHisto_form_no%)
      else
        width PanHisto_form_no%, PanHisto_form_size%(0)
      end_if
      if PanHisto_form_size%(1)=0
        PanHisto_form_size%(1) = height(PanHisto_form_no%)
      else
        height PanHisto_form_no%, PanHisto_form_size%(1)
      end_if
      left PanHisto_form_no%,(screen_x-PanHisto_form_size%(0))/2
      top PanHisto_form_no%,(screen_y-PanHisto_form_size%(1))/2
      if PanHisto_form_caption$=""then PanHisto_form_caption$ = "PanHisto"
      caption PanHisto_form_no%,PanHisto_form_caption$
    picture PanHisto_form_no%+1 : parent PanHisto_form_no%+1,PanHisto_form_no%
      full_space PanHisto_form_no%+1
    2d_target_is PanHisto_form_no%+1
    PanHisto_interne_h% = PanHisto_form_size%(1) - 34 - 10
    print_target_is PanHisto_form_no%+1
    PanHisto_Y_legend$(1) = "essai" : ' ******* provisoire
    PanHisto_f_init% = 1
  return

PanHisto_close:
  if PanHisto_f_init%=0
    message "PanHisto n'est pas ouvert !"
    return
  else
    PanHisto_f_init% = 0
    2d_target_is 0
    print_target_is 0
    delete PanHisto_form_no%
  end_if
  return
 
PanHisto_draw:
  if PanHisto_f_init%=0
    message "PanHisto n'est pas ouvert !"
    return
  end_if
  show PanHisto_form_no%
 
  PanHisto_interne_max = -9999999
  PanHisto_interne_min =  9999999
  for PanHisto_i%=0 to PanHisto_serie_count%-1
    for PanHisto_j%=0 to PanHisto_serie_size%-1
      if PanHisto_serie_values(PanHisto_i%,PanHisto_j%)>PanHisto_interne_max
        PanHisto_interne_max = PanHisto_serie_values(PanHisto_i%,PanHisto_j%)
      end_if
      if PanHisto_serie_values(PanHisto_i%,PanHisto_j%)<PanHisto_interne_min
        PanHisto_interne_min = PanHisto_serie_values(PanHisto_i%,PanHisto_j%)
      end_if
    next PanHisto_j%
  next PanHisto_i%
  PanHisto_interne_interval(0) = PanHisto_interne_max
  PanHisto_interne_interval(1) = 0
  PanHisto_interne_interval(2) = PanHisto_interne_max
  if PanHisto_interne_min<0
    PanHisto_interne_interval(0) = PanHisto_interne_interval(0) - PanHisto_interne_min
    PanHisto_interne_interval(1) = PanHisto_interne_min
  end_if
  if PanHisto_Y_delta=0
    PanHisto_Y_delta = int((PanHisto_interne_interval(0))/10+0.5)
  end_if
  PanHisto_interne_y = PanHisto_Y_delta
  gosub PanHisto_interne_conversion
  PanHisto_Y_delta% = PanHisto_interne_y%
  if PanHisto_X_delta%=0
    PanHisto_X_delta% = int((PanHisto_form_size%(0)-8-10)/(PanHisto_serie_size%+1)+0.5)
  end_if
  PanHisto_interne_bar_width% = int(PanHisto_X_delta%/(PanHisto_serie_count%+1)+0.5)

  PanHisto_org_x% = 0
  for PanHisto_i%=0 to 10
    if text_width(PanHisto_Y_legend$(PanHisto_i%),PanHisto_form_no%+1)>PanHisto_org_x%
      PanHisto_org_x% = text_width(PanHisto_Y_legend$(PanHisto_i%),PanHisto_form_no%+1)
    end_if
  next PanHisto_i%
  PanHisto_org_x% = PanHisto_org_x% + 10

  ' dessiner l'axe vertical
  2d_poly_from PanHisto_org_x%,10
  2d_poly_to PanHisto_org_x%,PanHisto_interne_h%
  ' dessiner l'axe horizontal
  PanHisto_interne_y = 0
  gosub PanHisto_interne_conversion
  PanHisto_org_y% = PanHisto_interne_y%
  2d_poly_from PanHisto_org_x%-10,PanHisto_org_y%
  2d_poly_to PanHisto_form_size%(0)-8-10,PanHisto_org_y%
 
  ' dessiner les tags verticaux
  if PanHisto_interne_interval(1)<0
    PanHisto_interne_y = 0
    while PanHisto_interne_y>PanHisto_interne_interval(1)
      PanHisto_interne_y = PanHisto_interne_y - PanHisto_y_delta
      gosub PanHisto_interne_conversion
      2d_poly_from PanHisto_org_x%-5,PanHisto_interne_y%
      2d_poly_to  PanHisto_org_x%  ,PanHisto_interne_y%
      print_locate 10,PanHisto_interne_y%-5
      print str$(PanHisto_interne_y)
    end_while
  end_if
  if PanHisto_interne_interval(2)>0
    PanHisto_interne_y = 0
    while PanHisto_interne_y<PanHisto_interne_interval(2)
      PanHisto_interne_y = PanHisto_interne_y + PanHisto_y_delta
      gosub PanHisto_interne_conversion
      2d_poly_from PanHisto_org_x%-5,PanHisto_interne_y%
      2d_poly_to  PanHisto_org_x%  ,PanHisto_interne_y%
      print_locate 10,PanHisto_interne_y%-5
      print str$(PanHisto_interne_y)
    end_while
  end_if
 
  ' dessiner les données
  for PanHisto_i%=0 to PanHisto_serie_count%-1
    2d_pen_color 0,0,0
    2d_fill_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
    select PanHisto_type%(PanHisto_i%)
      case 1: ' BAR
        2d_fill_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
        PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)+PanHisto_i%*PanHisto_interne_bar_width%
      case 2: ' LINE
        2d_pen_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
        PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)
      case 3: ' POINT
        2d_fill_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
        PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)
    end_select
    for PanHisto_j%=0 to PanHisto_serie_size%-1
      PanHisto_interne_y = PanHisto_serie_values(PanHisto_i%,PanHisto_j%)
      gosub PanHisto_interne_conversion
      select PanHisto_type%(PanHisto_i%)
        case 1: ' BAR
          2d_rectangle PanHisto_interne_x%,PanHisto_interne_y%,PanHisto_interne_x%+PanHisto_interne_bar_width%,PanHisto_org_y%
        case 2: ' LINE
          if PanHisto_j%=0
            2d_poly_from PanHisto_interne_x%,PanHisto_interne_y%
          else
            2d_poly_to PanHisto_interne_x%,PanHisto_interne_y%
            2d_circle PanHisto_interne_x%,PanHisto_interne_y%,3
          end_if
        case 3: ' POINT
          2d_circle PanHisto_interne_x%,PanHisto_interne_y%,3
      end_select
      PanHisto_interne_x% = PanHisto_interne_x% + PanHisto_X_delta%
    next PanHisto_j%
  next PanHisto_i%
 
  ' dessiner les tags horizontaux
  2d_pen_color 0,0,0
  2d_fill_color 255,255,255
  PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)
  for PanHisto_i%=0 to PanHisto_serie_size%-1
    2d_poly_from PanHisto_interne_x%,PanHisto_org_y%
    2d_poly_to  PanHisto_interne_x%,PanHisto_org_y%+5
    print_locate PanHisto_interne_x%,PanHisto_org_y%+7
    print str$(PanHisto_i%+1)
    PanHisto_interne_x% = PanHisto_interne_x% + PanHisto_X_delta%
  next PanHisto_i%

  return

' convertir la valeur PanHisto_interne_y en pixels PanHisto_interne_y%
PanHisto_interne_conversion:
  PanHisto_interne_y% = int((PanHisto_interne_y-PanHisto_interne_interval(1))*(PanHisto_interne_h%-20)/PanHisto_interne_interval(0)+0.5)
  PanHisto_interne_y% = PanHisto_interne_h%-10-PanHisto_interne_y%
  return


ET voici le programme de test: Test_PanHisto.bas:
Code:
' test_PanHisto.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub donnees
gosub menu
gosub GUI
gosub include_PanHisto
gosub initialisations
end

labels:
  label include_PanHisto
  label constantes, variables, donnees, menu, GUI, initialisations
  label open, close, draw
  return
 
constantes:
  return

variables:
  dim no%, i%, j%
  dim no_memo%, no_open%, no_close%, no_draw%, no_combo%
  return

donnees:
  return

menu:
  return

GUI:
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Ouvrir" : on_click no%,open : no_open% = no%
  no% = no% + 1 : button no% : top no%,10 : left no%,100 : inactive no%
    caption no%,"Fermer" : on_click no%,close : no_close% = no%
  no% = no% + 1 : button no% : top no%,10 : left no%,190 : inactive no%
    caption no%,"Histo" : on_click no%,draw : no_draw% = no%
  no% = no% + 1 : memo no% : top no%,60 : left no%,10
    width no%,80 : height no%,200 : no_memo% = no%
    item_add no%,"10"
    item_add no%,"-20"
    item_add no%,"30"
    item_add no%,"20"
    item_add no%,"40"
  no% = no% + 1 : memo no% : top no%,60 : left no%,110
    width no%,80 : height no%,200
    item_add no%,"50"
    item_add no%,"60"
    item_add no%,"80"
    item_add no%,"40"
    item_add no%,"10"
  no% = no% + 1 : memo no% : top no%,60 : left no%,210
    width no%,80 : height no%,200
    item_add no%,"20"
    item_add no%,"50"
    item_add no%,"10"
    item_add no%,"70"
    item_add no%,"-10"
  no% = no% + 1 : combo no% : top no%,270 : left no%,10
    width no%,80 : no_combo% = no%
    item_add no%,"BAR"
    item_add no%,"LINE"
    item_add no%,"POINT"
    text no%,"BAR"
  no% = no% + 1 : combo no% : top no%,270 : left no%,110
    width no%,80
    item_add no%,"BAR"
    item_add no%,"LINE"
    item_add no%,"POINT"
    text no%,"BAR"
  no% = no% + 1 : combo no% : top no%,270 : left no%,210
    width no%,80
    item_add no%,"BAR"
    item_add no%,"LINE"
    item_add no%,"POINT"
    text no%,"BAR"

  return

initialisations:
  PanHisto_form_no% = no% + 1
  return

open:
  PanHisto_form_size%(0)=600
  PanHisto_form_size%(1)=500
  PanHisto_form_caption$ = "Essai d'histogramme"

  PanHisto_serie_count% = 3
  PanHisto_serie_size% = 5

  PanHisto_serie_color%(0,0)= 255
  PanHisto_serie_color%(0,1)= 0
  PanHisto_serie_color%(0,2)= 0
  PanHisto_serie_color%(1,0)= 0
  PanHisto_serie_color%(1,1)= 255
  PanHisto_serie_color%(1,2)= 0
  PanHisto_serie_color%(2,0)= 0
  PanHisto_serie_color%(2,1)= 0
  PanHisto_serie_color%(2,2)= 255


  for i%=0 to 2
    for j%=0 to count(no_combo%+i%)
      if text$(no_combo%+i%)=item_read$(no_combo%+i%,j%+1)
        PanHisto_type%(i%) = j%+1
        exit_for
      end_if
    next j%
  next i%

  for i%=0 to 2
    for j%=0 to count(no_memo%)-1
      PanHisto_serie_values(i%,j%) = val(item_read$(no_memo%+i%,j%+1))
    next j%
  next i%
  gosub PanHisto_open
  if PanHisto_f_init%=1
    inactive no_open%
    active no_close%
    active no_draw%
  end_if
  return

close:
  gosub PanHisto_close
  inactive no_close%
  inactive no_draw%
  active no_open%
  return

draw:
  gosub PanHisto_draw
  inactive no_draw%
  return

include_PanHisto:
  #INCLUDE "PanHisto.bas"


Dernière édition par Klaus le Jeu 12 Juil 2012 - 11:18, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 10:09

Intéressant...
Juste une petite remarque en aparté:
Je vois que tu utilises la même méthode que cosmos70 (cf ici) pour ta librairie PanHisto.bas.
Pour ma part je trouve que la méthode de DJ Peters (voir ici) me parait plus "propre".
En effet, faire des déclarations de procédure dans un bloc conditionnel (if 1=2...) ne me semble pas le meilleur endroit... Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Invité
Invité



MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 10:43

Bonjour,
Citation :
Je vois que tu utilises la même méthode que cosmos70 (cf ici)
Je sais que cela fait bizarre, mais le programme n'est pas fini. Il me permet de manière simple, de ne pas être géné par toute la liste des objets lors de la construction du programme.
J'atteind plus facilement les lignes de déclaration des labels et des dims.
Une fois le programme terminé je remettrais les objets au dessus. J'aurai pu mettre un gosub, mais ça ne me disais rien de déclarer une étiquette juste pour du provisoir, même si c'est la méthode favorite de Klaus. moi à partir du moment que le programme fonctionne. Juste un détail, je bouleverse mon programme, et c'est pour cela que je ne publie pas de correction.
Revenir en haut Aller en bas
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 11:20

Tu as raison, Nardo26. J'ai retiré les deux lignes. C'étaient en réalité des résidus de mes tests...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Nardo26

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 11:25

Du moment que ça marche... Wink

Pour rappel, DJ Peters faisait comme ceci :


exemple de Librairie.bas:

Code:
LABEL Fin_lib
' en dessous il mettait la déclaration des libelles et des variables specifique à la librairie
LABEL ProcX,ProcY,ProcZ,...
DIM VarX,VarY,VarZ,...
GOTO Fin_Lib : ' Le goto en fait, remplace le IF 1=2

' là il mettait ses procédures
ProcX:
 ...
RETURN
ProcY:
 ...
RETURN
ProcZ:
 ...
RETURN
...
' puis il finissait le fichier de librairie par son label de fin de librairie
FinLib:

Et donc au niveau de l'include, il le mettait tout en haut de son prog...
Code:

' debut du prog principal
#include "librairie.bas"
...
C'est la même chose que le coup du test (if 1=2) mais fait à l'aide d'un goto...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 12:03

Si tu regardes bien, il n'y a plus le "if 1!2" ...

Nouvelle version:
On peut maintenant saisir des libellés pour les séries de données. Ils sont saisis dans les EDIT en-dessous de chaque liste de données. Si au moins 1 libellé est présent, un encart supplémentaire sera inséré à droite du graphique, avec un rappel de la couleur de la série et avec son libellé.

PanHisto.bas:
Code:
' test_PanHisto.bas

label labels : gosub labels
gosub constantes
gosub variables
gosub donnees
gosub menu
gosub GUI
gosub include_PanHisto
gosub initialisations
end

labels:
  label include_PanHisto
  label constantes, variables, donnees, menu, GUI, initialisations
  label open, close, draw
  return
 
constantes:
  return

variables:
  dim no%, i%, j%
  dim no_memo%, no_open%, no_close%, no_draw%, no_combo%, no_serleg%
  return

donnees:
  return

menu:
  return

GUI:
  no% = no% + 1 : button no% : top no%,10 : left no%,10
    caption no%,"Ouvrir" : on_click no%,open : no_open% = no%
  no% = no% + 1 : button no% : top no%,10 : left no%,100 : inactive no%
    caption no%,"Fermer" : on_click no%,close : no_close% = no%
  no% = no% + 1 : button no% : top no%,10 : left no%,190 : inactive no%
    caption no%,"Histo" : on_click no%,draw : no_draw% = no%
  no% = no% + 1 : memo no% : top no%,60 : left no%,10
    width no%,80 : height no%,200 : no_memo% = no%
    item_add no%,"10"
    item_add no%,"-20"
    item_add no%,"30"
    item_add no%,"20"
    item_add no%,"40"
  no% = no% + 1 : memo no% : top no%,60 : left no%,110
    width no%,80 : height no%,200
    item_add no%,"50"
    item_add no%,"60"
    item_add no%,"80"
    item_add no%,"40"
    item_add no%,"10"
  no% = no% + 1 : memo no% : top no%,60 : left no%,210
    width no%,80 : height no%,200
    item_add no%,"20"
    item_add no%,"50"
    item_add no%,"10"
    item_add no%,"70"
    item_add no%,"-10"
  no% = no% + 1 : combo no% : top no%,270 : left no%,10
    width no%,80 : no_combo% = no%
    item_add no%,"BAR"
    item_add no%,"LINE"
    item_add no%,"POINT"
    text no%,"BAR"
  no% = no% + 1 : combo no% : top no%,270 : left no%,110
    width no%,80
    item_add no%,"BAR"
    item_add no%,"LINE"
    item_add no%,"POINT"
    text no%,"BAR"
  no% = no% + 1 : combo no% : top no%,270 : left no%,210
    width no%,80
    item_add no%,"BAR"
    item_add no%,"LINE"
    item_add no%,"POINT"
    text no%,"BAR"
  no% = no% + 1 : edit no% : top no%,300 : left no%,10
    width no%,80 : no_serleg% = no%
  no% = no% + 1 : edit no% : top no%,300 : left no%,110
    width no%,80
  no% = no% + 1 : edit no% : top no%,300 : left no%,210
    width no%,80

  return

initialisations:
  PanHisto_form_no% = no% + 1
  return

open:
  PanHisto_form_size%(0)=600
  PanHisto_form_size%(1)=500
  PanHisto_form_caption$ = "Essai d'histogramme"

  PanHisto_serie_count% = 3
  PanHisto_serie_size% = 5

  PanHisto_serie_color%(0,0)= 255
  PanHisto_serie_color%(0,1)= 0
  PanHisto_serie_color%(0,2)= 0
  PanHisto_serie_color%(1,0)= 0
  PanHisto_serie_color%(1,1)= 255
  PanHisto_serie_color%(1,2)= 0
  PanHisto_serie_color%(2,0)= 0
  PanHisto_serie_color%(2,1)= 0
  PanHisto_serie_color%(2,2)= 255
 
  PanHisto_serie_legend_width% = 0
  for i%=0 to 2
    PanHisto_serie_legend$(i%) = text$(no_serleg%+i%)
  next i%

  for i%=0 to 2
    for j%=0 to count(no_combo%+i%)
      if text$(no_combo%+i%)=item_read$(no_combo%+i%,j%+1)
        PanHisto_type%(i%) = j%+1
        exit_for
      end_if
    next j%
  next i%

  for i%=0 to 2
    for j%=0 to count(no_memo%)-1
      PanHisto_serie_values(i%,j%) = val(item_read$(no_memo%+i%,j%+1))
    next j%
  next i%
  gosub PanHisto_open
  if PanHisto_f_init%=1
    inactive no_open%
    active no_close%
    active no_draw%
  end_if
  return

close:
  gosub PanHisto_close
  inactive no_close%
  inactive no_draw%
  active no_open%
  return

draw:
  gosub PanHisto_draw
  inactive no_draw%
  return

include_PanHisto:
  #INCLUDE "PanHisto.bas"

Test_PanHisto.bas:
Code:
' PanHisto.bas
  if label("PanHisto_labels")=0
    label PanHisto_labels : gosub PanHisto_labels
    gosub PanHisto_constantes
    gosub PanHisto_variables
  end_if
  return
 
PanHisto_labels:
  label PanHisto_constantes
  label PanHisto_variables
  label PanHisto_open, PanHisto_close
  label PanHisto_draw
  label PanHisto_interne_conversion
  return
 
PanHisto_constantes:
  return
 
PanHisto_variables:
  ' variables d'interface
  dim PanHisto_form_size%(1)  : ' 0=width  1=height
  dim PanHisto_form_no%, PanHisto_form_caption$
  dim PanHisto_serie_count%, PanHisto_serie_size%
  dim PanHisto_serie_color%(4,2)  : ' (,0)=R  (,1)=G  (,2)=B
  dim PanHisto_serie_values(4,49)
  dim PanHisto_serie_legend_width%, PanHisto_serie_legend$(4)
  dim PanHisto_type%(4) : ' 1=BAR  2=LINE  3=POINT
  dim PanHisto_y_delta, PanHisto_y_delta%, PanHisto_x_delta%
  dim PanHisto_Y_legend$(10)
  ' variables internes
  dim PanHisto_i%, PanHisto_j%
  dim PanHisto_interne_max,PanHisto_interne_min
  dim PanHisto_f_init%, PanHisto_org_x%, PanHisto_org_y%
  dim PanHisto_interne_y, PanHisto_interne_y%, PanHisto_interne_x%
  dim PanHisto_interne_interval(2) : ' (0)=longeur  (1)=start  (2)=end
  dim PanHisto_interne_h%, PanHisto_interne_bar_width%

  return
 
PanHisto_open:
  if PanHisto_f_init%=1
    message "PanHisto est déjà ouvert !"
    return
  end_if
 
    for PanHisto_i%=0 to 2
      if object_exists(PanHisto_form_no%+PanHisto_i%)=1
        message "Impossible d'utiliser les numéros réservés !"
        return
      end_if
    next PanHisto_i%
    if (PanHisto_serie_count%<1) or (PanHisto_serie_count%>5)
      message "Nombre de séries invalide !"
      return
    end_if
    if (PanHisto_serie_size%<1) or (PanHisto_serie_size%>50)
      message "Taille des séries invalide !"
      return
    end_if

   
    form PanHisto_form_no% : hide PanHisto_form_no%
      if PanHisto_form_size%(0)=0
        PanHisto_form_size%(0) = width(PanHisto_form_no%)
      else
        width PanHisto_form_no%, PanHisto_form_size%(0)
      end_if
      if PanHisto_form_size%(1)=0
        PanHisto_form_size%(1) = height(PanHisto_form_no%)
      else
        height PanHisto_form_no%, PanHisto_form_size%(1)
      end_if
      left PanHisto_form_no%,(screen_x-PanHisto_form_size%(0))/2
      top PanHisto_form_no%,(screen_y-PanHisto_form_size%(1))/2
      if PanHisto_form_caption$=""then PanHisto_form_caption$ = "PanHisto"
      caption PanHisto_form_no%,PanHisto_form_caption$
    picture PanHisto_form_no%+1 : parent PanHisto_form_no%+1,PanHisto_form_no%
      full_space PanHisto_form_no%+1
     
    if PanHisto_serie_legend_width%=0
      for PanHisto_i%=0 to 4
        if text_width(PanHisto_serie_legend$(PanHisto_i%),PanHisto_form_no%+1)>PanHisto_serie_legend_width%
          PanHisto_serie_legend_width% = text_width(PanHisto_serie_legend$(PanHisto_i%),PanHisto_form_no%+1)
        end_if
      next PanHisto_i%
      if PanHisto_serie_legend_width%>0 then PanHisto_serie_legend_width% = PanHisto_serie_legend_width% + 20
    end_if
     
    if PanHisto_serie_legend_width%>0
      width PanHisto_form_no%+1, width(PanHisto_form_no%+1) - PanHisto_serie_legend_width% - 5
      picture PanHisto_form_no%+2 : parent PanHisto_form_no%+2,PanHisto_form_no%
      height PanHisto_form_no%+2, height(PanHisto_form_no%+1)
      width PanHisto_form_no%+2, width(PanHisto_form_no%)-width(PanHisto_form_no%+1)-8-5
      left PanHisto_form_no%+2, width(PanHisto_form_no%+1)+5
    end_if
    2d_target_is PanHisto_form_no%+1
    PanHisto_interne_h% = PanHisto_form_size%(1) - 34 - 10
    print_target_is PanHisto_form_no%+1
    PanHisto_f_init% = 1
  return

PanHisto_close:
  if PanHisto_f_init%=0
    message "PanHisto n'est pas ouvert !"
    return
  else
    PanHisto_f_init% = 0
    2d_target_is 0
    print_target_is 0
    delete PanHisto_form_no%
  end_if
  return
 
PanHisto_draw:
  if PanHisto_f_init%=0
    message "PanHisto n'est pas ouvert !"
    return
  end_if
  show PanHisto_form_no%
 
  PanHisto_interne_max = -9999999
  PanHisto_interne_min =  9999999
  for PanHisto_i%=0 to PanHisto_serie_count%-1
    for PanHisto_j%=0 to PanHisto_serie_size%-1
      if PanHisto_serie_values(PanHisto_i%,PanHisto_j%)>PanHisto_interne_max
        PanHisto_interne_max = PanHisto_serie_values(PanHisto_i%,PanHisto_j%)
      end_if
      if PanHisto_serie_values(PanHisto_i%,PanHisto_j%)<PanHisto_interne_min
        PanHisto_interne_min = PanHisto_serie_values(PanHisto_i%,PanHisto_j%)
      end_if
    next PanHisto_j%
  next PanHisto_i%
  PanHisto_interne_interval(0) = PanHisto_interne_max
  PanHisto_interne_interval(1) = 0
  PanHisto_interne_interval(2) = PanHisto_interne_max
  if PanHisto_interne_min<0
    PanHisto_interne_interval(0) = PanHisto_interne_interval(0) - PanHisto_interne_min
    PanHisto_interne_interval(1) = PanHisto_interne_min
  end_if
  if PanHisto_Y_delta=0
    PanHisto_Y_delta = int((PanHisto_interne_interval(0))/10+0.5)
  end_if
  PanHisto_interne_y = PanHisto_Y_delta
  gosub PanHisto_interne_conversion
  PanHisto_Y_delta% = PanHisto_interne_y%
 
  if PanHisto_X_delta%=0
    PanHisto_X_delta% = int(width(PanHisto_form_no%+1)/(PanHisto_serie_size%+1)+0.5)
  end_if
  PanHisto_interne_bar_width% = int(PanHisto_X_delta%/(PanHisto_serie_count%+1)+0.5)

  PanHisto_org_x% = 30

  ' dessiner l'axe vertical
  2d_poly_from PanHisto_org_x%,10
  2d_poly_to PanHisto_org_x%,PanHisto_interne_h%
  ' dessiner l'axe horizontal
  PanHisto_interne_y = 0
  gosub PanHisto_interne_conversion
  PanHisto_org_y% = PanHisto_interne_y%
  2d_poly_from PanHisto_org_x%-10,PanHisto_org_y%
  2d_poly_to width(PanHisto_form_no%+1)-10,PanHisto_org_y%

  ' dessiner les tags verticaux
  if PanHisto_interne_interval(1)<0
    PanHisto_interne_y = 0
    while PanHisto_interne_y>PanHisto_interne_interval(1)
      PanHisto_interne_y = PanHisto_interne_y - PanHisto_y_delta
      gosub PanHisto_interne_conversion
      2d_poly_from PanHisto_org_x%-5,PanHisto_interne_y%
      2d_poly_to  PanHisto_org_x%  ,PanHisto_interne_y%
      print_locate 10,PanHisto_interne_y%-5
      print str$(PanHisto_interne_y)
    end_while
  end_if
  if PanHisto_interne_interval(2)>0
    PanHisto_interne_y = 0
    while PanHisto_interne_y<PanHisto_interne_interval(2)
      PanHisto_interne_y = PanHisto_interne_y + PanHisto_y_delta
      gosub PanHisto_interne_conversion
      2d_poly_from PanHisto_org_x%-5,PanHisto_interne_y%
      2d_poly_to  PanHisto_org_x%  ,PanHisto_interne_y%
      print_locate 10,PanHisto_interne_y%-5
      print str$(PanHisto_interne_y)
    end_while
  end_if
 
  ' dessiner les données
  for PanHisto_i%=0 to PanHisto_serie_count%-1
    2d_pen_color 0,0,0
    2d_fill_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
    select PanHisto_type%(PanHisto_i%)
      case 1: ' BAR
        2d_fill_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
        PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)+PanHisto_i%*PanHisto_interne_bar_width%
      case 2: ' LINE
        2d_pen_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
        PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)
      case 3: ' POINT
        2d_fill_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
        PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)
    end_select
    for PanHisto_j%=0 to PanHisto_serie_size%-1
      PanHisto_interne_y = PanHisto_serie_values(PanHisto_i%,PanHisto_j%)
      gosub PanHisto_interne_conversion
      select PanHisto_type%(PanHisto_i%)
        case 1: ' BAR
          2d_rectangle PanHisto_interne_x%,PanHisto_interne_y%,PanHisto_interne_x%+PanHisto_interne_bar_width%,PanHisto_org_y%
        case 2: ' LINE
          if PanHisto_j%=0
            2d_poly_from PanHisto_interne_x%,PanHisto_interne_y%
          else
            2d_poly_to PanHisto_interne_x%,PanHisto_interne_y%
            2d_circle PanHisto_interne_x%,PanHisto_interne_y%,3
          end_if
        case 3: ' POINT
          2d_circle PanHisto_interne_x%,PanHisto_interne_y%,3
      end_select
      PanHisto_interne_x% = PanHisto_interne_x% + PanHisto_X_delta%
    next PanHisto_j%
  next PanHisto_i%
 
  ' dessiner les tags horizontaux
  2d_pen_color 0,0,0
  2d_fill_color 255,255,255
  PanHisto_interne_x% = PanHisto_org_x% + int(PanHisto_X_delta%/2+0.5)
  for PanHisto_i%=0 to PanHisto_serie_size%-1
    2d_poly_from PanHisto_interne_x%,PanHisto_org_y%
    2d_poly_to  PanHisto_interne_x%,PanHisto_org_y%+5
    print_locate PanHisto_interne_x%,PanHisto_org_y%+7
    print str$(PanHisto_i%+1)
    PanHisto_interne_x% = PanHisto_interne_x% + PanHisto_X_delta%
  next PanHisto_i%
 
  ' dessiner les légendes des séries
  if PanHisto_serie_legend_width%>0
    2d_target_is PanHisto_form_no%+2
    print_target_is PanHisto_form_no%+2
    for PanHisto_i%=0 to PanHisto_serie_count%-1
      2d_fill_color PanHisto_serie_color%(PanHisto_i%,0),PanHisto_serie_color%(PanHisto_i%,1),PanHisto_serie_color%(PanHisto_i%,2)
      2d_rectangle 5,5+PanHisto_i%*50,PanHisto_serie_legend_width%-5,15+PanHisto_i%*50
      2d_fill_color 255,255,255
      print_locate 5,20+PanHisto_i%*50
      print PanHisto_serie_legend$(PanHisto_i%)
    next PanHisto_i%
  end_if

  return

' convertir la valeur PanHisto_interne_y en pixels PanHisto_interne_y%
PanHisto_interne_conversion:
  PanHisto_interne_y% = int((PanHisto_interne_y-PanHisto_interne_interval(1))*(PanHisto_interne_h%-20)/PanHisto_interne_interval(0)+0.5)
  PanHisto_interne_y% = PanHisto_interne_h%-10-PanHisto_interne_y%
  return

C'est sympa de pouvoir faire cela en Panoramic pur, sans DLL, non ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: RE   Jeu 12 Juil 2012 - 13:33

Ouahou !.....

Je n'ai pas eu le temps de tester la version 1 que tu en es à la version 2 voir 3

Là j'ai un message : Out of memory
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 12 Juil 2012 - 13:49

Embarassed

J'ai voulu pousser la version 1 en ajoutant des données par l'interface :



Edit :

Quel idiot que je suis, enfin bref...
J'ai mis à 20 les données dans le code et là les colonnes se rétrécissent mais on ne voit plus toutes les barres .
Ils faudrait rendre la taille du graph dynamique avec une bar...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 21:14

@ Klaus

keine Möglichkeit diese Programme zu starten.
Severin

Bei PanHisto gefriert der Bildschirm affraid
und wenn sich der Bildschirm erholt hat "out of memory" affraid
bei test_PanHisto fehler gosub Linie 7 affraid

Fehler gefunden':
PanHisto ruft sich selbst auf!!!

Schönes programm, geht das auch als ein komplett programm?


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

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 22:41

@Severin:
Verstehe Dein Problem nicht.
- In Test_PanHisto.bas, Zeile 7 ist: "gosub menu", und das entsprechende Unterprogramm enthält nut ein Return...
- Der Bildschirm gefriert ? Bei mir nicht.

Gebrauchsanweisung:
- Copiere Test_PanHisto.bas und PanHisto.bas in den selben Ordner.
- Starte Test_PanHisto.bas.
- Klick auf button "Ouvrir" (Öffnen)
- Klick auf button "Histo" ==> das Histogramm wird angezeigt
- Klick auf button "Fermer" (Schliesses) ==> das Histogramm verschwindet, und der button "Ouvrir" ist wieder aktif

Man kann jetzt die Parameter ändern, andere Werte eingeben, den Histogramm-Typ für jéde Datenfolge getrennt einstellen, und auch Labels für jede Datenfolge eingeben. Anschliessend wieder auf "Ouvrir" klicken, danach auf "Histo" ==> das Histogramm erscheint und passt sich den neuen Werten an.

Augenblickliche Grenzen (in PanHisto fest kodiert, aber leicht abänderbar):
bis zu 5 Datenfolgen (von 0 bis 4)
Die Datenfolgen haben bis zu 50 Werte (von 0 bis 49)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 22:55

@Ygeronimi:
je te donne aussi les limites actuelles du programme, qui sont codées en dur dans PanHisto.bas (mais modifiables facilement):
jusqu'à 5 séries de données (de 0 à 4)
les séries peuvent avoir jusqu'à 50 valeurs (de 0 à 49)

Effectivement, si le nombre de valeurs grandir, le graphe se rétrécit Le programme adapte automatiquement la largeur de chaque barre à la largeur de la fenêtre:
Code:
  PanHisto_form_size%(0)=600
  PanHisto_form_size%(1)=500
avec indice 0 pour la largeur. En mode ligne ou en mode point, cela devrait être beaucoup plus intéressant, si le nombre de valeurs grandit.

Ceci dit, pour le moment, c'est une maquette. Les graphismes fonctionnent, le dimensionnement automatique également, l'ajustement pour les libellés des séries aussi. Je te donne la To-DO-List que j'ai actuellement:
- ajouter des libelles de l'axe horizontal
- rendre le nombre de séries et le nombre de données par série paramétrable et donner des possibilités de tailles importantes
- faire un paramétrage séparé de la taille du graphe , indépendant de la taille de la fenêtre d'affichage
- faire des barres automatiques de défilement verticaux et horizontaux, si le graphe ne tient pas dans la fenêtre déterminée

Ce sont les deux derniers points qui te permettront d'utiliser ce module avec des séries longues. Pour le moment, le programme est une sorte de maquette, une étude de faisabilité technique, et d'une certaine manière un sondage pour voir s'il y a un intérêt pour ce genre d'outils.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 22:55

Ich hatte schon berichtet "PanHisto" ruft sich selbst auf.
Habe es bereinigt und es läuft.
Severin
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 22:59

@Tous:
Pour éviter des problèmes de version, comme ceux rencontrés par Ygeronimi, j'ai placé les 2 modules dans mon WebDav, dont je rappelle les coordonnées ici:
Site: http://www.mydrive.ch/
Identifiant: panoramic@klausgunther
Mot de passe: panoramic123
Dossier: PanHisto

Ce dossier sera systématiquement tenu à jour.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 12 Juil 2012 - 23:31

@ Klaus,

J'ai commencé à penser ( inutile de rire Laughing ) pour GDF Suez v0.1 où j'avais entamé le dessin d'un histogramme de type "lignes".
Je me suis confronté à un problème de taille du dessin qui devenait plus grand que la fenêtre en fonction du nombre de données
et comme il n'y a pas d'option bar sur un scene2d....je te laisse imaginer la suite.
Alors, il m'est venu l'idée , que je n'ai pas essayé avec la prise en main de histo.dll ,
de créer un fichier bmp de taille variable en fonction du nombre de données
puis de le placé dans un sprite qui lui serait déplacé de droite à gauche par une barre de la largeur du scene2d.

MAIS HEUREUSEMENT .....
....KLAUS EST ARRIVE E E cheers cheers

et tu m'as sauvé de quelques dizaines, voir plus, de lignes de code avec histo.dll geek Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Jeu 12 Juil 2012 - 23:52

@Ygeronimi:
Je vois bien le genre de dilemme auquel tu t'es heurté. Bon, Histo.dll règle cet aspect, et tant mieux. Car l'idée su sprite, c'était bien tenté, mais irréalisable: un sprite fait au maximum 200x200 pixels...

Pour PanHisto, je suis en train d'implémenter exactement cela: une scroll_bar horizontale pour pouvoir défiler le picture. Je vais placer l'axe vertical dans une zone fixe à gauche, avec ses taquets et libellés, et laisser défiler le graphe lui-même horizontalement en_dessous de cette zone, de sorte à avoir toujours les références verticales à l'écran. je définis ma propre zone de scrolling dans le picture d'affichage.

Nouvelle version: j'ai défini deux pseudo-constantes:
Code:
' nombre maxi de séries possibles (base 0)
  dim PanHisto_const_serie_max% : PanHisto_const_serie_max% = 4 : ' 0...4
' nombre maxi de données dans une série (base 0)
  dim PanHisto_const_serie_max_values% : PanHisto_const_serie_max_values% = 49 : ' 0...49
qui permettent d'ajuster le nombre maxi de séries et de données par série. Et j'ai ajouté une documentation complète dans le module PanHisto.bas, avec l'explication de chaque variable d'interface, de chacune des 3 routines appelables de l'extérieur, et un guide détaillé d'intégration du module. Ca devrait aider...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 13 Juil 2012 - 0:12

@ Klaus ,

Une autre chose est peut être possible , reste à voir le rendu visuel , si c'est pas trop désagréable à l'oeil
mais là , exit le problème du nombre de données .

on bloque l'affichage sur 12 données par exemple ( 1/mois pour ce qui concerne un relevé de compteur gaz ou edf )
on stock les données dans un dlist

affichage du graph avec les 12 premières données
avec la scroll bar si +1
on ré initialise le graph en partant de la ligne à la ligne 13 et on affiche
avec la scroll bar à -1
on fait l'inverse

( heu...je crois que l'on pense à la même chose finalement)

mais j'ai peur du scintillement du à la réinitialisation du graph
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Ven 13 Juil 2012 - 0:51

Presque, mais pas tout à fait. Ce que je suis en train de faire, c'est la chose suivante:
- je crée un picture pour le graphe, suffisamment large pour tout contenir avec une présentation visuelle lisible
- par la scroll_bar, je modifie la propriété LEFT de ce picture, qui de ce fait défile sans aucun scintillement.

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

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Ven 13 Juil 2012 - 7:42

J'avais rencontré le même problème avec la représentation graphique des arbres AVL et j'en étais arrivé à la même conclusion...
un bon picture !! y'a qu'ça de vrai !!

Enfin presque, j'avais fais une sorte de bascule avec un buffer pour construire mon image, puis je l'affichais une fois terminé.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
Klaus

avatar

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

MessageSujet: Re: Histogrammes barres et/ou camembert   Ven 13 Juil 2012 - 20:39

J'ai mis une nouvelle version en ligne.

Cette version permet d'avoir un nombre de données par série beaucoup plus important, sans être limité par la taille de l'affichage. Il y a maintenant la notion de "largeur minimale" d'une barre, qui est gérée par la variable interface PanHisto_min_bar_width%. Si sa valeur est zéro, le programme utilise 5 pixels par défaut. Aucune barre ne peut être plus étroite que cette valeur. Si tel serait le cas en essayant de comprimer le graphique dans l'espace disponible du picture, celui-ci sera automatiquement étendu horizontalement, pour accueillir le graphe complet. Il y a alors une barre de défilement en-dessous du graphe qui permet de le décaler horizontalement. Le graphe glissera sous la fenêtre contenant l'axe vertical et sous celle avec les légendes des séries.

EDIT

Petite correction du placement des taquets de l'axe horizontal, et ajustement de la dimension verticale de la fenêtre de visualisation.
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 6 sur 7Aller à la page : Précédent  1, 2, 3, 4, 5, 6, 7  Suivant
 Sujets similaires
-
» Histogrammes barres et/ou camembert
» Camembert pané
» Version 12 : Purple girl
» Votre forum a été infecté par un amv-maker. nom de code-barres: erreur
» Audi Q3 : les tarifs Français

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: