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.
Des EDIT masqués paramétrables Emptypar Pedro Hier à 10:37

» Un autre pense-bête...
Des EDIT masqués paramétrables Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Des EDIT masqués paramétrables Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Des EDIT masqués paramétrables Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Des EDIT masqués paramétrables Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Des EDIT masqués paramétrables Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Des EDIT masqués paramétrables Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Des EDIT masqués paramétrables Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Des EDIT masqués paramétrables Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Des EDIT masqués paramétrables Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Des EDIT masqués paramétrables Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Des EDIT masqués paramétrables Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Des EDIT masqués paramétrables Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Des EDIT masqués paramétrables Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Des EDIT masqués paramétrables 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

 

 Des EDIT masqués paramétrables

Aller en bas 
AuteurMessage
Klaus

Klaus


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

Des EDIT masqués paramétrables Empty
MessageSujet: Des EDIT masqués paramétrables   Des EDIT masqués paramétrables EmptyJeu 14 Nov 2013 - 2:32

Basé sur mon code pour des EDIT filtrés paramétrables, j'ai fait une version qui permet d'imposer des maques de saisie sur un EDIT. Quelques exemples simples: une date en format jj/mm/aaa, un numéro de sécurité sociale etc.

J'ai donc ajouté une sub xEditMask à KGF_OBJ.bas. Le principe, c'est de donner une chaîne de caractères représentant un masque de saisie, et optionnellement une chaîne de caractères donnant un jeu de caractères choisi par l'utilisateur. Plusieurs règles s'appliquent alors, pour le contrôle de la saisie:
1. on ne peut saisir qu maximum que le nombre de caractères contenus dans le masque. Tout caractère saisi au-delà sera écarté.
2. chaque position d'un caractère saisi doit corrspondre au contenu du masque appliqué.
3. le masque contient des caractères spéciaux déterminant le jeu de caractères autorisé à chaque position. Ceux-ci sont:
'   9 = chiffre 0...9
'   A = lettre majuscule ou espace
'   a = lettre minuscule ou espace
'   $ = lettre minuscule ou majuscule ou espace
'   X = code hexadécimal en majuscules
'   x = code hexadécimal en minuscules
' * = tout caractère
'   U = contenu du paramètre userset
4. tout caractère du masque autre que les caractères spéciaux doivent être saisis tels quels, à leur position respective

Le caractère spécial * permet en particulier de faire un EDIT limité à une longueur maximale, sans autres limitations.

Je pense qu'avec xEditFilter et xEditMask, j'ai apporté une nouvelle fonctionnalité vraiment intéressante à Panoramic. Pensez qu'il suffit maintenant d'une seule ligne de code pour définir un champ EDIT qui impose la saisie d'une date en format correct. I n'y a plus qu'à contrôler la valeur de la date, mais plus son format ! Et le tout 100 Panoramic, sans DLL !

Et voici une petite démo, évidemment non exhaustive:
Code:

' KGF_OBJ.bas

' Ce fichier implémente la création normalisée d'objets visuels.
' Il n'y a rien d'autre à insérer dans le programme.

' ############# ici, le #INCLUDE KGF_OBJ.bas contenant tout ce qui suit #########
' ===============================================================================
' interface de procédures autour de KGF.dll
' Auteur: Klaus
'
' Objets géré:
'   alpha  edit  button  combo  container   container_option
'   memo   list  check   image  scene2d     scene3d

' =============== dipatching des fonctions ====================================
message "KGF: on ne peut pas executer ce module directement !"
terminate


' paramètres: (top,left,width,height,caption)
sub xContainer(t%,l%,w%,h%,c$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : container no%
    top no%,t% : left no%,l% : width no%,w% : height no%,h%
    caption no%,c$
end_sub

' paramètres: (top,left,width,height,parent,caption)
sub xContainer_Option(t%,l%,w%,h%,p%,c$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : container_option no%
    top no%,t% : left no%,l% : width no%,w% : height no%,h%
    caption no%,c$
    if p%>0 then parent no%,p%
end_sub

' paramètres: (top,left,parent,fontsize,caption)
sub xAlpha(t%,l%,p%,s%,s$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : alpha no%  : caption no%,s$
    font_size no%,s%
    top no%,t% : left no%,l%
    if p%>0 then parent no%,p%
end_sub

' paramètres: (top,left,width,parent,inactive)
sub xEdit(t%,l%,w%,p%,a%)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : edit no%
    top no%,t% : left no%,l% : width no%,w%
    if p%>0 then parent no%,p%
    if a%=1 then inactive no%
end_sub

' paramètres: (top,left,width,parent,inactive,mask,userset)
' mask est un masque de saisie
' userset est un jeu de caractères donné par l'utilisateur.
' Les caractères suivants représentent des jeux de caractères spéciaux:
'   9 = chiffre 0...9
'   A = lettre majuscule ou espace
'   a = lettre minuscule ou espace
'   $ = lettre minuscule ou majuscule ou espace
'   X = code hexadécimal en majuscules
'   x = code hexadécimal en minuscules
'   * = tout caractère
'   U = contenu du paramètre userset
' tous les autres caractères sont imposés tels quels à leur place
' Exemples:
'   numéro de sécurité sociale: 9.99.99.999.999.99
'   Nom propre: A$$$$$$$
'   Numéro de téléphone: 09U99U99U99U99  avec userset = " ."
sub xEditMask(t%,l%,w%,p%,a%,m$,u$)
  if m$<>""   : ' au premier appel, création de tout ce qu'il faut
    if variable("mask_list%")=0
      dim mask_list%(3),   mask_temp$, mask_n%
      dim mask_c$, mask_ci%, mask_set$
      dim mask_i%, mask_m$, mask_s$
      dim mask_codes$ : mask_codes$ = "9Aa$Xx*U"
      dim mask_masks$(7)
      mask_masks$(1) = "01234567890"
      mask_masks$(2) = "ABCDEFGHIJKLMNOPQRSTUVWXYZ "
      mask_masks$(3) = "abcdefghijklmnopqrstuvwxyz "
      mask_masks$(4) = mask_masks$(2) + mask_masks$(3)
      mask_masks$(5) = mask_masks$(1) + "ABCDEF"
      mask_masks$(6) = mask_masks$(1) + "abcdef"
      mask_masks$(7) = u$
      no% = no% + 1 : dlist no% : mask_list%(1) = no%  : ' liste des numéros d'objet
      no% = no% + 1 : dlist no% : mask_list%(2) = no%  : ' liste des masques
      no% = no% + 1 : dlist no% : mask_list%(3) = no%  : ' liste des valeurs anciennes
    end_if
    if label("mask_change")=0 then label mask_change, mask_change_1
  end_if      : ' ici, on a fini de créer tout ce qu'il faut
  if variable("no%")=0 then dim no%
  no% = no% + 1 : edit no%
  top no%,t% : left no%,l% : width no%,w% : ' créer l'objet Panoramic
  if p%>0 then parent no%,p%              : ' autre parent que form 0 ?
  if a%=1 then inactive no%               : ' le EDIT doit être inactif au début ?
  if m$<>""                             : ' si un filtre est demandé, alors
    on_change no%,mask_change           : ' on utilise l'évènement On_CHANGE
    item_add mask_list%(1),str$(no%)    : ' on ajoute le numéro d'objet dans une 1ère liste
    item_add mask_list%(2),m$           : ' on ajoute le filtre dans une 2ème liste
    item_add mask_list%(3),""
  end_if                                : ' fin du traitement du filtre
end_sub
mask_change:                            : ' évènement ON_CHANGE sur EDITs maskqués
  mask_temp$ = str$(number_change)      : ' prendre le numéro de l'objet
  for mask_n%=1 to count(mask_list%(1))               : ' chercher cet objet dans la liste '
    mask_s$ = item_read$(mask_list%(1),mask_n%)
    if mask_temp$=mask_s$ then exit_for               : ' est-ce que l'objet est trouvé ?
  next mask_n%                                        : ' fin de recherche
  mask_temp$ = text$(number_change)                   : ' prendre le texte du EDIT
  if mask_temp$=""                                    : ' si le EDIT est vide:
    item_delete mask_list%(3),mask_n%                 : ' alors vider la ligne de la 3ème liste
    item_insert mask_list%(3),mask_n%,""
    return                                            : ' on a fini
  end_if
  mask_s$ = item_read$(mask_list%(2),mask_n%)         : ' prendre le masque
  for mask_i%=1 to len(mask_temp$)                    : ' pour tous les caractères du EDIT:
    if mask_i%>len(mask_s$)
      mask_s$ = item_read$(mask_list%(3),mask_n%)           : ' alors reprendre l'état précédent
      off_change number_change                              : ' désactiver ON_CHANGE
      text number_change,item_read$(mask_list%(3),mask_n%)  : ' remplacer le contenu de l'EDIT
      caret_position number_change,mask_i%-1                : ' restaurer la position du curseur
      on_change number_change,mask_change                   : ' réactiver le ON_CHANGE
      return
    end_if
    mask_c$ = mid$(mask_s$,mask_i%,1)                 : ' prendre le caractère du masque
    if instr(mask_codes$,mask_c$)=0
      if mid$(mask_temp$,mask_i%,1)<>mask_c$          : ' pas le bon caractère imposé ?
        mask_s$ = item_read$(mask_list%(3),mask_n%)           : ' alors reprendre l'état précédent
        off_change number_change                              : ' désactiver ON_CHANGE
        text number_change,item_read$(mask_list%(3),mask_n%)  : ' remplacer le contenu de l'EDIT
        caret_position number_change,mask_i%-1                : ' restaurer la position du curseur
        on_change number_change,mask_change                   : ' réactiver le ON_CHANGE
        return
      end_if
      goto mask_change_1
    end_if
    if mask_c$<>"*"
      mask_set$ = mask_masks$(instr(mask_codes$,mask_c$))     : ' prendre le bon jeu de caractères
      if instr(mask_set$,mid$(mask_temp$,mask_i%,1))=0        : ' est-ce que le car n'est pas dans le jeu ?
        mask_s$ = item_read$(mask_list%(3),mask_n%)           : ' alors reprendre l'état précédent
        off_change number_change                              : ' désactiver ON_CHANGE
        text number_change,item_read$(mask_list%(3),mask_n%)  : ' remplacer le contenu de l'EDIT
        caret_position number_change,mask_i%-1                : ' restaurer la position du curseur
        on_change number_change,mask_change                   : ' réactiver le ON_CHANGE
        return
      end_if
    end_if
mask_change_1:
  next mask_i%                                        : ' fin de la boucle sur le contenu de l'EDIT
  item_delete mask_list%(3),mask_n%                   : ' ici, tous les caractères sont valides,
  item_insert mask_list%(3),mask_n%,mask_temp$        : ' donc on sauvegarde le contenu de l'EDIT
  return                                              : ' ouf !

' paramètres: (top,left,width,parent,inactive,filtre)
sub xEditFilter(t%,l%,w%,p%,a%,f$)
  if f$<>""   : ' au premier appel, création de tout ce qu'il faut
    if variable("filter_list%")=0
      dim filter_list%(3),   filter_temp$, filter_n%
      dim filter_i%, filter_f$, filter_s$
      no% = no% + 1 : dlist no% : filter_list%(1) = no%  : ' liste des numéros d'objet
      no% = no% + 1 : dlist no% : filter_list%(2) = no%  : ' liste des filtres
      no% = no% + 1 : dlist no% : filter_list%(3) = no%  : ' liste des valeurs anciennes
    end_if
    if label("filter_change")=0 then label filter_change
  end_if      : ' ici, on a fini de créer tout ce qu'il faut
  if variable("no%")=0 then dim no%
  no% = no% + 1 : edit no%
  top no%,t% : left no%,l% : width no%,w% : ' créer l'objet Panoramic
  if p%>0 then parent no%,p%              : ' autre parent que form 0 ?
  if a%=1 then inactive no%               : ' le EDIT doit être inactif au début ?
  if f$<>""                             : ' si un filtre est demandé, alors
    on_change no%,filter_change         : ' on utilise l'évènement On_CHANGE
    item_add filter_list%(1),str$(no%)  : ' on ajoute le numéro d'objet dans une 1ère liste
    item_add filter_list%(2),f$         : ' on ajoute le filtre dans une 2ème liste
    item_add filter_list%(3),""
  end_if                                : ' fin du traitement du filtre
end_sub
filter_change:                          : ' évènement ON_CHANGE sur EDITs filtrés
  filter_temp$ = str$(number_change)    : ' prendre le numéro de l'objet
  for filter_n%=1 to count(filter_list%(1))           : ' chercher cet objet dans la liste '
    filter_s$ = item_read$(filter_list%(1),filter_n%)
    if filter_temp$=filter_s$ then exit_for           : ' est-ce que l'objet est trouvé ?
  next filter_n%                                      : ' fin de recherche
  filter_temp$ = trim$(text$(number_change))          : ' prendre le texte du EDIT
  if filter_temp$=""                                  : ' si le EDIT est vide:
    item_delete filter_list%(3),filter_n%             : ' alors vider la ligne de la 3ème liste
    item_insert filter_list%(3),""
    return                                            : ' on a fini
  end_if
  filter_s$ = item_read$(filter_list%(2),filter_n%)   : ' prendre le filtre
  for filter_i%=1 to len(filter_temp$)                : ' pour tous les caractères du EDIT:
    if instr(filter_s$,mid$(filter_temp$,filter_i%,1))=0    : ' est-ce que le car n'est pas dans le filtre ?
      filter_s$ = item_read$(filter_list%(3),filter_n%)     : ' alors reprendre l'état précédent
      off_change number_change                              : ' désactiver ON_CHANGE
      text number_change,item_read$(filter_list%(3),filter_n%)  : ' remplacer le contenu de l'EDIT
      caret_position number_change,filter_i%-1             : ' restaurer la position du curseur
      on_change number_change,filter_change                 : ' réactiver le ON_CHANGE
      return                                                : ' et sortir
    end_if
  next filter_i%                                      : ' fin de la boucle sur le contenu de l'EDIT
  item_delete filter_list%(3),filter_n%               : ' ici, tous les caractères sont valides,
  item_insert filter_list%(3),filter_n%,filter_temp$  : ' donc on sauvegarde le contenu de l'EDIT
  return                                              : ' ouf !

' paramètres: (top,left,width,parent,caption)
sub xButton(t%,l%,w%,p%,c$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : button no%
    top no%,t% : left no%,l% : width no%,w%
    if p%>0 then parent no%,p%
    caption no%,c$
end_sub

' paramètres: (top,left,width,parent,caption)
sub xOption(t%,l%,w%,p%,c$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : option no%
    top no%,t% : left no%,l% : width no%,w%
    if p%>0 then parent no%,p%
    caption no%,c$
end_sub

' paramètres: (top,left,parent)
sub xCombo(t%,l%,p%)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : combo no%
    top no%,t% : left no%,l%
    if p%>0 then parent no%,p%
end_sub

' paramètres: (top,left,width,height,parent,bar_horizontal,bar_vertical)
sub xMemo(t%,l%,w%,h%,p%,bh%,bv%)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : memo no%
    top no%,t% : left no%,l% : width no%,w% : height no%,h%
    if p%>0 then parent no%,p%
    if bh%>0 then bar_horizontal no%
    if bv%>0 then bar_vertical no%
end_sub
    
' paramètres: (top,left,width,height,parent)
sub xList(t%,l%,w%,h%,p%)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : list no%
    top no%,t% : left no%,l% : width no%,w% : height no%,h%
    if p%>0 then parent no%,p%
end_sub

' paramètres: (top,left,width,parent,caption)
sub xCheck(t%,l%,w%,p%,c$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : option no%
    top no%,t% : left no%,l% : width no%,w%
    if p%>0 then parent no%,p%
    caption no%,c$
end_sub

sub xPicture(t%,l%,w%,h%,p%)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : picture no%
    top no%,t% : left no%,l% : width no%,w%
    if p%>0 then parent no%,p%
end_sub

sub xScene2d(t%,l%,w%,h%,p%)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : picture no%
    top no%,t% : left no%,l% : width no%,w%
    if p%>0 then parent no%,p%
end_sub

sub xScene3d(t%,l%,w%,h%,p%)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : picture no%
    top no%,t% : left no%,l% : width no%,w%
    if p%>0 then parent no%,p%
end_sub

sub xSub_Menu(p%,c$)
  no% = no% + 1 : sub_menu no%
    parent no%,p%
    caption no%,c$
end_sub
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
 
Des EDIT masqués paramétrables
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Des EDIT filtrés paramétrables
» Grille d'Edit
» List et Edit
» Operation d'Edit
» bug sur l'edit du combo

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: