FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Objet GRID. Emptypar Klaus Ven 17 Mai 2024 - 12:02

» item_index(résolu)
Objet GRID. Emptypar jjn4 Mar 14 Mai 2024 - 17:38

» Bataille terrestre
Objet GRID. Emptypar jjn4 Lun 13 Mai 2024 - 13:01

» SineCube
Objet GRID. Emptypar Marc Sam 11 Mai 2024 - 10:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Objet GRID. Emptypar Marc Sam 11 Mai 2024 - 10:22

» Philharmusique
Objet GRID. Emptypar jjn4 Ven 10 Mai 2024 - 11:58

» PANORAMIC V 1
Objet GRID. Emptypar papydall Jeu 9 Mai 2024 - 1:22

» select intégrés [résolu]
Objet GRID. Emptypar jjn4 Mer 8 Mai 2024 - 15:00

» number_mouse_up
Objet GRID. Emptypar jjn4 Mer 8 Mai 2024 - 9:59

» Aide de PANORAMIC
Objet GRID. Emptypar jjn4 Mer 8 Mai 2024 - 9:16

» trop de fichiers en cours
Objet GRID. Emptypar lepetitmarocain Mer 8 Mai 2024 - 8:43

» Je teste PANORAMIC V 1 beta 1
Objet GRID. Emptypar papydall Mer 8 Mai 2024 - 2:17

» bouton dans autre form que 0(résolu)
Objet GRID. Emptypar leclode Lun 6 Mai 2024 - 11:59

» KGF_dll - nouvelles versions
Objet GRID. Emptypar Klaus Lun 6 Mai 2024 - 9:41

» @Jack
Objet GRID. Emptypar Jack Mar 30 Avr 2024 - 18:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Cartes Pokémon : la prochaine extension Pokémon sera EV6.5 Fable ...
Voir le deal

 

 Objet GRID.

Aller en bas 
+4
mindstorm
Jean Claude
Klaus
pan59
8 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Objet GRID. Empty
MessageSujet: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 16:56

Bonjour à tous.

L'un d'entre vous utilise-t-il ce genre d'objet ?

Je viens de l'expérimenter.

A ma grande surprise, il n'est pas possible de saisir directement dans les cellules !

Avez-vous une solution à proposer ?

Merci de votre aide.
Revenir en haut Aller en bas
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 17:13

Oui, on ne peut pas saisir directement dans les cellules. La propriété "éditeur" du TStringGrid n'est pas activée, d'où cette restriction.

J'utilise beaucoup les GRID, qui pour moi sont des objets commodes de présentation formattée. Je les utilise exactement comme les LIST, sauf qu'il y a plusieurs colonnes.

Alors, pour saisir dedans, il faut avoir 3 zones de saisie séparées et un bouton: pour choisir la ligne ciblée, pour choisir la colonne ciblée, pour saisir la valeur, et finalement pour valider la saisie.

Dans mes programmes, je charge ces 3 zones par un clic gauche dans une des cellules du GRID. Das la routine ON_CLICK du GRID, je détermine la ligne par GRID_Y_TO_ROW, la colonne par GRID_X_TO_COLUMN, et je copie ces valeurs dans les deux zones de saisie correspondantes, ainsi que le contenu de la cellule dans sa zone de saisie. La routine ON_CLICK du bouton effectue l'opération inverse, en utilisant le contenu des deux zones de saisie pour ligne et colonne comme adressage du tableau.

Bonne chance !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 18:45

Et voici un petit code de démo de la méthode:
Code:

label click_grid, valider
dim i%, lig%, col%

grid 1
  height 1,280 : width 1,350
  grid_row 1,41 : grid_column 1,5
  on_click 1,click_grid
for i%=1 to 40
  grid_write 1,i%+1,1,str$(i%)
next i%
for i%=1 to 4
  grid_write 1,1,i%+1,str$(i%)
next i%

alpha 11 : top 11,10 : left 11,400 : caption 11,"Ligne:"
edit 12 :  top 12,10 : left 12,450 : width 12,40
alpha 13 : top 13,40 : left 13,400 : caption 13,"Colonne:"
edit 14 :  top 14,40 : left 14,450 : width 14,40
alpha 15 : top 15,80 : left 15,400 : caption 15,"Contenu:"
edit 16 :  top 16,80 : left 16,450 : width 16,80

button 20 : top 20,110 : left 20,450 : caption 20,"Valider"
  on_click 20,valider

end

click_grid:
  lig% = grid_y_to_row(1,mouse_y_left_down(1)) - 1
  col% = grid_x_to_column(1,mouse_x_left_down(1)) - 1
  text 12,str$(lig%)
  text 14,str$(col%)
  text 16,grid_read$(1,lig%+1,col%+1)
  return
 
valider:
  lig% = val(text$(12))
  col% = val(text$(14))
  grid_write 1,lig%+1,col%+1,text$(16)
  return


Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Objet GRID. Empty
MessageSujet: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 19:08

Bonsoir.

Un grand merci Klaus pour le petit bout de code.

Je vais de ce pas l'incorporer dans mon programme général de plus de 25.000 lignes.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 19:50

Cet objet GRID est d'une très grande utilité et je déplore qu'il ne soit pas plus avancé.
Mais il a le mérite d’exister et avec un peu d'imagination on peut en tirer quelque chose.
Ton code, Klaus, montre des possibilités, mais je trouve dommage que La propriété "éditeur" du TStringGrid n'est pas activée (pour reprendre tes propos).
Je souhaite que cet objet évolue, mais bon, Jack ne peut pas être sur tous les fronts et je le comprends.

Merci à Klaus pour ce petit code qui montre que GRID est exploitable.

A+
Revenir en haut Aller en bas
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 19:57

Eh bien, continuons de broder autour du GRID. Voici une variante du code ci-dessus. Le bouton Valider a fait place au bouton Saisir, et la zone de saisie des données est inactive. Un clic sur le bouton Saisir active ce champ et positionne le curseur dedans. Le bouton devient "Valider". Lors du clic sur le bouton, les données sont placées dans le tableau, puis retour à la situation initiale:
Code:

label click_grid, valider
dim i%, lig%, col%

grid 1
  height 1,280 : width 1,350
  grid_row 1,41 : grid_column 1,5
  on_click 1,click_grid
for i%=1 to 40
  grid_write 1,i%+1,1,str$(i%)
next i%
for i%=1 to 4
  grid_write 1,1,i%+1,str$(i%)
next i%

alpha 11 : top 11,10 : left 11,400 : caption 11,"Ligne:"
edit 12 :  top 12,10 : left 12,450 : width 12,40
alpha 13 : top 13,40 : left 13,400 : caption 13,"Colonne:"
edit 14 :  top 14,40 : left 14,450 : width 14,40
alpha 15 : top 15,80 : left 15,400 : caption 15,"Contenu:"
edit 16 :  top 16,80 : left 16,450 : width 16,80  : inactive 16

button 20 : top 20,110 : left 20,450 : caption 20,"Saisir"
  on_click 20,valider

end

click_grid:
  lig% = grid_y_to_row(1,mouse_y_left_down(1)) - 1
  col% = grid_x_to_column(1,mouse_x_left_down(1)) - 1
  text 12,str$(lig%)
  text 14,str$(col%)
  text 16,grid_read$(1,lig%+1,col%+1)
  return
 
valider:
  if active(16)=1
    lig% = val(text$(12))
    col% = val(text$(14))
    grid_write 1,lig%+1,col%+1,text$(16)
    inactive 16
    caption 20,"Saisir"
  else
    active 16
    caption 20,"Valider"
    set_focus 16
  end_if
  return


Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


Nombre de messages : 5950
Age : 69
Localisation : 83 Var
Date d'inscription : 07/05/2009

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 20:06

Oui c'est bien ce ce que disais, on peut broder sur cet objet.
Je me souviens que tu avais fait un code qui permettait de colorer les cellules.
Je vais essayer de retrouver ce code.
Revenir en haut Aller en bas
mindstorm

mindstorm


Nombre de messages : 685
Age : 55
Localisation : charente
Date d'inscription : 13/02/2013

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptySam 11 Jan 2014 - 20:41

bonsoir a tous
et merci , je viens de decouvrir la fonction grid
il serai surement utile pour stocker des données
ou autre
Revenir en haut Aller en bas
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Objet GRID. Empty
MessageSujet: Objet GRID.   Objet GRID. EmptyDim 12 Jan 2014 - 15:13

Bonjour à tous.

Je tiens à remarquer que le calcul de la ligne et de la colonne est faussé, lorsque vous utilisez les commandes suivantes:

mouse_y_left_down() et mouse_x_left_down()

Ces commandes ne tiennent pas compte de l'épaisseur des traits de séparation horizontal et vertical entre chaque ligne et chaque colonne.

Il faut donc ajouter 1 pixel par ligne et colonne, dans le cas où vous souhaiteriez placer un objet EDIT de saisie dans la ligne et colonne sélectionnées.

Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2709
Date d'inscription : 13/09/2009

Objet GRID. Empty
MessageSujet: +++   Objet GRID. EmptyDim 12 Jan 2014 - 17:35

C'est une discussion inéressante,
c'est vrai qu'on ne peut pas écrire directement
dans les cellules du grid.
Mais bon, on peut facilement faire
comme Klaus l'a montré.

Mais ce que je trouve qui manque, dans le grid,
c'est la possibilité de déplacer le grand carré bleu
qui désigne où est le curseur,
il est en 1,1 au début
et si on écrit quelque chose par exemple en 3,2
eh bien il reste en 1,1
Cela a le désavantage de ne pas indiquer
l'endroit où le texte va être affiché
avant qu'on l'affiche,
ce qui peut facilement arriver
lorsqu'on est dans un programme
plus complexe que la petite démonstration ci-dessus.
 scratch  alien  scratch 
Tiens, j'ai pas fait d'humour, aujourd'hui...
 Shocked  alien  Shocked 

Revenir en haut Aller en bas
http://jjn4.e-monsite.com
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyDim 12 Jan 2014 - 18:42

Il faut aussi voir la simplicité d'utilisation de la sauvegarde par la fonction GRID_SAVE

Elle permet en une seule ligne de faire une sauvegarde complète du tableau
C'est extrêmement pratique et simple.

Je n'utilise plus que cela pour stocker mes données dans un programme, en plus c'est très rapide !!!

Je pense vous faire partager d'ici quelques temps un programme de gestion sportive (alimentation, sport, mensurations, objectifs, etc...) ou je n'utilise que des GRID pour tout gérer.

En tout cas pour moi c'est LA fonction incontournable pour la gestion des données.
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Objet GRID. Empty
MessageSujet: Objet GRID.   Objet GRID. EmptyLun 13 Jan 2014 - 9:57

Bonjour à tous.

Merci de votre aide pour le débogage de ce petit programme.

Les valeurs saisies dans l'objet EDIT ne s'inscrivent pas toujours dans les cases sélectionnées.

Et là j'avoue ne pas comprendre.

Petite précision: la 1ère colonne ne doit pas apparaître sur la FORM.

Code:
dim colonne%, h%, hauteur_ecran%, l%, largeur_ecran%, ligne%, nc%, xx%, yy%
dim chaine$, fichier$, langue_cible$, langue_source$, temporaire$

langue_cible$="espagnol"
langue_source$="français"

label enregistrer_dico_perso, selection

gerer_vocabulaire_perso()
end

sub gerer_vocabulaire_perso()

    largeur_ecran%=screen_x
    hauteur_ecran%=screen_y

    h%=25
    l%=125
    nc%=6

    form 182
     caption 182,"Gestion d'une liste de vocabulaire personnel."
     width 182,(nc%-1)*l%+50
     height 182,500
     left 182,(largeur_ecran%-width(182))/2
     top 182,(hauteur_ecran%-height(182))/2

    grid 331
     parent 331,182
     color 331,255,255,153
     left 331,(l%*-1)-1
     width 331,width(182)+l%
     height 331,height(182)
     grid_column 331,nc%
     grid_row 331,100
     grid_row_height 331,h%
     grid_column_width 331,l%
     ' 1ère colonne invisible.
     ' grid_one_column_width 331,1,1
     ' 1ère rangée fixe.
     grid_row_fixed 331,1

     font_size 331,12

     fichier$="dico_perso_"+langue_source$+"_"+langue_cible$+".txt"
     if file_exists(fichier$)>0
        grid_load 331,fichier$
           else
        aligner(331,"Mot français","C",100)
        grid_write 331,1,2,temporaire$
        aligner(331,"Type","C",100)
        grid_write 331,1,3,temporaire$
        aligner(331,"Mot "+langue_cible$,"C",100)
        grid_write 331,1,4,temporaire$
        aligner(331,"Type","C",100)
        grid_write 331,1,5,temporaire$
        aligner(331,"Sens","C",100)
        grid_write 331,1,6,temporaire$
    end_if

    on_click 331,selection
    on_key_down 331,selection

    edit 321
     parent 321,182
     left 321,-200
     font_size 321,12
     font_bold 321
     font_color 321,0,128,255

    button 666
     parent 666,182
     caption 666,"Enregistrer et quitter"
     font_bold 666
     font_size 666,12
     left 666,(width(182)-200)/2
     top 666,height(182)-90
     width 666,200
     height 666,30
     on_click 666,enregistrer_dico_perso

end_sub

enregistrer_dico_perso:
   grid_save 331,100,6,fichier$
   message "Données enregistrées !"

   hide 182
return

selection:

    ligne%=int(mouse_y_left_down(331)/h%)+1
    yy%=(ligne%-1)*(h%+1)

    colonne%=int(mouse_x_left_down(331)/l%)+1
    xx%=(colonne%-1)*(l%+1)

    caption 182,"Ligne: "+str$(ligne%)+", colonne: "+str$(colonne%)

    chaine$=text$(321)
    if len(chaine$)>0
       grid_write 331,ligne%,colonne%,chaine$
       text 321,""
    end_if
    
    left 321,xx%-l%
    top 321,yy%
    width 321,l%+1
    height 321,h%+1

    set_focus 321
    ' text 321,""
return

sub aligner(no%,t$,align$,wc%)

    dim_local sp%,x%,t%

    sp% = text_width(" ",no%)  : ' La variable sp% correspond à la taille d'un espace
    t% = text_width(t$,no%)    : ' La variable t% correspond à la taille du texte

    if align$="C"
       x% = int((wc%-sp%-t%)/sp%*2)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
          else
       if align$="D" then x% = int((wc%-sp%-t%)/sp%)
    end_if
    if x% > 0 then t$ = string$(x%," ")+t$ : ' On ajoute les espaces devant la chaine (0 si alignement à gauche)

    temporaire$ = t$

end_sub
Revenir en haut Aller en bas
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Objet GRID. Empty
MessageSujet: Objet GRID.   Objet GRID. EmptyLun 13 Jan 2014 - 10:31

Je viens juste de trouver la solution à ce bug.
Voici donc le code modifié.

Code:
dim colonne%, h%, hauteur_ecran%, l%, largeur_ecran%, ligne%, nc%, xx%, yy%
dim chaine$, fichier$, langue_cible$, langue_source$, temporaire$

langue_cible$="espagnol"
langue_source$="français"

label enregistrer_dico_perso, selection

gerer_vocabulaire_perso()
end

sub gerer_vocabulaire_perso()

    largeur_ecran%=screen_x
    hauteur_ecran%=screen_y

    h%=25
    l%=125
    nc%=6

    form 182
    caption 182,"Gestion d'une liste de vocabulaire personnel."
    width 182,(nc%-1)*l%+50
    height 182,500
    left 182,(largeur_ecran%-width(182))/2
    top 182,(hauteur_ecran%-height(182))/2

    grid 331
    parent 331,182
    color 331,255,255,153
    left 331,(l%*-1)-1
    width 331,width(182)+l%
    height 331,height(182)
    grid_column 331,nc%
    grid_row 331,100
    grid_row_height 331,h%
    grid_column_width 331,l%
    ' 1ère colonne invisible.
    ' grid_one_column_width 331,1,1
    ' 1ère rangée fixe.
    grid_row_fixed 331,1

    font_size 331,12

    fichier$="dico_perso_"+langue_source$+"_"+langue_cible$+".txt"
    if file_exists(fichier$)>0
        grid_load 331,fichier$
          else
        aligner(331,"Mot français","C",100)
        grid_write 331,1,2,temporaire$
        aligner(331,"Type","C",100)
        grid_write 331,1,3,temporaire$
        aligner(331,"Mot "+langue_cible$,"C",100)
        grid_write 331,1,4,temporaire$
        aligner(331,"Type","C",100)
        grid_write 331,1,5,temporaire$
        aligner(331,"Sens","C",100)
        grid_write 331,1,6,temporaire$
    end_if

    on_click 331,selection
    on_key_down 331,selection

    edit 321
    parent 321,182
    left 321,-200
    font_size 321,12
    font_bold 321
    font_color 321,0,128,255

    button 666
    parent 666,182
    caption 666,"Enregistrer et quitter"
    font_bold 666
    font_size 666,12
    left 666,(width(182)-200)/2
    top 666,height(182)-90
    width 666,200
    height 666,30
    on_click 666,enregistrer_dico_perso

end_sub

enregistrer_dico_perso:
  grid_save 331,100,6,fichier$
  message "Données enregistrées !"

  hide 182
return

selection:

    chaine$=text$(321)
    if len(chaine$)>0 then grid_write 331,ligne%,colonne%,chaine$

    ligne%=int(mouse_y_left_down(331)/h%)+1
    yy%=(ligne%-1)*(h%+1)

    colonne%=int(mouse_x_left_down(331)/l%)+1
    xx%=(colonne%-1)*(l%+1)

    caption 182,"Ligne: "+str$(ligne%)+", colonne: "+str$(colonne%)


    left 321,xx%-l%
    top 321,yy%
    width 321,l%+1
    height 321,h%+1

    set_focus 321
    text 321,""
return

sub aligner(no%,t$,align$,wc%)

    dim_local sp%,x%,t%

    sp% = text_width(" ",no%)  : ' La variable sp% correspond à la taille d'un espace
    t% = text_width(t$,no%)    : ' La variable t% correspond à la taille du texte

    if align$="C"
      x% = int((wc%-sp%-t%)/sp%*2)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
          else
      if align$="D" then x% = int((wc%-sp%-t%)/sp%)
    end_if
    if x% > 0 then t$ = string$(x%," ")+t$ : ' On ajoute les espaces devant la chaine (0 si alignement à gauche)

    temporaire$ = t$

end_sub
Revenir en haut Aller en bas
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyLun 13 Jan 2014 - 18:30

Joli.

Petite suggestion: lorsque tu cliques sur une cellule, il serait intéressant d'afficher le contenu de la cellule dans l'EDIT que tu places par-dessus.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyLun 13 Jan 2014 - 18:31

Puisque l'on parle du GRID et de ses fonctions...


Quelqu'un aurait il une idée pour faire un classement facile sur une ou plusieurs lignes ou colonnes.

Cela permet par exemple un classement chronologique ou alphabétique.

Peut être Jack peut trouver la fonction intéressante et la développer...
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Objet GRID. Empty
MessageSujet: re   Objet GRID. EmptyLun 13 Jan 2014 - 18:40

Pour le classement chronologique, il me semble que j' avais un truc avec ma petite dll... scratch 
je vais essayer de retrouver cela... geek

Edit :

c'est dans YGERONIMI/Astuces/Grid tri par date sur mon webdav... Wink
Revenir en haut Aller en bas
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyLun 13 Jan 2014 - 19:09

Ton code fonctionne très bien sur une colonne, Ygeronimi. Mais si te GRID contient plusieurs colonnes, ça ne marche pas - les autres colonnes ne snt pas modifiées par le tri.

Une solution qui marchera dans TOUS les cas:
- créer un DLIST avec SORT_on
- écrire dans ce DLIST, pour chaque ligne du tableau à trier, le contenu de la colonne servant de critère de tri, complétée par des espaces jusqu'à une longueur maxilale fixe (30, 100, 200 caractères...), suivi de toutes les cellules dans l'ordre, y compris la cellule de critère de tri, avec un caractère particulier comme séparateur (exemple: ²).
- effacer le GRID complètement
- la DLIST étant triée automatiquement, après avoir écrit toutes les lignes dedans, il ne reste plus qu'à lire la DLIST ligne par ligne et de réécrire les cellules du GRID.

Et voilà...

Ceci dit, le tri par date de YGeronimi est impeccable.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Objet GRID. Empty
MessageSujet: re   Objet GRID. EmptyLun 13 Jan 2014 - 19:12

Ce n' était qu' une ébauche mais on peut ajouter ce que l' on veut pour arriver à ses fins... Twisted Evil
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Objet GRID. Empty
MessageSujet: re   Objet GRID. EmptyLun 13 Jan 2014 - 20:55

Voilà un petit prog de tri par date avec un grid
Code:
dim x%,sep%,L$
dim date_sup%,z%,date_cell%,Donnee$,DateSupLign%
dim jour%,mois%,an%,result%
label Charger,Trier

' initialisation du form
width 0,800 :height 0,300 :font_name 0,"arial" :font_size 0,8
caption 0,"Tri d' un Grid par date"

' initialisation du grid
grid 1: top 1,0 :left 1,0 :width 1,width(0)-16 :height 1,155
grid_row 1,6 : grid_column 1,5
grid_one_column_width 1,2,80
grid_one_column_width 1,3,120
grid_one_column_width 1,4,120
grid_one_column_width 1,5,300
for x%=2 to 6
   grid_write 1,x%,1,str$(x%-1)
next x%
grid_write 1,1,2,"date"
grid_write 1,1,3,"Titre"
grid_write 1,1,4,"Auteur"
grid_write 1,1,5,"Commentaires"

' initialisation des boutons
button 2 : top 2,top(1)+160 : left 2,20  :caption 2,Charger : on_click 2,Charger
button 3 : top 3,top(1)+160 : left 3,170 :caption 3,Trier   : on_click 3,Trier

' initialisation du dlist
dlist 4
dlist 5
end

Charger:
   inactive 3
   file_load 4,"test.txt"
   for x%=1 to 5
      L$=item_read$(4,x%)
      sep%=instr(L$,"|")
      grid_write 1,x%+1,2,left$(L$,sep%-1)
      L$=right$(L$,len(L$)-sep%)
      sep%=instr(L$,"|")
      grid_write 1,x%+1,3,left$(L$,sep%-1)
      L$=right$(L$,len(L$)-sep%)
      sep%=instr(L$,"|")
      grid_write 1,x%+1,4,left$(L$,sep%-1)
      L$=right$(L$,len(L$)-sep%)
      grid_write 1,x%+1,5,L$
   next x%
   active 3
return

Trier:
   for x%=1 to count(4)
   date_sup%=0
      for z%=1 to count(4)
         date_cell%=0
         L$=item_read$(4,z%)
         sep%=instr(L$,"|")
         Donnee$=left$(L$,sep%-1)
         dll_on "YGF.dll"
         jour% = val(left$(donnee$,2))
         mois% = val(mid$(donnee$,4,2))
         an%  = val(right$(donnee$,4))
         result% = dll_call3("NbJours", jour%, mois%, an%)
         Date_Cell%=result%
         dll_off
         if Date_cell% > Date_sup%
            Date_Sup% = Date_Cell%
            DateSupLign% = z%
         end_if
      next z%
      item_insert 5,1,item_read$(4,DateSupLign%)
      item_delete 4,DateSupLign%
      item_insert 4,DateSupLign%,"30/12/1899|"
   next x%
   file_save 5,"test.txt"
   clear 4
   gosub Charger
return

le fichier test.txt :

12/10/2000|Titre 3|Auteur 3|Commentaire 3 
11/09/1999|Titre 2|Auteur 2|Commentaire 2
01/01/2014|Titre 5|Auteur 5|Commentaire 5
20/03/1995|Titre 1|Auteur 1|Commentaire 1
12/12/2003|Titre 4|Auteur 4|Commentaire 4

La dll est sur mon webdav.... Laughing

Ps : A adapter selon vos souhaits et sans oublier de mettre les gardes fous habituels que je n' ai pas mis pour faire plus court... Twisted Evil
Revenir en haut Aller en bas
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyMar 14 Jan 2014 - 1:05

Voici un exemple comment trier un GRID selon n'importe quelle colonne, et avec le choix de faire un tri numérique un alpha. D'autres types de tri peuvent être ajoutés aisément (sur la date, par exemple). Le programme est 100 % Panoramic, sans DLL. Il faut y ajouter le chargement des données à l'endroit indiqué - je vous laisse imaginer vos données.
Code:

label trier

dim n_lig% : n_lig% = 31
dim n_col% : n_col% = 5
dim typ$ : typ$ = "tri numérique"
dim typ$ : typ$ = "tri alpha"

dim i%, j%, k%, nc%, s$

grid 1 : grid_row 1,n_lig% : grid_column 1,n_col%
  width 1,345 : height 1,405
for i%=2 to n_lig%
  grid_write 1,i%,1,str$(i%-1)
next i%
for i%=2 to n_col%
  grid_write 1,1,i%,str$(i%-1)
next i%

button 12 : top 12,410 : left 12,70 : width 12,60 : caption 12,"Trier"
  on_click 12,trier
button 13 : top 13,410 : left 13,135 : width 13,60 : caption 13,"Trier"
  on_click 13,trier
button 14 : top 14,410 : left 14,200 : width 14,60 : caption 14,"Trier"
  on_click 14,trier
button 15 : top 15,410 : left 15,265 : width 15,60 : caption 15,"Trier"
  on_click 15,trier

' ici, charger les lignes du GRID...
' ...
end


trier:
  dlist 2 : sort_on 2
  nc% = number_click - 10
 
  ' phase 1 : création de la liste triée
  for i%=2 to n_lig%
    if typ$="tri numérique"
      s$ = right$(string$(30,"0")+grid_read$(i%,nc%),30)
    end_if
    if typ$="tri alpha"
      s$ = left$(grid_read$(i%,nc%)+string$(30," "),30)
    end_if
    for j%=2 to n_col%
      s$ = s$ + "²" + grid_read$(1,i%,j%)
    next j%
    item_add 2,s$+"²"
  next i%
 
  ' phase 2 - effacement du GRID
  grid_clear 1,n_row%,n_col%
 
  ' pase 3 - chargement du GRID à partir de la liste triée
  for i%=2 to n_lig% : ' ou count(2)
    s$ = item_read$(2,i%-1)
    ' éliminer le critère de tri
    s$ = mid$(s$,instr(s$,"²")+1,len(s$))
    ' charger chaque colonne de la ligne i%
    for j%=2 to n_col%
      k% = instr(s$,"²")
      grid_write 1,i%,j%,left$(s$,k%-1)
      if k%<len(s$) then s$ = mid$(s$,k%+1,len(s$)
    end_if
  next i%
  delete 2
  return
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyMar 14 Jan 2014 - 11:06

Bonjour Klaus.

Revoir les lignes 5 et 6
Code:
dim typ$ : typ$ = "tri numérique"
dim typ$ : typ$ = "tri alpha"

Ligne 64 la remplacer par next j% au lieu de end_if
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyMar 14 Jan 2014 - 23:18

Merci, Papydall. Tu as raison, et j'ai corrigé. J'ai également corrigé certaines autres petites anomalies, et j'ai mis le choix du type de tri (numérique ou alpha) dans une combo. C'est plus intuitif ainsi.

Voici ce que ça donne:
Code:
label trier

dim n_lig% : n_lig% = 31
dim n_col% : n_col% = 5

dim i%, j%, k%, nc%, s$, typ$, tot%

grid 1 : grid_row 1,n_lig% : grid_column 1,n_col%
  width 1,345 : height 1,405
for i%=2 to n_lig%
  grid_write 1,i%,1,str$(i%-1)
next i%
for i%=2 to n_col%
  grid_write 1,1,i%,str$(i%-1)
next i%

combo 3 : top 3,20 : left 3,360 : width 3,200
  item_add 3,"tri numérique"
  item_add 3,"tri alpha"
  text 3,item_read$(3,1)

button 12 : top 12,410 : left 12,70 : width 12,60 : caption 12,"Trier"
  on_click 12,trier
button 13 : top 13,410 : left 13,135 : width 13,60 : caption 13,"Trier"
  on_click 13,trier
button 14 : top 14,410 : left 14,200 : width 14,60 : caption 14,"Trier"
  on_click 14,trier
button 15 : top 15,410 : left 15,265 : width 15,60 : caption 15,"Trier"
  on_click 15,trier

' ici, charger les lignes du GRID...
' ...
end


trier:
  dlist 2 : sort_on 2
  nc% = number_click - 10
  typ$ = text$(3)  : ' récupérer le type de tri souhaité
 
  ' phase 1 : création de la liste triée
  for i%=2 to n_lig%
    if typ$="tri numérique"
      s$ = right$(string$(30,"0")+grid_read$(1,i%,nc%),30)+right$(string$(6,"0")+str$(i%),6)
    end_if
    if typ$="tri alpha"
      s$ = left$(grid_read$(1,i%,nc%)+string$(30," "),30)+right$(string$(6,"0")+str$(i%),6)
    end_if
    for j%=2 to n_col%
      s$ = s$ + "²" + grid_read$(1,i%,j%)
    next j%
    item_add 2,s$+"²"
  next i%

  ' phase 2 - effacement du GRID
  grid_clear 1,n_lig%,n_col%

  ' pase 3 - chargement du GRID à partir de la liste triée
  for i%=2 to n_lig% : ' ou count(2)
    grid_write 1,i%,1,str$(i%)
    s$ = item_read$(2,i%-1)
    ' éliminer le critère de tri
    s$ = mid$(s$,instr(s$,"²")+1,len(s$))
    ' charger chaque colonne de la ligne i%
    for j%=2 to n_col%
      k% = instr(s$,"²")
      grid_write 1,i%,j%,left$(s$,k%-1)
      if k%<len(s$) then s$ = mid$(s$,k%+1,len(s$))
    next j%
  next i%
  for i%=2 to n_col%
    grid_write 1,1,i%,str$(i%)
  next i%
  delete 2
  return

En fait, pour la première version, je n'étais pas chez moi et ne disposais pas de Panoramic. C'étaut un code que j'avais saisi directement dans le post, sans pouvoir le tester. C'est fait maintenant.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyMer 15 Jan 2014 - 11:19

J'ai transformé mon code pour faire une SUB qui permet de trier n'importe quelle colonne dun GRID. Ainsi, le code est facilement utilisable dans n'importe quel programme.

La procédure utilise un DLIST de façon interne, mais elle le créer au début et le supprime à la fin, sans interférer avec les numéros d'objets existants.

J'ai ajouté 5 lignes de données pour montrer l'effet des tris pour chaque colonne.

Code:
label trier

dim n_lig% : n_lig% = 31
dim n_col% : n_col% = 5

dim i%, nc%, typ$

grid 1 : grid_row 1,n_lig% : grid_column 1,n_col%
  width 1,345 : height 1,405
for i%=2 to n_lig%
  grid_write 1,i%,1,str$(i%-1)
next i%
for i%=2 to n_col%
  grid_write 1,1,i%,str$(i%-1)
next i%

combo 3 : top 3,20 : left 3,360 : width 3,200
  item_add 3,"tri numérique"
  item_add 3,"tri monétaire"
  item_add 3,"tri alpha"
  text 3,item_read$(3,1)

button 12 : top 12,410 : left 12,70 : width 12,60 : caption 12,"Trier"
  on_click 12,trier
button 13 : top 13,410 : left 13,135 : width 13,60 : caption 13,"Trier"
  on_click 13,trier
button 14 : top 14,410 : left 14,200 : width 14,60 : caption 14,"Trier"
  on_click 14,trier
button 15 : top 15,410 : left 15,265 : width 15,60 : caption 15,"Trier"
  on_click 15,trier

' ici, charger les lignes du GRID...
grid_write 1,2,2,"Jaques"
grid_write 1,2,3,"12,8"
grid_write 1,2,4,"Paris"
grid_write 1,2,5,"Plombier"

grid_write 1,3,2,"Anaïs"
grid_write 1,3,3,"23"
grid_write 1,3,4,"Boulogne"
grid_write 1,3,5,"Maçon"

grid_write 1,4,2,"Gertrude"
grid_write 1,4,3,"30"
grid_write 1,4,4,"Versailles"
grid_write 1,4,5,"Artiste"
' ...
grid_write 1,5,2,"Xavier"
grid_write 1,5,3,"13,41"
grid_write 1,5,4,"Versailles"
grid_write 1,5,5,"MACON"

grid_write 1,6,2,"Pierre"
grid_write 1,6,3,"19"
grid_write 1,6,4,"Brest"
grid_write 1,6,5,"PLOMBIER"

end


trier:
  nc% = number_click - 10
  typ$ = text$(3)  : ' récupérer le type de tri souhaité
  trier_grid(1,n_lig%,n_col%,nc%,typ$)
  return

' Cette procédure trie un GRID selon une de ses colonnes.
' Paramètres:
'  n_grid%  numéro d'objet du GRID
'  n_lig%    nombre total de lignes
'  n_col%    nombre total de colonnes
'  nc%      numéro de colonnes selon laquelle il faut trier
'  typ$      type de tri:
'              "tri numérique"
'              "tri alpha"


sub trier_grid(n_grid%,n_lig%,n_col%,nc%,typ$)
  dim_local no%, i%, j%, s$, k%
  for no%=1 to 10000
    if object_exists(no%)=0 then exit_for
  next no%
  dlist no% : sort_on no%
  ' phase 1 : création de la liste triée
  for i%=2 to n_lig%
    s$ = ""
    for j%=2 to n_col%
      s$ = s$ + grid_read$(n_grid%,i%,j%)
    next j%
    if trim$(s$)<>""
      if typ$="tri numérique"
        s$ = right$(string$(30,"0")+grid_read$(n_grid%,i%,nc%),30)+right$(string$(6,"0")+str$(i%),6)
      end_if
      if typ$="tri monétaire"
        s$ = trim$(grid_read$(n_grid%,i%,nc%))
        if s$="" then s$ = 0
        k% = instr(s$,",")
        if k%>0 then s$ = left$(s$,k%-1) + "." + mid$(s$,k%+1,len(s$))
        if numeric(s$)=0
          message "Ligne "+str$(i%)+": valeur non numérique"
          delete no%
          exit_sub
        end_if
        k% = instr(s$,".")
        if k%>0
          s$ = s$ + string$(len(s$)-k%,"0")
        else
          s$ = s$ + ".00000"
        end_if
        s$ = right$(string$(30,"0")+s$,30)+right$(string$(6,"0")+str$(i%),6)
      end_if
      if typ$="tri alpha"
        s$ = left$(grid_read$(n_grid%,i%,nc%)+string$(30," "),30)+right$(string$(6,"0")+str$(i%),6)
      end_if
' *** ajouter ici d'éventuels autres types de tri...
      for j%=2 to n_col%
        s$ = s$ + "²" + grid_read$(n_grid%,i%,j%)
      next j%
      item_add no%,s$+"²"
    end_if
  next i%

  ' phase 2 - effacement du GRID
  grid_clear n_grid%,n_lig%,n_col%

  ' pase 3 - chargement du GRID à partir de la liste triée
  for i%=2 to count(2)+1
    grid_write n_grid%,i%,1,str$(i%)
    s$ = item_read$(no%,i%-1)
    ' éliminer le critère de tri
    s$ = mid$(s$,instr(s$,"²")+1,len(s$))
    ' charger chaque colonne de la ligne i%
    for j%=2 to n_col%
      k% = instr(s$,"²")
      grid_write n_grid%,i%,j%,left$(s$,k%-1)
      if k%<len(s$) then s$ = mid$(s$,k%+1,len(s$))
    next j%
  next i%
  for i%=2 to n_col%
    grid_write n_grid%,1,i%,str$(i%)
  next i%
  delete no%
end_sub

Il est facile d'ajouter d'autres types de tri à cette procédure. Il suffit d'ajouter le code nécessaire à la construction du critère de tri, à l'endroit indiqué dans le source.

@Ygeronimi:
Cette SUB pourrait peut-être figurer dans la liste des SUB du MAG ?


Dernière édition par Klaus le Mer 15 Jan 2014 - 11:44, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Objet GRID. Empty
MessageSujet: re   Objet GRID. EmptyMer 15 Jan 2014 - 11:26

Elle le peut.  Laughing

Cela va me changer des messages contrariant du compilateur... Laughing

Edit : C' est en ligne ! Laughing 


Dernière édition par ygeronimi le Mer 15 Jan 2014 - 11:57, édité 1 fois
Revenir en haut Aller en bas
Klaus

Klaus


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

Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. EmptyMer 15 Jan 2014 - 11:46

Reprends alors le code posté ci-dessus - je viens de rajouter un mode de tri "monétaire" qui permet de trier des valeurs décimales (jusqu'à 5 chiffres après la virgule) dans leur ordre numérique réel, au lieu d'un ordre numérique basé sur de l'alpha. Là, ça correspond vraiment à l'ordre auquyel on s'attend. Les données de la démo ont été adaptées pour montrer cela.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Objet GRID. Empty
MessageSujet: Re: Objet GRID.   Objet GRID. Empty

Revenir en haut Aller en bas
 
Objet GRID.
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» pourquoi cette erreur?
» Problème avec un objet GRID.
» Objet GRID.
» Amélioration de l'objet GRID.
» Changement pour objet GRID

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: