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
» Logiciel de planétarium.
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

 

 Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER

Aller en bas 
2 participants
AuteurMessage
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 15:22

Bonjour à tous!

J'ai trouvé le moyen d'obtenir le nb de lignes et de colonnes présentes dans un grid; Astuce 100% panoramic!!!Cool Cool Cool

Code:

' Silverman, septembre 2016
'
' Déterminer le nombre de ligne et de colonne d'un grid
'

dim GRN%,GCN%,lig%,col%
dim result%

' fabrique un grid au dimension aléatoire
grid 1 : width 1,400 : height 1,200 : left 1,180
lig%=rnd(30)+1
col%=rnd(30)+1
grid_row 1,lig%
grid_column 1,col%

' affiche le résultat
print : print "Nb de ligne aléatoire = ",lig%
print : print "Nb de colonne aléatoire = ",col%

' les subs en action
Grid_row_Number(1) : GRN%=result%      :' écrit le nb de ligne dans GRN%

Grid_Column_Number(1) : GCN%=result%  :' écrit le nb de colonne dans GCN%


' affiche le résultat
caption 0,"Grid_row_Number = " + str$(GRN%)+" /  Grid_Column_Number = " + str$(GCN%)



END
' LES SUBS
' Trouve le nb de colonne
sub Grid_Column_Number(my_grid)
 dim_local deb%,mil%,fin%
  '
  ' initialisation
  deb%=0
  fin%=1
  repeat
      fin%=fin%*2
  until grid_x_to_column(my_grid,fin%)=0
 
  ' recherche par dichotomie
  repeat
      mil%=(deb%+fin%)/2
      if grid_x_to_column(my_grid,mil%)<>0
        deb%=mil%
      else
        fin%=mil%
      end_if
  until (fin%-deb%)<2
 
  ' résultat
  result%=grid_x_to_column(my_grid,deb%)

end_sub


' Trouve le nb de ligne
sub Grid_row_Number(my_grid)
 dim_local deb%,mil%,fin%
  '
  ' initialisation
  deb%=0
  fin%=1
  repeat
      fin%=fin%*2
  until grid_y_to_row(my_grid,fin%)=0

  ' recherche par dichotomie
  repeat
      mil%=(deb%+fin%)/2
      if grid_y_to_row(my_grid,mil%)<>0
        deb%=mil%
      else
        fin%=mil%
      end_if
  until (fin%-deb%)<2
  '
  ' résultat
  result%=grid_y_to_row(my_grid,deb%)

end_sub
EDIT : Après plusieurs autres tests, il est préférable d'utiliser la variable "result%" directement, plutot que de passer par des peeks et pokes pour renvoyer un résultat(sinon, ça peut être aléatoire). ---> J'ai supprimé les peeks et pokes


Dernière édition par silverman le Jeu 15 Sep 2016 - 12:34, édité 3 fois
Revenir en haut Aller en bas
JL35




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

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 18:15

C'est laborieux, mais intéressant, dommage que ça n'existe pas en natif.

En tout cas je note pour regarder de plus près, ça m'intéresse beaucoup.
Merci silverman
Revenir en haut Aller en bas
JL35




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

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 19:52

J'ai eu une idée géniale: quand on fait un Grid_Save dans un fichier, les deux premières lignes contiennent respectivement en Ascii le nombre de lignes et le nombre de colonnes, alors je me suis dit: faisons une sauvegarde et allons lire ces paramètres.

Manque de chance, pour faire la sauvegarde il faut préciser le nombre de lignes et de colonnes à sauvegarder...
J'ai essayé en mettant dans le Save des valeurs élevées par exemple 100 et 100, mais il sauvegarde imperturbablement 100 lignes de 100 colonnes (vides évidemment), avec en tête de la sauvegarde 100 et 100.

Donc c'est raté, en attendant une autre idée géniale...

Pour le moment j'ai écrit des Subs de gestion des grilles, où je maintiens en permanence à jour le nombre de lignes et de colonnes, et leurs dimensions, mais effectivement c'est intéressant de pouvoir le calculer.
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 20:30

JL35 a écrit:
J'ai eu une idée géniale: quand on fait un Grid_Save dans un fichier, les deux premières lignes contiennent respectivement en Ascii le nombre de lignes et le nombre de colonnes, alors je me suis dit: faisons une sauvegarde et allons lire ces paramètres.

J'avais déjà évoqué cette idée ici, et tu y avais même répondu! Perdrais tu la tête? Laughing

Le nb de lignes/colonnes n'est pas calculé, il est lu. What a Face
L'astuce consiste à rechercher par dichotomie, la coordonnée VALIDE(cad <>0) la plus à droite du grid retourné par GRID_X_TO_COLUMN, ce qui correspond au nombre de colonne. Même principe pour les lignes!
Les peek/pokes renvoient le résultat dans une variable utilisateur transmise par ADR(). Ainsi, ce n'est pas le programmeur qui s'adapte à la sub, mais bien le contraire! Pas besoin de savoir que le résultat final est stocké dans la variable mil% puisqu'il est renvoyé! santa

!!! POUR PEEK ET POKE, VOIR L'EDIT DU PREMIER POST !!!


Dernière édition par silverman le Mar 13 Sep 2016 - 19:51, édité 3 fois
Revenir en haut Aller en bas
JL35




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

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 20:30

Bon silverman, j'ai repiqué ton idée géniale à toi d'utiliser GRID_X_TO_COLUMN et GRID_Y_TO_ROW, qui renvoient zéro quand X est en dehors du Grid, et ça fait un truc assez simple finalement.
La sub est Grid_Licol() qui renvoie les deux: nombre de lignes et nombre de colonnes.
J'ai aussi repris (avec ta permission Very Happy ) ton programme d'appel de la routine:
Code:
' Silverman, septembre 2016
' Déterminer le nombre de ligne et de colonne d'un grid
'
 dim GRN%,GCN%,lig%,col%
' fabrique un grid au dimension aléatoire
grid 1 : width 1,400 : height 1,200 : left 1,180
lig%=rnd(30)+1
col%=rnd(30)+1
grid_row 1,lig%
grid_column 1,col%
' affiche le résultat, pour contrôle
print : print "Nb de ligne aléatoire = ",lig%
print : print "Nb de colonne aléatoire = ",col%
' les subs en action
Grid_licol(1): ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<
' affiche le résultat
caption 0,"Grid_row_Number = " + str$(GRN%)+" /  Grid_Column_Number = " + str$(GCN%)
END
' ==============================================================================
SUB Grid_Licol(gr%)
  ' Nb de rangées et de colonnes du GRID gr% -> GRN% et GCN%
  DIM_LOCAL v%,i%
  v% = 0: i% = GRID_X_TO_COLUMN(gr%,v%)
  WHILE i% > 0: GCN% = i%: v% = v%+1: i% = GRID_X_TO_COLUMN(gr%,v%): END_WHILE
  v% = 0: i% = GRID_Y_TO_ROW(gr%,v%)
  WHILE i% > 0: GRN% = i%: v% = v%+1: i% = GRID_Y_TO_ROW(gr%,v%): END_WHILE
END_SUB
' ==============================================================================
Revenir en haut Aller en bas
JL35




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

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 20:33

On s'est croisés silverman, effectivement je ne me rappelais même plus que le problème avait déjà été évoqué... que veux-tu, je vieillis...
En tout cas la sub telle que ci-dessus me convient parfaitement et je l'adopte à l'unanimité.
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 20:43

On s'est croisé Very Happy 

Ta méthode fonctionne parfaitement, mais il y a un souci de performance.
Par exemple pour la recherche du nb de colonne, tu boucles autant de fois que la largeur du grid, cad que pour pour une largeur de 300 pixels, tu boucles 300 fois!
L'intérêt de la dichotomie, c'est de diminuer cela. Dans mon code, pour la même largeur, je boucle une vingtaine de fois tout au plus, ce qui est plus rapide!
Revenir en haut Aller en bas
JL35




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

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyJeu 8 Sep 2016 - 21:03

Je suis bien conscient et d'accord que c'est un peu bestial comme méthode, mais c'est une opération qu'on ne fait qu'une seule fois, j'ai commencé par faire un essai sur 1000 pixels et je n'ai constaté aucun délai, alors à mon avis ce n'est pas du tout gênant, même si ta méthode est plus élégante, certes.

PS je viens de mesurer, sur un tableau de 100 lignes et de 50 colonnes (de 100 pixels chacune), ce qui est déjà un gros tableau, je trouve 889 ms de temps d'exécution, donc moins d'une seconde. Et je suis loin d'avoir un pc de course.
Ça fait 5000 pixels en largeur et 2200 pixels en hauteur.

En ce qui concerne le temps d'exécution, dans la sub, au lieu de progresser pixel par pixel (v% = v%+1) on peut sans problème le faire de 5 en 5, ou de 10 en 10, ce qui divise le temps par 10 !
Revenir en haut Aller en bas
JL35




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

Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER EmptyVen 9 Sep 2016 - 14:37

Sur le même principe breveté silverman, deux petites subs pour récupérer la largeur d'une colonne donnée ou la hauteur d'une ligne donnée.
Le résultat est rendu respectivement dans wc% et hr% déclarés dans le programme appelant ( = -1 si colonne ou ligne incorrects).
Code:
' ------------------------------------------------------------------------------
SUB Grille_Getwc(gr%,col%)
  ' Récupérer la largeur de la colonne col% du grid gr% -> wc% (-1 si col% incorrecte)
  DIM_LOCAL v1%,v2%,i%
  v1% = 0: i% = GRID_X_TO_COLUMN(gr%,v1%)
  WHILE i% < col%
      v1% = v1%+1: i% = GRID_X_TO_COLUMN(gr%,v1%): IF i% = 0 THEN wc% = -1: EXIT_SUB
  END_WHILE
  v2% = v1%: i% = GRID_X_TO_COLUMN(gr%,v2%)
  WHILE i% = col%: v2% = v2%+1: i% = GRID_X_TO_COLUMN(gr%,v2%): END_WHILE
  wc% = v2%-v1%-1
END_SUB
' ------------------------------------------------------------------------------
SUB Grille_Gethr(gr%,rng%)
  ' Récupérer la hauteur de la ligne rng% du grid gr% -> hr% (=-1 si rng% incorrecte)
  DIM_LOCAL v1%,v2%,i%
  v1% = 0: i% = GRID_Y_TO_ROW(gr%,v1%)
  WHILE i% < rng%
      v1% = v1%+1: i% = GRID_Y_TO_ROW(gr%,v1%): IF i% = 0 THEN hr% = -1: EXIT_SUB
  END_WHILE
  v2% = v1%: i% = GRID_Y_TO_ROW(gr%,v2%)
  WHILE i% = rng%: v2% = v2%+1: i% = GRID_Y_TO_ROW(gr%,v2%): END_WHILE
  hr% = v2%-v1%-1
END_SUB
' ------------------------------------------------------------------------------
D'accord silverman, c'est du pixel par pixel, mais ça va très vite quand même.
Revenir en haut Aller en bas
Contenu sponsorisé





Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty
MessageSujet: Re: Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER   Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER Empty

Revenir en haut Aller en bas
 
Astuce : GRID_ROW_NUMBER ; GRID_COLUMN_NUMBER
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Une astuce sur l'encodage de vos source
» Astuce lors d'un appel de sub.
» astuce : picture, couleur et redimensionnement
» [ASTUCE]Icones du forum
» Astuce dans un string

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: