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

WinDev Discussion :

création dynamique et déplacement souris


Sujet :

WinDev

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 137
    Points : 42
    Points
    42
    Par défaut création dynamique et déplacement souris
    Bonjour à tous,
    Suite à une contribution sur ce forum concernant la création dynamique d'objets (en l'occurence des images) et leur déplacement , je poste ce message afin de faire appel à votre experience pour une légère modification du code proposé.

    Le code est accessible ICI

    Ma question est comment légèrement modifier ce code pour :

    1/ Créer les objets dans une fenêtre interne
    2/ Après avoir limité les deplacement avec la souris sur l'axe des X seulement, je voudrai savoir comment faire pour, dans le cas ou on a cloné une image 6 fois, quand on clique sur l'image n° 3 pour deplacement, si on la deplace à droite elle "pousse" les images 4, 5 et 6 avec elle a droite, si on la deplace à gauche elle "pousse" les images 2 et 1 à gauche egalement, ce qui signifie la modification des positions des autres objets clonés.

    Merci pour votre aide à l'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    J'utilise un tableau pour stocker le nom de l'image, les ID des évènements, la position et les dimensions de chaque champs.
    Si les images sont créées dans l'ordre et que tu n'as pas envi de te compliquer, si tu cliques sur l'image 3, tu vas te positionner à la ligne 3 de ton tableau et tu fais une boucle de la ligne 3 à la fin de ton tableau en modifiant à chaque fois les colonnes des positions. Si tu ne vas pas jusqu'à la fin du tableau tu peux faire un test sur le nom du champ.
    Mieux vaut un petit lien qu'un long discours.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Bonjour,

    ce code est très intéressant. J'aurais deux questions:

    1) Lorsque je définis une image type .jpg ou .bmp pour la description de mon IMG déplaçable, le code plante lors du clic sur l'IMG clonée (plantage dans la procédure clickimage lors de l'appel de l'évènement déplaceimage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evénement("déplaceimage",{tab_images[carrésélectionné],indChamp},512)
    Windev recherche un objet du nom de l'image spécifie (ex. 'chien.jpg') dans la mémoire, d'où plantage, comment résoudre ce problème?

    2) Je souhaite utiliser ce principe en clonant une petite image afin de la déplacer non pas sur une fenêtre mais sur une autre image (exemple déplacer yeux/oreilles/nez (petites IMG déplaçables) sur une image de visage vierge (IMG non déplaçable). Lorsque je veux sauvegarder l'image non déplaçable j'aimerai que les petites IMG par dessus soient incrustées, mais évidemment Windev ne me sauvegarde que l'image du visage vierge sans tenir compte des IMG au dessus.
    Là encore une idée pour régler ça?

    Merci beaucoup!!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Citation Envoyé par cladoo Voir le message
    2) Je souhaite utiliser ce principe en clonant une petite image afin de la déplacer non pas sur une fenêtre mais sur une autre image (exemple déplacer yeux/oreilles/nez (petites IMG déplaçables) sur une image de visage vierge (IMG non déplaçable). Lorsque je veux sauvegarder l'image non déplaçable j'aimerai que les petites IMG par dessus soient incrustées, mais évidemment Windev ne me sauvegarde que l'image du visage vierge sans tenir compte des IMG au dessus.
    Là encore une idée pour régler ça?
    Je me réponds tout seul pour régler ce point de manière franchement pas élégante via un code trouvé sur le net (je n'y ai pas compris grand chose...), mais le principe est de faire une impression écran d'un champs actif (à la manière IMP Ecran+ALT) et de sauvegarder ça dans une image en local.

    Voici le 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
     
     
    //sur clic : des IMG déplaçables ont été disposées sur mon IMG fixe
     
    nHwnd est un entier =Handle("im1") // im1 est un champs image en dehors de ma fenêtre de même dimension que mon image fixe
    hwndfen est un entier = Handle(IMG_fixe) // handle de la fenêtre ou du champ à copier
     
    hdcScreen est un entier = AppelDLL32("user32","GetWindowDC" , hwndfen)
     
    rect est composé de
    	l est un entier
    	t est un entier
    	r est un entier
    	b est un entier
    FIN
    AppelDLL32("user32","GetWindowRect" , hwndfen , &rect)
     
    HORZRES est un entier = rect.r - rect.l
    VERTRES est un entier = rect.b - rect.t
    im1..X=0
    im1..Y=0
    im1..Largeur=HORZRES 
    im1..Hauteur=VERTRES 
     
    dcim1 est un entier =dDébutDessin("im1")
     
    API("gdi32","StretchBlt", dcim1, 0, 0, im1..Largeur, im1..Hauteur, hdcScreen, 0, 0, HORZRES, VERTRES, 0x00CC0020)
     
     
    //on sauvegarde l'image dans un répertoire local
    dSauveImageJPEG("im1","C:\temp\test_img\copieecr.jpg")
    AppelDLL32("user32","ReleaseDC",hwndfen,hdcScreen)
    dFinDessin()

    Si vous avez une solutions plus simple (ou plus "native") je prends.
    Le point 1) reste irrésolu.

    Merci

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par cladoo Voir le message

    1) Lorsque je définis une image type .jpg ou .bmp pour la description de mon IMG déplaçable, le code plante lors du clic sur l'IMG clonée (plantage dans la procédure clickimage lors de l'appel de l'évènement déplaceimage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evénement("déplaceimage",{tab_images[carrésélectionné],indChamp},512)
    Windev recherche un objet du nom de l'image spécifie (ex. 'chien.jpg') dans la mémoire, d'où plantage, comment résoudre ce problème?
    [Faux]
    As-tu essayé de récupérer le nom du champ image ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Evénement("déplaceimage",{tab_images[carrésélectionné],indChamp}..Nom,512)
    [/Faux]


    Non, en y réfléchissant, il y a une autre piste (ma proposition plus haut est fausse)...

    Est-ce que tab_images[] est une variable de type tableau ?
    Pourrais-tu montrer le code de sa déclaration et aussi comment tu renseignes un élément de ce tableau ?


    Dans l'hypothèse où j'ai vu juste...

    WinDev ne permet pas de prendre une référence sur un objet graphique, comme ici un champ image. Il faut utiliser le nom du champ (parfois le nom complet, selon le contexte).
    Par conséquent, il très probable que le tableau tab_images[] ne contient pas des références à des champs, mais une autre information (erronée).

    L'erreur a lieu au moment où l'élément du tableau est renseigné.
    Il faudrait utiliser la propriété ..Nom du champ image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab_images[i] = champCloné..Nom
    Ensuite, si le tableau contient des noms de champs, tu n'as plus besoin d'une indirection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evénement("déplaceimage",tab_images[carrésélectionné],512)

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Ok, je n'avais pas fait attention, mais cette discussion fait référence à une contribution.
    Donc, j'ai lu le code en question et, pour tenir compte du problème de cladoo, j'y apporte une proposition de correction à voir dans le fil de messages de la contribution.

    http://www.developpez.net/forums/d87...cement-souris/
    _

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Bonjour et merci pour votre aide, je vais tester cela rapidement et je vous ferai un retour.

    Pour mon point 2) pensez-vous qu'il existe une solution plus simple ? Ou à défaut, quelqu'un pourrait-il essayer de commenter le code (trouvé brut de décoffrage sur le net), j'avoue ne pas être très familier avec l'utilisation des dll...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    444
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 444
    Points : 428
    Points
    428
    Par défaut
    Tu peux sauvegarder ton image dans un fichier temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dSauveImageBMP(MoiMême,"..\images\test.bmp")
     
    IMG_Image2 = "..\images\test.bmp"
    Dans la fonction dSauveImageBMP y a une constante enMémoire mais ça fait des mois que je cherche en vain comment la récupérer sans passer pas la sauvegarde d'un fichier.

    Théoriquement cette fonction sauvegarde les pixels visibles dans ton champ image.
    Mieux vaut un petit lien qu'un long discours.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Citation Envoyé par sphynxounet Voir le message
    Tu peux sauvegarder ton image dans un fichier temporaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dSauveImageBMP(MoiMême,"..\images\test.bmp")
     
    IMG_Image2 = "..\images\test.bmp"
    Dans la fonction dSauveImageBMP y a une constante enMémoire mais ça fait des mois que je cherche en vain comment la récupérer sans passer pas la sauvegarde d'un fichier.

    Théoriquement cette fonction sauvegarde les pixels visibles dans ton champ image.
    Il faut que je refasse un essai, mais il me semble que je n'avais que l'image "d'origine" donc sans les autres IMG par dessus lorsque j'utilisais cette méthode. En revanche en dessinant des rectangles etc.. sur mon IMG je les retrouve bien dans l'IMG sauvegardée. Il semblerait que Windev fasse une distinction entre 2 IMG superposées et un IMG avec des 'dessins'. En même temps, je trouve ça logique puisque dans le premier cas, rien ne précise à Windev que les 2 IMG doivent être liées, il s'agit ni plus ni moins d'une superposition de champs. Dans le cas du dessin, l'incrustation est implicite.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Citation Envoyé par cladoo Voir le message
    Bonjour et merci pour votre aide, je vais tester cela rapidement et je vous ferai un retour.
    Impeccable, ça marche du tonnerre! J'ai pu ébaucher ce que je souhaitais réaliser et ça marche plutôt pas mal.

    Je recherche toujours une solution plus élégante pour incruster des IMG superposées sur une autre IMG dans un .BMP ou équivalent (voir plus haut).

    Merci

Discussions similaires

  1. Création dynamique de champ image + déplacement souris
    Par sphynxounet dans le forum Contribuez
    Réponses: 3
    Dernier message: 21/05/2010, 09h30
  2. [D7] Création dynamique de Form
    Par jer64 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/08/2003, 12h20
  3. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07
  4. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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