begin process at 2012 02 16 22:55:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > GESTION DYNAMIQUE DES ITEMS - BIEN PLUS INTERESSANT QUE LES TABLEAUX DYNAMIQUES

GESTION DYNAMIQUE DES ITEMS - BIEN PLUS INTERESSANT QUE LES TABLEAUX DYNAMIQUES


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :TABLEAU, DYNAMIQUE, ITEM, VARIABLE, ASIMENGO Niveau :Initié Date de création :15/10/2008 Vu / téléchargé :4 408 / 480

Auteur : asimengo

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Tout le monde a recours dans la programmation à des tableaux dynamiques, besoin de validation de valeurs/paramètres et pourquoi pas faire du rangement dans ses variables.

Cette DLL que je viens de coder pour mes besoins personnels je me demande bien comment je pourrais encore programmer sans elle, tellement elle a des possibilités infinies et comme toujours je l'ai conçu en prenant compte de beaucoup de considérations dont les exigences sont la simplicité, l'efficacité et l'interactivité.


Le principe est simple.
Les Items sont stockés en 4 variables (Catégorie, Nom, Type, Valeur)
Ce qui signifie que les Items peuvent avoir le même nom mais dans 2 catégories différentes. Le système contrôlera que la valeur envoyé est conforme au Type (Texte, Numérique, Date/Heure, Booléen)
Pour toute opération sur un item il faut associer le couple (Nom, Catégorie).
Toute affectation sur une catégorie existante entraine la modification, meme si AddItem est invoqué.

Il est possibles de supprimer un item comme toute sa catégorie, il est possible de réinitialiser un item ou toute sa catégorie.

La méthode ItemsValues s'applique à une catégorie et permet de recevoir la liste des Items initialisés, on peut au besoin recevoir les informations sur les noms, les types et les valeurs.

on peut bien évidemment lire simplement un item, savoir s'il a été initialisé.

La méthode ValidateItems permet de faire valider une liste de variables par l'utilisateur. On peut décider si l'utilisateur peut valider la liste s'il existe des items vides ou pas.

NB : Pour mon développement personnel, l'utilisateur choisit les couleurs de ses interfaces, et ne travaillant qu'avec des composants personnalisés, j'adapte mes objets à mes besoins, ce qui signifie que le paramètre BackColor ne sera probablement pas utile pour vous.

Je m'arrêtes là, je vous laisse le soin de parcourir et de me faire vos commentaires surtout sur les limites de cet objet.

Il pourrait avoir quelques manquements dans le code, je sais avoir la mauvaise habitude de ne pas revenir sur mes sources mais en général je m'en rend compte en utilisant des petites omissions. Mais je serai très ravis d'avoir le retour de vos tests afin de pouvoir l'optimiser.

Source

  • 'Je vais juste lister les propriétés et méthodes et parleront d'elles même.
  • 'Types
  • '-----
  • Public Enum EnumItemDataType
  • meTexte = 1
  • meNumeric = 2
  • meDateTime = 3
  • meBoolean = 4
  • meUnknown = -1
  • End Enum
  • 'Propriétés
  • '-----------
  • Public Property Get DefaultItemType() As EnumItemDataType
  • Public Property Let DefaultItemType(ByVal peDefaultItemType As EnumItemDataType)
  • Public Property Get Item(ByVal psItemName As String, Optional ByVal psCategory As String) As Variant
  • Public Property Let Item(ByVal psItemName As String, Optional ByVal psCategory As String, ByVal pvItemValue As Variant)
  • Public Property Get ItemsCount(Optional ByVal psCategory As String) As Long
  • Public Property Get ItemIndex(ByVal psItemName As String, Optional ByVal psCategory As String) As Long
  • 'Méthodes
  • '--------
  • Public Sub AddItem(ByVal psItemName As String, Optional ByVal psCategory As String, Optional ByVal pvItemValue As Variant, Optional peItemType As EnumItemDataType = meTexte)
  • Public Function IsItemInitialized(ByVal psItemName As String, Optional ByVal psCategory As String) As Boolean
  • Public Sub ValidateItems(Optional ByVal psCategory As String, Optional ByVal plCaptionWidth As Long = m_def_CaptionWidth, Optional ByVal pnBackColor As OLE_COLOR = &H8000000F, Optional ByVal pbItemNullAllow As Boolean = True)
  • Public Property Get ItemsValues(Optional ByVal psCategory As String, Optional ByRef paItemsNames As Variant, Optional ByRef paItemsTypes As Variant) As Variant
  • Public Sub ClearValues(Optional ByVal psCategory As String, Optional ByVal psItemName As String)
  • Public Sub RemoveItems(Optional ByVal psCategory As String, Optional ByVal psItemName As String)
'Je vais juste lister les propriétés et méthodes et parleront d'elles même.

'Types
'-----
Public Enum EnumItemDataType
    meTexte = 1
    meNumeric = 2
    meDateTime = 3
    meBoolean = 4
    meUnknown = -1
End Enum

'Propriétés
'-----------
Public Property Get DefaultItemType() As EnumItemDataType

Public Property Let DefaultItemType(ByVal peDefaultItemType As EnumItemDataType)

Public Property Get Item(ByVal psItemName As String, Optional ByVal psCategory As String) As Variant

Public Property Let Item(ByVal psItemName As String, Optional ByVal psCategory As String, ByVal pvItemValue As Variant)

Public Property Get ItemsCount(Optional ByVal psCategory As String) As Long

Public Property Get ItemIndex(ByVal psItemName As String, Optional ByVal psCategory As String) As Long


'Méthodes
'--------
Public Sub AddItem(ByVal psItemName As String, Optional ByVal psCategory As String, Optional ByVal pvItemValue As Variant, Optional peItemType As EnumItemDataType = meTexte)

Public Function IsItemInitialized(ByVal psItemName As String, Optional ByVal psCategory As String) As Boolean

Public Sub ValidateItems(Optional ByVal psCategory As String, Optional ByVal plCaptionWidth As Long = m_def_CaptionWidth, Optional ByVal pnBackColor As OLE_COLOR = &H8000000F, Optional ByVal pbItemNullAllow As Boolean = True)

Public Property Get ItemsValues(Optional ByVal psCategory As String, Optional ByRef paItemsNames As Variant, Optional ByRef paItemsTypes As Variant) As Variant

Public Sub ClearValues(Optional ByVal psCategory As String, Optional ByVal psItemName As String)

Public Sub RemoveItems(Optional ByVal psCategory As String, Optional ByVal psItemName As String)

 Conclusion

J'ai inclut la DLL cette fois pour ceux qui n'ont pas VB.

Je pense devoir beaucoup à ce site pour avoir aider de passer de Access à VB, alors quand je suis trop absent je pense à ajouter des sources utiles venant de mes plus recents travaux, mais pas tous, c sûr, lol.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture INTEGRATION AUTOMATIQUE DE LA ROULETTE/MOLETTE DE LA SOURIS ...
Source avec Zip Source avec une capture DECOMPOSITION SQL - ALGORITHME SIMPLE ET EFFICACE
Source avec Zip Source avec une capture DLL POUR EXECUTER LES FONCTIONS ET PROCEDURES EXTERNES A TON...
Source avec Zip Source avec une capture UTILISATION INTELLIGENTE DE WORD POUR REALISER LES ETATS
Source avec Zip Source avec une capture REQUETEUR DE BASE DE DONNEES TRES SIMPLE D'UTILISATION ET TR...

 Sources de la même categorie

Source avec Zip TEXTBOX EN NUMÉRIQUE par 320C
Source avec Zip DÉCIMAL TO HEXDECIMAL par loulou27200
SOUS-TITRES : INCRÉMENTATION DE TOUTES LES CHAÎNES DE CARACT... par ALMIRA
Source avec Zip Source avec une capture EVALUER UN NOMBRE D'OBJETS AVEC UNE BALANCE ET DEUX ÉCHANTIL... par lexsty
Source avec Zip Source avec une capture PETIT LOGICIEL DE DEVIS SANS BD par lololilizozo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE MÉMOIRE CLASSIQUE par raffika
Source avec une capture [VB6] TRANSMETTRE UN TABLEAU PAR PROCÉDURE par magicgus
Source avec Zip Source avec une capture Source .NET (Dotnet) JEU DE PENDU (COUIC 1 DE +) par tresorsdevie
Source .NET (Dotnet) COMPRESSION par amine_hassini
TOUT SUR LES TABLEAUX DYNAMIQUES par Xentor

Commentaires et avis

Commentaire de asimengo le 15/10/2008 21:20:18

J'allais oublier un élément plutôt très utile. L'utilisateur peut saisir des expressions directement dans les textbox si le cas se presente et le système fera le calcul il suffit de précéder le texte par "=".
Par exemple =Now() donne la date/heure de l'instant, =Date() la date du jour, toute autre forme de calcul est possible, =15 + sin(34) + .....

J'ai donc un petit bout de code qui permet d'évaluer toute forme d'expressions en utilisant le language de script.

Commentaire de asimengo le 16/10/2008 13:54:44

Je ne suis pas toujours tres complet pour expliquer mes sources, mais il faut noter que je traite également de facon tres simple et aise le probleme de form avec contrôles dynamiques. Les contrôles sont construits en fonction du nombre d'items dans le form et le dimensionnement de la form est consequent. Le resize automatique de toute la form y est traité y est traité et il montre une des méthodes simples pour le faire. Il n'est pas important pour le resize de se lancer dans des calculs vectorielles, il faut delimiter la form en secteur en utilisant soit des picturebox, soit des frames, ... et avoir une vue d'ensemble pour le resize plutot qu'un resize vectoriel sur chaque contrôle.

Pour mon usage personnel je n'utilise que des form à contrôles dynamiques, toute la structure de la form se trouve dans une table, et on peut indiquer le nombre de colonnes, scroll auto.

C'est important de le préciser afin d'y jeter un coup d'oeil si ca peut être utile.

A+

Commentaire de asimengo le 16/10/2008 14:25:25

Je prends le cas de tables de references dans une applis, en général pour ce cas on a besoin que Ajouter/Modifier/Supprimer/Visualiser, de ce fait on peut aisement penser le faire avec des forms dynamiques.

Les informations des champs de tables sont etockes dans une table ainsi que le comportement de chaque (caption, required, rowsource, AutoIncrement, LimitToList, InputMask, ....). Soit au départ on charge tous les champs avec instruction du genre moClsItems("<Nom propriete>", "<Nom Table>/<Nom Champ>") = ..., soit on le fais a la demande de lutilisateur.

Mais pour ne pas recharger une table 2 fois, il suffit de stocker moClsItems.AddItem "<Nom Table>","DEJA LU", True, meBoolean et apres il suffira de il suffira de tester if moClsItems(<Nom Table>, "DEJA LU") Then Call InitTable (<Nom Table>).

Comme je disais il y'a des possibiliés infinie d'utilisation.

De même supposons que pour un logiciel de cotation (voir facturation, mais pas tout a fait) par exemple, on a des rubriques qui dependent des fonctions voir une petite illustration dans ma source http://www.vbfrance.com/codes/DLL-EXECUTER-FONCTIONS-PROCEDURES-EXTERNES-TON-APPLI-MEME_47010.aspx on peut utiliser cette DLL pour faire valider les valeurs par l'utilisateur.
De ce fait pour chaque rubrique de cotation ou de facturation (les 2 sont possibles) d'associer dans leur table un champs formule de calcul qui sera quelque du genre "[%_Poids]*[%_Taux]" ou encore plus complexe une vrai fonction en language de script. Il suffit d'analyser le texte pour rechercher les paramètres, dans mon cas tous les mots entre "[%_" et "]" rien de plus simple qu'une petite fonction Public Function SplitSNA(ByVal psText As String, ByVal psLeftSeparator As String, ByVal psRightSeparator As String) As Variant, tous les parametres sont passes controles dans moClsItems pour voir si elles sont déjà initialisées sinon utiliser ValidateItems pour que l'utilsateur les renseigne.
Apres il suffit d'utiliser une boucle elementaire pour remplacer les variables dans le texte par les valeurs. Reste plus qu'à utiliser la fonction Public Function EvalExpression(ByVal psExpression As String, Optional ByVal psLanguage = "VBScript", Optional ByVal peType As EnumDataTypeSimplified = meTexte) As Variant
se trouvant dans cette source pour faire le calcul.

La fonction SplitSNA est aussi simple que ceci:
Public Function SplitSNA(ByVal psText As String, ByVal psLeftSeparator As String, ByVal psRightSeparator As String) As Variant
Dim lPosDebut As Long, lPosFin As Long, sArray As String

    lPosDebut = InStr(psText, psLeftSeparator)
    Do While lPosDebut > 0
        psText = Mid(psText, lPosDebut + Len(psLeftSeparator))
        lPosFin = InStr(psText, psRightSeparator)
        If lPosFin <> 0 Then
            sArray = sArray & psLeftSeparator & psRightSeparator & Left(psText, lPosFin - 1)
            lPosDebut = InStr(lPosFin + 1, psText, psLeftSeparator)
        Else
            Exit Do
        End If
    Loop
    SplitSNA = Split(Mid(sArray, Len(psLeftSeparator & psRightSeparator) + 1), psLeftSeparator & psRightSeparator)
End Function

Voila assez expliqué pour être bien clair sur les possibilités d'aide de celle DLL et les grands de son utilisation chez moi.

A+
ASIMENGO

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

graphique dynamique [ par tery ] salut a tous.j essaie de faire un genre de graphique dynamique mais je ne sais pas comment m y prendre.En gros, je pioche des valeurs contenu dans un tableau de chaine...subtile. [ par rurouni ] bon, je suis pas encore le pro du VB...donc je vous pose mon probleme...J ai declare un tableau de string comme ca:Dim tab_str(10) As String * 9pour a variable dynamique.... oups sa existe en vb ???? + NT [ par cyrille ] salut, je commence a programme en vb6 (j'ai l'habitude avec PHP) je suis en train de cree un soft et j'ai besoin de quelque eclairsissement-FIRST :j'a Problème à la con avec tableau dynamique [ par Misutsu ] Salut tout le monde !!!Voilà, j'ai jamais tester avant de tableau dynamique, mais là j'en ai un besoin vital, voici en gros ce que j'ai tapoté : dim t tableau dynamique [ par Hutch ] Je voudrais savoir comment ajouter par une boucle, 2 variables à 1 tableau à 2 colonnes.Lorsque le tableau est rempli, comment le visualiser sur une Un probleme de tableau !!!!!! [ par coco ] J'ai un nom dans une variable. Je souhaite creer un tableau qui ait le nom de cette variable. sachant que le contenu de la variable varie.c'est un cod Variable dynamique !!!! [ par pingwee ] j'ai une boucle du styleWhile i &lt; 10i=i+1wenddans la boucle, il faudra que je puisse voir le contenue de la valeur mavar1,mavar2,mavar3...en rempla Tableau dynamique privée de type object qui contient un tableau dynamique d'un autre type objet [ par Charlie ] Allo...C'est un peu compliquer mon affaire de tableau. Je travaille sur une classe gérant des images.Chaque image est composé d'objets. Une image a de pb de variable [ par eryk17 ] j'ai déclaré et rempli un tabeau de type structure dans le formulaire1, sur un 2e formulaire je veux utiliser ce tableau dans une fonction mais il ne Gestion dynamique de form [ par fieldy8 ] Bonjour,je desirerai faire une gestion dynamique de formj'ai une form et une sous-form ma sous-form est de type tableau mais je voudrai pouvoir choisi


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales