IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] developper un programme de loterie


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [VB6] developper un programme de loterie
    Bonjour,

    je suis nouvelle parmi vous et je souhaite qu'on passeras de bon moment.

    mon premier sujet concerne le developpement d'un programme VB 6.0 pour un jeu de gratter et gagner.

    mes problemes sont :

    1 - le client doit gratter une image pour voir un N° (comme pour les cartes telephonique ou lotto ........) donc comment je dois faire pour que quand il passe sa main l'image qui cache le N° disparait peu a peu en emettant un bruit de grattage.

    2 - le N° qui s'affiche doit etre aleatoire pour une serie de N° entre 1 et 5000 et chaque N° correspond a un cadeau .
    en VB existe t'il un generateur aleatoire de N°car les N° doivent etre aleatoire.

    si vous avez une idée pour ces deux problemes pour m'aider

    et merci d'avance.

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ben...
    Comment te répondre avant de connaître ton niveau actuel en matière de traitement des images ?
    Quel est-il et que connais-tu de l'emploi des ApIs dans ce domaine ?

  3. #3
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Pour la fonction aléatoire, c'est simple :

    La fonction Rnd() renvoie une valeur aléatoire entre 0 et 1. On va donc la multiplier par 5000 pour obtenir une valeur entre 0 et 4999,999999... En prenant la partie entière avec la fonction Int(), on obtient une valeur entre 0 et 4999. Il suffit de rajouter 1 pour obtenir une valeur entière entre 1 et 5000.

    Attention, il faut initialiser le générateur de nombres aléatoires sinon la suite de valeurs est toujours la même ! Cela se fait avec la fonction Randomize.

    On peut maintenant construire la fonction qui va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Function ValeurAleatoireEntre1et5000()
        Randomize
        ValeurAleatoireEntre1et5000 = Int(Rnd() * 5000) + 1
    End Function
    Le reste est nettement plus compliqué et nécessite des connaissances approfondies, notamment des API Windows car VB ne gère pas la transparence des images qu'il crée (par contre il sait utiliser celle des images GIF, mais cela ne convient pas pour ce que tu veux faire car il ne sait pas CREER des images GIF de façon native).
    Il faut donc passer par les fonctions graphiques du GDI, et ce n'est pas simple.

    Il ne faut cependant pas désespérer, il y a surement quelqu'un qui l'a déjà fait. Le tout est qu'il lise ce forum. Bonne chance.

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    La transparence des Images n'aura rien à voir dans cette affaire, ami MGD, mais une parfaite maitrise du traitement des images et une parfaite connaissance de l'utilisation de certaines APIs, OUI !
    Si l'intéressé(e) a déjà cette maitrise et ces connaissances, on y parviendra, mais pas avec du code, alors... mais par certaines indications de mécanismes à mettre en oeuvre... et il/elle devrait pouvoir suivre...
    Si, par contre, la réponse est non.... il est évident qu'on devra s'arrêter là !

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    bonjour,

    je vous remercie mes amis pour votre aide et j'ai besoin d'un peu plus de reponses si c'est possible.

    on se qui me concerne je suis informaticienne et je connais rien au domaine de l'image

    et pour faire disparaitre l'image je crois que la solution la plus simple et de la decomposer en des centaines de morceaux puis utiliser la fonction ONMOUSEMOVE visible=false

    mais pour le son j'ai aucun idée

    j'attend avec patience vos reponses

    et merci

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Clair et très largement suffisant pour moi !
    J'arrête là, bien évidemment !

  7. #7
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut Grattage...
    J'ai trouvé une méthode très simple pour réaliser ce que tu veux faire. On utilise deux PictureBox, dont un masqué qui contient l'image après grattage et un uni qui contient l'image avant grattage.

    Avec l'évènement MouseMove, on recopie l'image du premier PictureBox sur le second sur quelques pixels autout de la souris (j'ai essayé avec 1 pixel, mais c'est beaucoup trop long à gratter !)

    Je fais un petit projet VB de démo et je reviens dans cette discussion quand j'ai fini.

    A bientot

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    l'idée est bonne et astucieuse .
    Va falloir jouer avec la taille du pinceau.. et surtout pas pixel par pixel !

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Points : 110
    Points
    110
    Par défaut
    Vous allez certainement avoir des problèmes de rafriachissement avec la méthode de MGD_Software bien qu'elle soit très astucieuse... En même temps sans utiliser d'Api je vois pas comment faire ..
    Ce n'est pas parce qu'ils sont beaucoup a avoir tort qu'ils ont raison.

  10. #10
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    voila une autre idee.

    j'ai lu des trucs sur flash et je croit que ce que tu peux faire peut etre fait a l'aide de falsh (evidement si tu as des connaissance en flash).

    tout d'abord fait une petite qui genere des code masques et les demasque en fonction des evenement de la souris que tu auras choisis (bon c'est vrai la va falloir s'y connaitre en flash et surtout en actionscrip), mais si tu arrive ce serra super.

    en suite il te suffit juste d'appeler cette pseudo-appli dans VB et le tour est jouer.

    Bon je sais comme ca ca a l'air longue ma solution mais je croit que ca n'en sera pas moins avec les API's.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    je viens de recevoir le detail du projet :

    L’écran présente en permanence 3 pavés A – B et C sur le côté de l’écran.
    Le participant appuie au choix sur A – B ou C.

    Apparaît alors sur le restant de l’écran une « carte à gratter » A – B ou C
    selon la touche sur laquelle le participant a appuyé.

    Le participant frotte alors l’écran sur la partie de la carte représentant une
    surface « à gratter ». Cette action est accompagnée par un bruit de frottement.

    Sous « le grattage » apparaît alors le nom d’un cadeau 1 – 2 – 3 ou 4 ou
    « perdu ». Chaque cadeau ou le message « perdu » est accompagné d’un message sonore
    différent.

    Quand le client a gagné les cadeaux 2 – 3 ou 4, une fiche de renseignement se substitue sur l’écran à la carte et le gagnant (ou l’hôtesse) complète les cases de coordonnées.
    Une musique accompagne le cadeau quand il s’affiche ou une autre différente exprime « perdu »

    Chaque jour, un code permet de visualiser sur écran les rendements du jeu.


    donner moi des idees sur ca S.V.P

  12. #12
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut Grattage
    Voilà, c'est fait, tout au moins sans le son.

    Il y a à peine 32 lignes de code...

    Par contre il est difficile de décrire la mise en page nécessaire pour une présentation correcte. En gros, il faut :

    Un PictureBox (Picture1), non visible, avec la propriété AutoRedraw à True. Pour ma démo, ce pictureBox a été rempli avec un nombre aléatoire à 4 chiffres. Pour que ce nombre soit à peu près centré, il faut que le PictureBox ait une dimension de 2745 x 915 (rappel : en VB ce sont des twips, pas des pixels), un BackColor blanc et une police Arial Gras de 28 points, noire. Picture1 peut être placé n'importe où dans la feuille

    Un second PictureBox (Picture2), visible, avec la propriété AutoRedraw à True, a un fond de couleur grise. Ses dimensions doivent être rigoureusement les mêmes que celles de Picture1.

    J'ai poussé le détail jusqu'à mettre le mode d'emploi dans un Label au-dessous de Picture2...

    Le reste se passe dans le code de la feuille, que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Option Explicit
     
    Private Const knPixelSize = 3            'Taille de la zone de "recopie" en pixels
     
    '-----------------------------------------------------------------------------
    Private Sub Form_Load()
        Picture1.Print "   " & Format(Int(Rnd * 9999) + 1, "0000")
    End Sub
     
    '-----------------------------------------------------------------------------
    Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim lColor As Long, nX As Integer, nY As Integer
        Dim nSizeX As Integer, nSizeY As Integer, nStepX As Integer, nStepY As Integer
     
        'Conversion des pixels dans l'unité des PictureBoxes
        nSizeX = Picture1.ScaleX(knPixelSize, vbPixels, Picture1.ScaleMode)
        nSizeY = Picture1.ScaleY(knPixelSize, vbPixels, Picture1.ScaleMode)
        nStepX = Picture1.ScaleX(1, vbPixels, Picture1.ScaleMode)
        nStepY = Picture1.ScaleY(1, vbPixels, Picture1.ScaleMode)
     
        'Recopie de l'image de 1 vers 2 si le bouton gauche de la souris est appuyé
        If Button And vbLeftButton Then
            For nX = -nSizeX To nSizeX Step nStepX
                For nY = -nSizeY To nSizeY Step nStepY
                    lColor = Picture1.Point(X + nX, Y + nY)
                    Picture2.PSet (X + nX, Y + nY), lColor
                Next
            Next
        End If
    End Sub
    '-----------------------------------------------------------------------------
    La valeur de la constante knPixelSize dépend bien sûr de la taille de l'image à découvrir et de la vitesse à laquelle on veut la découvrir.

    Quand au son, c'est un peu plus délicat. La principale difficulté est de le déclencher à bon escient. En effet, on peut utiliser la fonction API Playsound() qui va jouer un fichier son situé sur le disque. On enregistrera un son de grattage d'environ une seconde. Par contre, si on le déclenche à chaque mouvement de souris, on risque d'avoir des problèmes car chaque déclenchement annule précédent: les mouvements de souris étant très rapprochés, on n'entendra quelque chose qu'à l'arrêt de la souris, ce qui n'est pas le but recherché. Je pense qu'il faut jouer avec un timer, mais je n'ai pas encore trouvé comment.

    En attendant, si le projet vous intéresse, les sources actuelles sont disponibles au téléchargement dans un fichier ZIP sur mon site

    Note à jmfmarques : au lieu de sarcasmes et d'une agressivité à peine voilée, les utilisateurs des forums attendent des réponses constructives et non un "moi j'arrête là". Quand j'étais débutant en VB (il y a plus de 10 ans de cela, et Internet n'existait pas), j'aurais bien aimé trouver quelqu'un qui me tienne la main quand je butais sur un problème que je résouds maintenant en trois secondes... C'est vrai que les gens ne cherchent souvent pas assez avant de recourir au forum, mais ce n'est pas une raison pour les rembarrer (surtout en rouge et gras). Si vous trouvez la question idiote, il suffit de ne pas répondre...

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    je te remerci MGT Software pour ton aide c'est vraiment tres gentil de toi et j'espere que tu lis mon dernier message pour bien comprendre le probleme

    encore une fois merci

  14. #14
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    D'abord : Bravo à MGD (il a travaillé)
    Ensuite, toujours à MGD : As-tu cherché à faire (on peut), avec 3 fois moins de code encore ?
    Vas-y (je sais que tu peux.... ce n'est pas difficile du tout ...)

  15. #15
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Les points suivants du projet me paraissent encore plus simple que le début.

    Cependant, je ne voudrais pas développer complètement un projet qui me paraît être commercial. Je suis informaticien professionnel et je veux bien donner un coup de main aux amateurs en difficulté, mais je ne souhaite pas réaliser de A à Z une application commercialisée.

    J'ai cru comprendre que tu étais informaticienne toi-même. Dans ce cas soit tu connais suffisamment VB pour faire un formulaire de saisie de données, ce qui est le B-A-BA du VB, soit tu fais appel à un collègue qui connait VB, soit tu le réalises dans un langage que tu connais (C++, C#, Delphi, Java, c'est pas ça qui manque),... Soit tu fais appel à une société de services en informatique.

    Je veux bien réaliser une application complète à partir d'un cahier des charges précis et complet, mais il faut bien comprendre que ce forum n'est pas un tableau d'affichage pour appels d'offres. On ne peut y traiter que des détails bloquants certes mais précis et ponctuels.

    Je me contenterai donc désormais de "donner des idées".

    1. Le fait d'avoir 3 zones à gratter ne change rien au principe donné dans ma réponse précédente. Simplement, au premier clic, il faut mémoriser le controle et ne traiter ensuite le grattage que pour ce contrôle.

    2. La saisie des coordonnées est, comme indiqué ci-dessus, le plus élémentaire des travaux sous VB. C'est une simple affaire de contrôles Labels pour les légendes des champs de TextBox pour les champs de saisie.

    3. Pour valider la réponse, il suffit de prévoir un champ de saisie ou le "gratteur" entrera le texte découvert. On connait forcément celui qu'on a écrit sur le PictureBox masqué. Il suffit de comparer. De toutes façons, on sait à l'avance le résultat dès que le "gratteur" a sélectionné une des vignettes. La seule difficulté est de trouver le moment où déclencher la musique, car il est quasi-impossible de déterminer à quel moment le texte démasqué devient interprétable à la lecture. C'est la raison du champ de validation (qui peut éventuellement être remplacé par un bouton).

    4. Pour jouer de la musique, voir la MSDN ou plus simplement l'aide en ligne, rubrique PlaySound: Sous VB, taper F1 n'importe où puis, dans l'onglet "index" de l'aide, taper Playsound. L'aide est malheureusement en anglais. La visionneuse d'API, qui s'installe en même temps que VB, permet de déclarer facilement la référence à cette fonction. Attention, il est indispensable d'appeler cette fonction en mode asynchrone, sinon l'application est bloquée pendant la musique (drapeaux SND_APPLICATION + SND_ASYNC pour le dernier paramètre)

    5. Pour les statistiques, une petite base Access ferait très bien l'affaire, en enregistrant toutes les coordonnées des "gratteurs" et leurs résultats. Très commode aussi pour récupérer une liste de mailing publicitaire...

  16. #16
    Membre habitué Avatar de MGD_Software
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2006
    Messages : 137
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par jmfmarques
    As-tu cherché à faire (on peut), avec 3 fois moins de code encore ?
    Vas-y (je sais que tu peux.... ce n'est pas difficile du tout ...)
    Bien sûr qu'on peut.

    J'ai fait beaucoup de langage C, et participé à ce concours idiot qui consiste à faire un programme dans le moins de lignes possible. Résultat : le programme fonctionne mais est totalement incompréhensible même pour celui qui l'a écrit... et l'exécutable n'en est pas forcément plus réduit ni plus rapide.

    Je m'adresse à des débutants. Il faut donc faire un peu de pédagogie et ne pas trop chercher la performance. C'est en tout cas ce que j'ai toujours appliqué en tant que formateur. Je ne relèverai donc pas le défi.

  17. #17
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Allons, MGD !
    On peut ! et sans sortir du niveau de débutant !
    Juste un peu d'arithmétique... pas plus... et encore plus compréhensible et explicable...
    Je t'enverrai donc celà (tu le mérites largement) dès que le demandeur/demanderesse aura montré (nous n'avons pas vu le moindre début de début de son code.... sauf des volontés exprimées... et une fonction inexistante...) qu'il/elle veut bien commencer à se pencher sur l'exercice qu'on lui a demandé de faire
    J'ai beaucoup aimé tes réflexes quand à la façon d'aborder le problème : question de regard et de détermination des mécanismes ! Tu réussiras, je le sais, dans tes entreprises (toutes).

    EDIT : je n'avais pas vu ton message précédent au demandeur : j'aprécie énormément... Bravo à toi ! Tu comprends vraiment tout très vite et je suis on ne peut plus content que tu sois un membre de ce forum ...
    Ta présence nous honore (elle me réconforte, en ce qui me concerne).

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci a toi MGD pour ton aide, mais je voulais juste te dire que ce n'est pas un truc commercial c'est un projet que je dois realiser comme rapport de stage et il ne seras jamais commercialiser mais malheuresment il est on vb et je suis debutante, c'est pour ca que j'ai demander votre aide et si t'as plus d'idée pour m'aider n'hesite pas de me les envoyer et merci bcp.

  19. #19
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Je ne voulais pas intervenir à nouveau ici avant que la demanderesse n'ait commencé à "travailler" un peu.

    Pourquoi avoir changé d'avis ? : J'ai mes raisons ...

    Alors, en reprenant d'abord l'idée de MGD (ses 2 pictureboxes telles qu'ils les avaient définies), on va simplifier les calculs et rester dans l'esprit de VB et d'ailleurs de tout développement ! (moins de syntaxe et plus de construction de la pensée):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Option Explicit
    Private Sub Form_Load()
        Picture1.Print "   " & Format(Int(Rnd * 9999) + 1, "0000")
    End Sub
    Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim couleur As Long, I As Integer, J As Integer, n As Integer
        If Button = 1 Then
           For I = 0 To 10
                For J = 0 To 10
                  For n = -3 To 3
                    couleur = Picture1.Point(X + I + n, Y + I)
                    Picture2.PSet (X + I + n, Y + I), couleur
                  Next n
                Next
            Next
        End If
    End Sub
    Mais à vrai dire, il y a mieux à faire, avec une seule PictureBox
    La solution suivante est bonne pour un jeu ... elle cesse de l'être si les candidats à une tricherie pointent vers l'écran un appareil ultra-perfectionné capable de déceler une infime différence de fréquence des couleurs....

    Sur une form :
    une seule picturebox, appelée Picture1
    et :
    1) cette 1ère partie n'est là que pour éviter toute une description de ce qu'il y a à faire et peut être totalement remplacée par des opérations manuelles .... bien évidemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Option Explicit
     Private Sub Form_Load()
      With Picture1
        .ScaleMode = 3
        .FontSize = 28
        .BackColor = RGB(0, 0, 0)
        .ForeColor = RGB(0, 0, 1)
        .FontBold = True
      End With
      With Font
        .Name = Picture1.FontName
        .Size = Picture1.FontSize
      End With
      Picture1.Height = TextHeight(vbCrLf & "   toto" & vbCrLf) 
      Picture1.Width = TextWidth("   toto          ")
      Randomize
      toto = Int(Rnd * 9999) + 1
      Picture1.Print vbCrLf & Space(10 - Len(Str(toto))) & toto
      Picture1.Circle (Picture1.ScaleWidth / 2, Picture1.ScaleHeight / 2), Picture1.ScaleWidth / 4, RGB(120, 120, 100), , , 0.8
     
    End Sub
    Quand au code utile, il est là (le reste pouvant bien évidemment se faire manuellement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim I As Integer, J As Integer, n As Integer
        If Button = 1 Then
           For I = 0 To 10
                For J = 0 To 10
                  For n = -3 To 3
                    If Picture1.Point(X + I + n, Y + I) <> Picture1.ForeColor Then
                      Picture1.PSet (X + I + n, Y + I), RGB(255, 255, 255)
                    End If
                  Next n
                Next
           Next
        End If
    End Sub
    J'ajoute que les dimensions de la picturebox pourront être celles de l'utilisateur (l'affichage se fera toujours au centre, automatiquement, tout en évitant d'offrir un 0030 au lieu d'un 30 au grattage ).la zone à gratter est en outre signalée par une ellipse gris pâle. Je n'ai pas voulu compléter jusqu'à ne pouvoir gratter que cette zone, pour ne pas compliquer plus, mais on peut très largement y parvenir avec un tout petit peu de code complémentaire (facile)
    et c'est tout... du moins en ce qui concerne le grattage car...
    Je n'ai rien changé (version avec 2 pictureboxes) à ce qui avait été écrit pour la détermination d'un nombre aléatoire....au chargement de la form
    Je laisse à MGD le soin de corriger (pour éviter d'avoir toujours, ou presque, le même !... J'ai corrigé pour la version avec 1 seule pictureBox).

  20. #20
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bon,
    J'ai voulu me divertir de bon matin.. et faire du grattage limité à une zone elliptique :

    Sur une form : une picturebox picture1 et ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    ' le code de chargement (que l'on peut remplacer par du "manuel" jusqu'à la ligne rouge)
    Option Explicit
     Private Sub Form_Load()
      With Picture1
        .ScaleMode = 3
        .BorderStyle = 0
        .BackColor = Me.BackColor
        .ForeColor = RGB(0, 0, 1)
        .FontSize = 50
        .FontBold = True
        .FillColor = RGB(0, 0, 0)
        .FillStyle = 0
      End With
    '========================
      Picture1.Width = (5 * Picture1.FontSize) * Screen.TwipsPerPixelX
      Picture1.Height = (5 * Picture1.FontSize) * Screen.TwipsPerPixelY
      Picture1.CurrentX = Picture1.ScaleWidth / 1.5
      Picture1.CurrentY = Picture1.ScaleHeight / 2
      Picture1.Circle (Picture1.CurrentX, Picture1.CurrentY), Picture1.ScaleWidth / 3, RGB(120, 120, 100), , , 0.8
      Picture1.CurrentX = Picture1.ScaleWidth / 2.2
      Picture1.CurrentY = (Picture1.ScaleHeight / 6) + (Picture1.FontSize)
      Randomize
      Picture1.Print Int(Rnd * 9999) + 1
    End Sub
     
    'le code du grattage à proprement parler :
     
     
    Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim I As Integer, J As Integer, n As Integer
        If Button = 1 Then
           For I = 0 To 10
                For J = 0 To 10
                  For n = -3 To 3
                    If Picture1.Point(X + I + n, Y + I) = Picture1.FillColor Then
                       Picture1.PSet (X + I + n, Y + I), RGB(255, 255, 255)
                    End If
                  Next n
                Next
           Next
        End If
    End Sub
    La taille de police peut être modifiée comme on le souhaite !
    C'était tout ...

Discussions similaires

  1. [vb6] Vérification des programmes actifs
    Par Jivy77 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/06/2006, 16h40
  2. [VB6]Executer un programme externe et récuperer les sorties
    Par agro dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 29/03/2006, 13h08
  3. [VB6]Executer un programme en vb6 des le lancement
    Par cedre22 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/02/2006, 10h15
  4. [VB6] Ajout du programme dans la barre de tâche
    Par Fab18 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/01/2005, 09h17
  5. [VB6] Exécuter un programme en tant que...
    Par Le_Tolier dans le forum VB 6 et antérieur
    Réponses: 36
    Dernier message: 28/05/2004, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo