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 filtrés paramétrables Emptypar Pedro Hier à 10:37

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

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

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

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

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

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

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

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

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

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

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

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

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

» fichier.exe
Des EDIT filtré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
-47%
Le deal à ne pas rater :
SAMSUNG T7 Shield Bleu – SSD Externe 1 To à 89,99€
89.99 € 169.99 €
Voir le deal

 

 Des EDIT filtrés paramétrables

Aller en bas 
3 participants
AuteurMessage
Klaus

Klaus


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

Des EDIT filtrés paramétrables Empty
MessageSujet: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyMer 13 Nov 2013 - 0:56

Après avoir réussi ce que je croyais impossible en Panoramic: faire une SUB intégrable par #INCLUDE, sans avoir besoin de gérer quelque chose de particulier dans le programme application, mais surtout en filtrant la saisie selon un jeu de caractères choisi pour chaque EDIT, j'ai intégré tout ça dans le fichier KGF_OBJ.bas que j'ai mis à disposition sur mon WebDav, dossier DLLs, sous-dossier KGF_SUB.

En voici une petite démo pour en montrer la portée. Pour simplifier les choses pour ce poste, j'ai extrait les procédures correspondantes à cette démo du fichier KGF_OBJ.bas et je les ai intégrées dans le source directement. Les libellés des champs indiquent ce qui est possible de saisir. Essayez de le prendre en défaut...

Code:
dim no%              : ' pour pouvoir définir les objets automatiquement
dim no_container%    : ' numéro d'objet du container

dim chiffres$ : chiffres$ = "01234567890"
dim MF$      : MF$      = "MmFf"

xAlpha(10,10,0,10,"Chiffres uniquement:")
xEditFilter(10,150,80,0,0,chiffres$)

xContainer(40,10,400,200,"Un container") : no_container% = no%

xAlpha(20,20,no_container%,10,"M,F,m,f uniquement:")
xEditFilter(20,180,30,no_container%,0,MF$)

xAlpha(50,20,no_container%,10,"Affichage uniquement:")
xEdit(50,180,100,no_container%,1)
text no%,"Coucou !"

end





' *********************************************
' *    procédures extraites de KGF_OBJ.bas    *
' *********************************************
' 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,parent,font_size,caption)
sub xAlpha(t%,l%,p%,s%,c$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : alpha no% : font_size no%,s%
    if p%>0 then parent no%,p%
    top no%,t% : left no%,l% : caption no%,c$
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,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),""        : ' on crée une ligne vide dans une 3ème liste
  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),filter_n%,""
    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
      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 !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyMer 13 Nov 2013 - 1:03

Bien! Mais lorsqu'on écrit un nombre, et qu'on tape une lettre, le caret_position n'est pas rétabli. On se retrouve devant. Je ne pense pas que ce soit voulu.
Maintenant Sleep 
Revenir en haut Aller en bas
Klaus

Klaus


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

Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyMer 13 Nov 2013 - 1:26

Tu as raison, Cosmos70. Je n'avais pas du tout saisi cette histoire de caret_position. Voilà qui est corrigé: quelque soit l'endroit auquel on saisit un caractère rejeté, le curseur reste exactement à cet endroit, que ce soit à la fin de la saisie ou en plein milieu du texte déjà présent. Vive les critiques constructives :

Code:
dim no%              : ' pour pouvoir définir les objets automatiquement
dim no_container%    : ' numéro d'objet du container

dim chiffres$ : chiffres$ = "01234567890"
dim MF$      : MF$      = "MmFf"

xAlpha(10,10,0,10,"Chiffres uniquement:")
xEditFilter(10,150,80,0,0,chiffres$)

xContainer(40,10,400,200,"Un container") : no_container% = no%

xAlpha(20,20,no_container%,10,"M,F,m,f uniquement:")
xEditFilter(20,180,30,no_container%,0,MF$)

xAlpha(50,20,no_container%,10,"Affichage uniquement:")
xEdit(50,180,100,no_container%,1)
text no%,"Coucou !"

end





' *********************************************
' *    procédures extraites de KGF_OBJ.bas    *
' *********************************************
' 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,parent,font_size,caption)
sub xAlpha(t%,l%,p%,s%,c$)
  if variable("no%")=0 then dim no%
  no% = no% + 1 : alpha no% : font_size no%,s%
    if p%>0 then parent no%,p%
    top no%,t% : left no%,l% : caption no%,c$
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,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),""        : ' on crée une ligne vide dans une 3ème liste
  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),filter_n%,""
    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 !
EDIT

Correction faite selon la remarque de Papydall !


Dernière édition par Klaus le Mer 13 Nov 2013 - 9:00, édité 2 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyMer 13 Nov 2013 - 2:32

Salut Klaus
Très bonne idée !
Dans ton dernier code, lorsqu’on tape une lettre au lieu d’un chiffre (ou le contraire, un chiffre au lieu d’une lettre), on obtient un message d’erreur (29)Not correct arithmetic expression : line 94
En supprimant purement et simplement cette ligne, tout entre en ordre.

Des EDIT filtrés paramétrables U_THIN%7E1 Et maintenant si on envisage la question dans l’autre sens : Afficher n’importe quel caractères sauf ceux du filtre ?
Par exemple accepter tout caractère qui N’EST PAS une voyelle accentuée (é,è).

PS :
CARET_POSITION N,P est une commande et non une fonction, de sorte que l’on ne peut pas faire : filter_i% = caret_position number_change lol!
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyMer 13 Nov 2013 - 7:20

Bonjour à tous! Smile 
Pour filtrer des caractères dans un edit, moi je ferais comme ça. Après, je pense que c'est facilement adaptable avec une sub dans laquelle il suffit de passer le numéro d'edit et la liste des caractères à filtrer.
Code:
label edite
dim L$,R$,list$,curs
   list$="0123456789.+-*/=()":' liste des caractères autorisés dans l'edit
   edit 1:set_focus 1:on_change 1,edite
end

edite:
   L$=""
   if len(text$(1))>1 then L$=left$(text$(1),len(text$(1))-1)
   R$=right$(text$(1),1)
   curs=instr(list$,R$)
   if curs=0 then text 1,L$:caret_position 1,len(text$(1))
return
A+ Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


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

Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyMer 13 Nov 2013 - 9:04

Merci, Papydall, pour le test. J'ai fait la correction dans le source ci-dessus, et dans KGF_SUB sur mon WebDav.

Ceci dit, curieusement, je n'ai pas cette erreur dont tu parles, en utilisant la version V0.9.25i4 . La ligne semble tout simplement ignorée. Et en fait, elle est inutile puisque filter_i% contient déjà justement la position du caractère en erreur - quel étoutdi je suis !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
bignono

bignono


Nombre de messages : 1127
Age : 67
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyMer 13 Nov 2013 - 13:03

Bon, je me suis aperçu que l'on pouvait introduire un caractère interdit si on bougeait le curseur de place avec les flèches gauche ou droite ou en cliquant n'importe où dans l'édit. Du coup, j'ai revu ma copie!
Mais ça reste à perfectionner quand-même.
Code:
label edite
dim C$,L$,R$,V$,q,i,n%
   V$="0123456789.+-*/=()":' liste des caractères autorisés dans l'edit
   n%=1
   edit n%:set_focus n%:on_change n%,edite
end

edite:
   L$="":R$=""
   for i=1 to len(text$(n%))
      C$=mid$(text$(n%),i,1)
      q=instr(V$,C$)
      if q=0 then exit_for
   next i
   L$=left$(text$(n%),i-1)
   if len(text$(n%))>i then R$=right$(text$(n%),len(text$(n%))-i)
   text 1,L$+R$:caret_position 1,len(text$(n%))
return

A+ Wink Wink Wink
Revenir en haut Aller en bas
Klaus

Klaus


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

Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyVen 15 Nov 2013 - 23:03

@Papydall (suite à ton post du 13/11/2013 à 2h32)

Les notes de Jack concernant la version 0.9.25i4 contiennent ceci:
Citation :
CARET_POSITION(N) : retourne la position du curseur (en caractères) de l'objet système numéro N
Attention, pour le moment, cette fonction n'est valable que pour un EDIT
Donc, contrairement à ce que tu dis:
Citation :
PS :
CARET_POSITION N,P est une commande et non une fonction, de sorte que l’on ne peut pas faire : filter_i% = caret_position number_change lol!
cette fonction existe bien et on peut l'utiliser !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables EmptyVen 15 Nov 2013 - 23:19

Salut Klaus

Ce que tu as écrit est juste.
Je m’étais induis en erreur parce que moi j’utilise encore la version 25i2 qui ne reconnait pas cette fonction.
Mes excuses !
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Contenu sponsorisé





Des EDIT filtrés paramétrables Empty
MessageSujet: Re: Des EDIT filtrés paramétrables   Des EDIT filtrés paramétrables Empty

Revenir en haut Aller en bas
 
Des EDIT filtrés paramétrables
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Des EDIT masqués paramétrables
» Operation d'Edit
» vider un edit
» Grille d'Edit
» List et Edit

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: