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
» A propos des attributs de fichier
par Oscaribout Aujourd'hui à 1:53

» Problème de math
par Marc37 Hier à 23:04

» Problème de math
par braveen Hier à 21:40

» I Love You
par papydall Hier à 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Hier à 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Justfication à droite et centrage de textes

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Klaus

avatar

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

MessageSujet: Justfication à droite et centrage de textes   Mer 31 Oct 2012 - 1:01

Extraits de mon programme de gestion de ventes eBay, voici les procédures de cadrage de textes à droite et de centrage. Ces procédures fonctionnent pour n'importe quel objet Panoramic (EDIT, MEMO, cellule de GRID, etc).

On leur passe le texte à cadrer, le numéro d'objet pour lequel il faut faire le cardrage, et la largeur en pixels maximale. Le texte est cadré en ajoutant des espaces devant le texte d'origine, et ce texte cadré est retourné dans une variable globale sjust$.

Voici une démo incluant les deux procédures:
Code:
' demo_cadrage.bas

dim i%,s$,sjust$

grid 1 : grid_row 1,10 : grid_column 1,4
  width 1,400 : height 1,400
  grid_column_width 1,80
grid_write 1,1,2,"Gauche"
grid_write 1,1,3,"Centré"
grid_write 1,1,4,"Droite"
for i%=1 to 9
  grid_write 1,i%+1,1,str$(i%)
  s$ = s$ + str$(i%)
  grid_write 1,i%+1,2,s$
  center_justify(s$,1,80)
  grid_write 1,i%+1,3,sjust$
  right_justify(s$,1,80)
  grid_write 1,i%+1,4,sjust$
next i%
 
end




sub right_justify(m$,g%,w%)
  dim_local x%, sp%, t%
  sp% = text_width(" ",g%)
  t% = text_width(m$,g%)
  x% = int((w%-sp%-t%)/sp%)
  if x%>0
    sjust$ = string$(x%," ")+m$
  else
    sjust$ = m$
  end_if
end_sub

sub center_justify(m$,g%,w%)
  dim_local x%,sp%, t%
  sp% = text_width(" ",g%)
  t% = text_width(m$,g%)
' *** bug dans Panoramic ***  x% = int((w%-sp%-t%)/sp%/2)
  x% = int((w%-sp%-t%)/sp%*2)  : ' *** contourner le bug dans PAnoramic ***
  if x%>0
    sjust$ = string$(x%," ")+m$
  else
    sjust$ = m$
  end_if
end_sub

Et voici le résultat:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

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

MessageSujet: re   Jeu 1 Nov 2012 - 5:19

Je me suis permis de reprendre ton code pour l'englober dans une seule procédure d' écriture.
Comme je suis un peu fé..... pale cela ne me fait plus qu'un appel réutilisable... Laughing
Code:
dim v$,i%

grid 1 : grid_row 1,10 : grid_column 1,4
  width 1,400 : height 1,400
  grid_column_width 1,80
grid_write 1,1,2,"Gauche"
grid_write 1,1,3,"Centré"
grid_write 1,1,4,"Droite"

for i%=1 to 9
  Write_Grid_Align(1,i%+1,1,str$(i%),"G",80)
  v$=v$+str$(i%)
  Write_Grid_Align(1,i%+1,2,v$,"G",80)
  Write_Grid_Align(1,i%+1,3,v$,"C",80)
  Write_Grid_Align(1,i%+1,4,v$,"D",80)
next i%

end
' ------------------------------------------------------------------------------
sub Write_Grid_Align(No%,R%,C%,T$,Align$,WC%)
  If Variable("sjust$")=0 then Dim sjust$
  Dim_Local sp%,x%,t%
  If Align$="G"
      Grid_Write No%,R%,C%,T$
  Else
      If Align$="C"
        sp% = text_width(" ",No%)
        t% = text_width(T$,No%)
        ' *** bug dans Panoramic ***  x% = int((w%-sp%-t%)/sp%/2)
        x% = int((WC%-sp%-t%)/sp%*2)  : ' *** contourner le bug dans PAnoramic ***
            if x%>0
              sjust$ = string$(x%," ")+T$
            else
              sjust$ = T$
            end_if
      Else
        If Align$="D"
              sp% = text_width(" ",No%)
              t% = text_width(T$,No%)
              x% = int((WC%-sp%-t%)/sp%)
              if x%>0
                sjust$ = string$(x%," ")+T$
              else
                sjust$ = T$
              end_if
        End_If
      End_If
      Grid_Write No%,R%,C%,sjust$
  End_If
End_Sub

Le résultat est le même Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 11:47

Très bien !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 12:00

Je me suis permis de modifier un peu la procédure
Code:
' ------------------------------------------------------------------------------
' -                                                                            -
' -          Alignement de cellules: programme créé par Klaus                  -
' -                                                                            -
' -          Modifié par ygeronimi et jicehel  le 01/11/2012                  -
' -                                                                            -
' ------------------------------------------------------------------------------
'
' Déclaration des variables
'
dim Chaine$    : ' Variable qui stockera la chaine de caractères à afficher
dim Compteur%  : ' Variable servant de compteur dans notre programme
'
' Création de la grille
'
grid 1          :' La grille sera l'objet n°1
grid_row 1,10 : grid_column 1,4 : ' Définition du nombre de lignes à 10 et 4 colonnes
width 1,400 : height 1,400      : ' Redéfinition de la taille de la grille en largeur et hauteur
grid_column_width 1,80          : ' Redéfinition de la largeur de la colonne 1
grid_write 1,1,2,"Gauche" :      ' Ecrit "Gauche" dans l'objet 1 (la grille), colonne 2, ligne 1
grid_write 1,1,3,"Centré" :      ' Ecrit "Centré" dans la grille, colonne 3, ligne 1
grid_write 1,1,4,"Droite" :      ' Ecrit "Droite" en c:4, l:1

'
' Boucle de remplissage de la grille
'
for Compteur%=1 to 9 : ' Faire 9 fois la boucle en utilisant la vraible Compteur% de 1 à 9
  Write_Grid_Align(1,Compteur%+1,1,str$(Compteur% ),"G",80) : ' Affiche le compteur dans la grille, dans la colonne 1
  Chaine$=Chaine$+str$(Compteur% ) : ' Fabrique la chaine qui servira pour le test
  Write_Grid_Align(1,Compteur%+1,2,Chaine$,"G",80) : ' Affiche la chaine alignée à gauche dans la colonne 2
  Write_Grid_Align(1,Compteur%+1,3,Chaine$,"C",80) : ' Affiche la chaine centrée dans la colonne 3
  Write_Grid_Align(1,Compteur%+1,4,Chaine$,"D",80) : ' Affiche la chaine alignée à droite dans la colonne 4
next Compteur%      : ' Fin de la boucle, recommencer jusqu'à ce que compteur% soit plus grand que 9

end : ' Fin du programme
'
' ------------------------------------------------------------------------------
' Procédure de gestion de l'alignement appelé par le programme principal
'  No%    est le numéro de l'objet dans lequel on veut écrire
'  R%      correspond à ROW, le n° de la ligne dans laquelle on veut écrire
'  C%      correspond à COLOUMN, le n° de la colonne dans laquelle on veut écrire
'  T$      est le texte que l'on veut y écrire
'  Align$  est le type d'alignement demandé
'                          "C" correspond à centré
'                          "D" correspond à un alignement à droite
'                          "G" est l'alignement par défaut (à gauche)
' ------------------------------------------------------------------------------
'
sub Write_Grid_Align(No%,R%,C%,T$,Align$,WC%)
  Dim_Local sp%,x%,t%,sjust$  : ' Définition des variables locales
  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

  ' Teste si l'on a demandé un affichage centré
  If Align$="C"
    ' *** bug dans Panoramic ***  x% = int((w%-sp%-t%)/sp%/2)
    x% = int((WC%-sp%-t%)/sp%*2)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
  Else
    ' Teste si l'on a demandé un affichage à droite
    If Align$="D" Then x% = int((WC%-sp%-t%)/sp%)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
  End_If
  if x% > 0 then T$ = string$(x%," ")+T$ : ' On ajoute les espaces devant la chaine (0 si alignement à gauche)
  Grid_Write No%,R%,C%,T$ : ' On écrit la chaine dans la grille
End_Sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 12:15

On peut faire de jolies choses avec ça, n'est-ce pas ? Mais n'oubliez pas: ce que j'ai posté initialement, est utilisable pour tout type d'objet Panoramic: grid, bien sûr, mais aussi edit, memo, caption d'un bouton ou d'une form ou d'un container, enregistrement dans un fichier, impressions, ... bref, tout ce qui accepte une chaîne de caractères et qui peut se mesurer en pixels. Ce n'est plus le cas avec vos procédures qui visent spécifiquement une cellude d'un grid.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 12:20

Absolument Wink
Là, la procédure est spécifique, je vais modifier pour faire 2 procédures
Celle de la grille appellera la générale, tu as raison Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 12:31

Voilà, ça donnerait ça:
Code:
' ------------------------------------------------------------------------------
' -                                                                            -
' -          Alignement de cellules: programme créé par Klaus                  -
' -                                                                            -
' -          Modifié par ygeronimi et jicehel  le 01/11/2012                  -
' -                                                                            -
' ------------------------------------------------------------------------------
'
' Déclaration des variables
'
dim Chaine$    : ' Variable qui stockera la chaine de caractères à afficher
dim Compteur%  : ' Variable servant de compteur dans notre programme
'
' Création de la grille
'
grid 1          :' La grille sera l'objet n°1
grid_row 1,10 : grid_column 1,4 : ' Définition du nombre de lignes à 10 et 4 colonnes
width 1,400 : height 1,400      : ' Redéfinition de la taille de la grille en largeur et hauteur
grid_column_width 1,80          : ' Redéfinition de la largeur de la colonne 1
grid_write 1,1,2,"Gauche" :      ' Ecrit "Gauche" dans l'objet 1 (la grille), colonne 2, ligne 1
grid_write 1,1,3,"Centré" :      ' Ecrit "Centré" dans la grille, colonne 3, ligne 1
grid_write 1,1,4,"Droite" :      ' Ecrit "Droite" en c:4, l:1

'
' Boucle de remplissage de la grille
'
for Compteur%=1 to 9 : ' Faire 9 fois la boucle en utilisant la vraible Compteur% de 1 à 9
  Write_Grid_Align(1,Compteur%+1,1,str$(Compteur% ),"G",80) : ' Affiche le compteur dans la grille, dans la colonne 1
  Chaine$=Chaine$+str$(Compteur% ) : ' Fabrique la chaine qui servira pour le test
  Write_Grid_Align(1,Compteur%+1,2,Chaine$,"G",80) : ' Affiche la chaine alignée à gauche dans la colonne 2
  Write_Grid_Align(1,Compteur%+1,3,Chaine$,"C",80) : ' Affiche la chaine centrée dans la colonne 3
  Write_Grid_Align(1,Compteur%+1,4,Chaine$,"D",80) : ' Affiche la chaine alignée à droite dans la colonne 4
next Compteur%      : ' Fin de la boucle, recommencer jusqu'à ce que compteur% soit plus grand que 9

end : ' Fin du programme
'
' ------------------------------------------------------------------------------
' Procédure de gestion de l'alignement d'un texte dans une grille
'  No%    est le numéro de l'objet dans lequel on veut écrire
'  R%      correspond à ROW, le n° de la ligne dans laquelle on veut écrire
'  C%      correspond à COLOUMN, le n° de la colonne dans laquelle on veut écrire
'  T$      est le texte que l'on veut y écrire
'  Align$  est le type d'alignement demandé
'                          "C" correspond à centré
'                          "D" correspond à un alignement à droite
'                          "G" est l'alignement par défaut (à gauche)
'  WC%    largeur disponible de l'objet
' ------------------------------------------------------------------------------
'
sub Write_Grid_Align(No%,R%,C%,T$,Align$,WC%)
  Align(No%,T$,Align$,WC%)
  T$ = Align_return$
  Grid_Write No%,R%,C%,T$ : ' On écrit la chaine dans la grille
End_Sub
'
' ------------------------------------------------------------------------------
' Procédure de gestion de l'alignement dans un objet quelconque
'  No%    est le numéro de l'objet dans lequel on veut écrire
'  T$      est le texte que l'on veut y écrire
'  Align$  est le type d'alignement demandé
'                          "C" correspond à centré
'                          "D" correspond à un alignement à droite
'                          "G" est l'alignement par défaut (à gauche)
'  WC%    largeur disponible de l'objet
' ------------------------------------------------------------------------------
'
Sub Align(No%,T$,Align$,WC%)
  Dim_Local sp%,x%,t%        : ' Définition des variables locales
  If Variable("Align_return$")=0 then Dim Align_return$ : ' On doit définir une variable globale pour retourner la chaine calculée
  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

  ' Teste si l'on a demandé un affichage centré
  If Align$="C"
    ' *** bug dans Panoramic ***  x% = int((w%-sp%-t%)/sp%/2)
    x% = int((WC%-sp%-t%)/sp%*2)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
  Else
    ' Teste si l'on a demandé un affichage à droite
    If Align$="D" Then x% = int((WC%-sp%-t%)/sp%)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
  End_If
  if x% > 0 then T$ = string$(x%," ")+T$ : ' On ajoute les espaces devant la chaine (0 si alignement à gauche)
  Align_return$ = T$  : ' On place la chaine modifiée dans la chaine de retour
End_Sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 12:48

C'est pas mal, comme ça. J'ai intégré la procédure Align dans KGF_SUB.bas. Seule différence: pour respecter les conventions d'appel en cours avec KGF_SUB, j'ai nommé la variable de résultat Align$ (même nom que la procédure, avec un $ terminal), et donc le paramètre formel align$ est devenu alignement$. C'est devenu ainsi la première procédure "utilitaire" non liée à KGF.dll que j'ai intégré dans ce module.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 12:56

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

avatar

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

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 13:11

Et j'ai adapté demo_KGF_SUB.bas pour une démonstration (plus réduite) de cette fonction, dans un memo.

Juste une remarque: on ne peut pas utiliser le numéro d'un memo ou d'un bouton comme premier paramètre de la fonction Align. En effet, la fonction TEXT_WIDTH ne s'applique malheureusement pas à tous les objets Panoramic. Jack pourrait éventuellement élargir de domaine d'application de cette fonction.

Mais on peut contourner le problème en utilisant un ALPHA quelconque (avec police, style et taille appropriés) pour l'appel de la fonction Align, puis on utilise la variable Align$ pour l'objet véritablement ciblé. C'est ce que j'ai fait dans demo_KGF_SUB.bas, et ça marche parfaitement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 13:23

Il faut juste bien entendu que les paramétrage de polices soient les même sur l'alpha et l'objet ...
C'est évident, mais bon, mieux vaut quand même l'écrire quelque part Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

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

MessageSujet: re   Jeu 1 Nov 2012 - 15:40

On peut n'en faire qu'une en se servant de Object_type(N) en condition
et changer la façon d'écrire selon l'objet. Laughing

Code:
if object_type(No%)=22
    Grid_write........
else
  if object_type(No%)=3
      Text No%,.......
  else
      If object_Type(No%)=4 or If object_Type(No%)=5 or If object_Type(No%)=8
          Item_add No%,......
      Else
          Caption No%,..........
      End_if
  End_if
End_if
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 15:58

Oui, mais est-ce vraiment utile ?
N'est-ce pas plus simple d'envoyer le texte à justifier et de faire ce que l'on veut de la chaine préparée ?
Je ne suis pas sûr que l'on y gagne beaucoup en lisibilité ou en simplicité.
Par exemple les paramètres lignes et colonnes ne servent que pour la grille.
En règle général avec la procédure qui t'envoie le texte formaté, tu fais juste Align(No%,T$,Align$,WC%)
et tu envois directement Align$ dans le traitement que tu veux et ça fait 2 lignes dans ton code.
Que gagnerais-tu à traiter l'affichage dans la procédure ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 16:07

Pour notre cas, en ne gardant que la procédure pour avoir le text aligné, ça donne ça:
Code:
' ------------------------------------------------------------------------------
' -                                                                            -
' -          Alignement de cellules: programme créé par Klaus                  -
' -                                                                            -
' -          Modifié par ygeronimi et jicehel  le 01/11/2012                  -
' -                                                                            -
' ------------------------------------------------------------------------------
'
' Déclaration des variables
'
dim Chaine$    : ' Variable qui stockera la chaine de caractères à afficher
dim Compteur%  : ' Variable servant de compteur dans notre programme
'
' Création de la grille
'
grid 1          :' La grille sera l'objet n°1
grid_row 1,10 : grid_column 1,4 : ' Définition du nombre de lignes à 10 et 4 colonnes
width 1,400 : height 1,400      : ' Redéfinition de la taille de la grille en largeur et hauteur
grid_column_width 1,80          : ' Redéfinition de la largeur de la colonne 1
grid_write 1,1,2,"Gauche" :      ' Ecrit "Gauche" dans l'objet 1 (la grille), colonne 2, ligne 1
grid_write 1,1,3,"Centré" :      ' Ecrit "Centré" dans la grille, colonne 3, ligne 1
grid_write 1,1,4,"Droite" :      ' Ecrit "Droite" en c:4, l:1

'
' Boucle de remplissage de la grille
'
for Compteur%=1 to 9 : ' Faire 9 fois la boucle en utilisant la vraible Compteur% de 1 à 9
  Align(1,str$(Compteur% ),"G",80) : Grid_Write 1,Compteur%+1,1,Align_return$ : ' Affiche le compteur dans la grille, dans la colonne 1
  Chaine$=Chaine$+str$(Compteur% ) : ' Fabrique la chaine qui servira pour le test
  Align(1,Chaine$,"G",80)          : Grid_Write 1,Compteur%+1,2,Align_return$ : ' Affiche la chaine alignée à gauche dans la colonne 2
  Align(1,Chaine$,"C",80)          : Grid_Write 1,Compteur%+1,3,Align_return$ : ' Affiche la chaine centrée dans la colonne 3
  Align(1,Chaine$,"D",80)          : Grid_Write 1,Compteur%+1,4,Align_return$ : ' Affiche la chaine alignée à droite dans la colonne 4
next Compteur%      : ' Fin de la boucle, recommencer jusqu'à ce que compteur% soit plus grand que 9

end : ' Fin du programme

'
' ------------------------------------------------------------------------------
' Procédure de gestion de l'alignement dans un objet quelconque
'  No%    est le numéro de l'objet dans lequel on veut écrire
'  T$      est le texte que l'on veut y écrire
'  Align$  est le type d'alignement demandé
'                          "C" correspond à centré
'                          "D" correspond à un alignement à droite
'                          "G" est l'alignement par défaut (à gauche)
'  WC%    largeur disponible de l'objet
' ------------------------------------------------------------------------------
'
Sub Align(No%,T$,Align$,WC%)
  Dim_Local sp%,x%,t%        : ' Définition des variables locales
  If Variable("Align_return$")=0 then Dim Align_return$ : ' On doit définir une variable globale pour retourner la chaine calculée
  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

  ' Teste si l'on a demandé un affichage centré
  If Align$="C"
    ' *** bug dans Panoramic ***  x% = int((w%-sp%-t%)/sp%/2)
    x% = int((WC%-sp%-t%)/sp%*2)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
  Else
    ' Teste si l'on a demandé un affichage à droite
    If Align$="D" Then x% = int((WC%-sp%-t%)/sp%)  : ' Calcul du nombre d'espaces à ajouter devant la chaine
  End_If
  if x% > 0 then T$ = string$(x%," ")+T$ : ' On ajoute les espaces devant la chaine (0 si alignement à gauche)
  Align_return$ = T$  : ' On place la chaine modifiée dans la chaine de retour
End_Sub

Là, le code de la fonction est court et lisible. Les paramètres d'appel sont courts. Pas évident que prévoir tous les cas d'objets apporterait un plus, mais c'est juste mon opinion
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Justfication à droite et centrage de textes   Jeu 1 Nov 2012 - 16:28

A mon avis, ça ne sert à rien de prévoir tous les types d'objets. Pour ma part, je préfère une fonction simple qui retourne une chaine de caractères qui, une fois envoyée à sa destination, apparaîtra cadrée selon ce que je veux. Cela pourrait être une zone rectangulaire que je choisis dans un picture pour y apposer une légende, ou une édition sur papier via mes fonctions de gestion d'imprimante, etc. La procedure Align() telle que je l'ai mise dans KGF_SUB.bas, est beaucoup plus générale et peut servir à des besoins très divers. Y compris le cadrade de textes dans un grid, mais c'est juste un cas particulier.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

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

MessageSujet: re   Ven 2 Nov 2012 - 1:03

Le premier regroupement concerné un grid car on a souvent
une colonne entière avec le même alignement .

La deuxième intervention était pour rappeler l'existence de la commande
Object_type(N) qui pouvait en ce cas être utilisé.

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

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Ven 2 Nov 2012 - 1:48

Tu as raison de donner ton avis et d'organiser tes programmes comme tu en as envie Wink
Après on partage ou pas ta façon de voir, mais le fait que tu donnes ton avis est bien car ça permet d'avoir une vision des choses et de réfléchir sous cet angle, même quand on adhère pas Very Happy
A quoi servirait un avis si tout le monde était d'accord ?
Personnellement quand on travaille sur les grille avec des alignement, je ferais la procédure
Grid_Align_Column(No%,LD%,LF%,C%,Align$,WC%)
No%=> Numero de la grille, LD%: ligne de début, LF%: ligne de fin, C%: la colonne concernée, Align$: Type d'alignement et WC%, la taille de la colonne
T$ disparait puisque fait à partir du contenu de la grille.
Mais bon, ce type de procédure n'est interessant que dans certains cas puisque la justification n'est pas gardée. Il faut donc utiliser une fonction Align à chaque écriture pour que l'affichage reste correct.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Justfication à droite et centrage de textes   Ven 2 Nov 2012 - 1:50

J'ai ajouté une fonction de cadrage dérivée dans KGF_SUB.bas:

AlignEX(T$,Alignement$,WC%,police$,taille%,gras%)

Cette fonction n'a plus besoin d'un numéro d'objet pour ses calculs. Elle crée automatiquement un ALPHA et lui applique la police, la taille et éventuellement l'attribut "gras". Ensuite, le cadrage sera fait par rapport à cet objet interne, et le résultat sera retournée dans la variable AlignEX$. Finalement, l'objet ALPHA interne est supprimé.

KGF_SUB.bas et demo_KGF_SUB.bas sont mis à jour. Et comme il s'agit de simples utilitaires, KGF.dll n'est pas en cause et n'a donc pas changé. Il n'est pas non plus nécessaire de charger KGF.dll ou d'utiliser KGF_initialize() pour se servir des procédures Align et AlignEX.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: Justfication à droite et centrage de textes   Ven 2 Nov 2012 - 1:54

@Jicehel:
Regarde mon utilitaire ebay_ventes.bas. Je fais cela: je cadre systématiquement tous les montants à droite, et cela donne une belle présentation dans un GRID. Les textes (libellés etc) restent cadrés à gauche.

Dans la rubrique des souhaits d'amélioration, j'avais suggéré des fonctions de cadrage, en particulier pour les grid. On verra bien. En attendant, les eux fonctions Align et AlignEX permettent de faire beaucoup de choses !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Justfication à droite et centrage de textes   Ven 2 Nov 2012 - 1:57

Oui, pour moi, cela suffit, je pense. Mais en effet, si les cellule des grille pouvaient garder leur propre propriétés d'alignement, ce serait plus simple encore.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Justfication à droite et centrage de textes   

Revenir en haut Aller en bas
 
Justfication à droite et centrage de textes
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Création de boutons avec images et textes dessinés
» Volume Basses trop Fort comparé aux touches mains droite
» son main droite bk7m avec roland fr1 b
» Bruit étrange dans le moteur près de la roue avant droite
» boutons main droite

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: