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

Composants VCL Delphi Discussion :

Empêcher 2 composants Timage de se toucher


Sujet :

Composants VCL Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Empêcher 2 composants Timage de se toucher
    bonjour

    je déplace avec le curseur de la souris des composants Timage sur ma fiche, et j'aimerais éviter qu'ils se touchent

    j'avais pensé à un tableau qui mémoriserait les coordonnées de chaque Timage et ainsi afficher un message d'erreur si un est disposé sur l'ensemble des coordonnées recouvert par un autre ? mais je me demandais s'il y avait mieux ?

    je précise tout de fois que les Timage qui se déplacent sont posés sur un Timage (fixe) qui sert d'image de fond

    merci à vous

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut Proposition
    Tu dois effectivement mémoriser un tableau des coordonnées (top,left,right,bottom) de chaque image.
    Ensuite tu analyse les quatre points futurs de l'image après déplacement, et si au moins un des points est a l'intérieur du style (image1.Left <= point1.X <= image1.right) et (image1.Top <= point1.Y <= image1.Bottom) tu annules le déplacement. Attention! Exclure l'image elle même de l'analyse. Bon algorithme

  3. #3
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    (...), et si au moins un des points est a l'intérieur du style (image1.Left <= point1.X <= image1.right) et (image1.Top <= point1.Y <= image1.Bottom) tu annules le déplacement(...)
    Attention, si une image est plus grande que l'autre, tu peux ne pas avoir de point à l'intérieur mais recouvrir (partiellement) l'image.
    Il vaut mieux verifier que les 2 bords sont plus a droite ou a gauche de l'autre image, ET les 2 autres au dessus ou en dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ( (img1.right < img2.left) or (img1.left > img2.right) )
    and
    ( (img1.bottom < img2.top) or (img1.top > img2.bottom) )

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    On peut tester le chevauchement par IntersectRect (ou IntersectsWith).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      R :TRect;
    begin
      if IntersectRect(R, Image1.BoundsRect, Image2.BoundsRect) then
     
      //ou
      if Image1.BoundsRect.IntersectsWith(Image2.BoundsRect) then
    end;

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    merci à vous tous

    ALWEBER comme toi j'avais pensé à une version plus longue et contraignante, j'avais espérer ne pas réinventer la roue, et grâce à Andnotor je n'aurais pas à le faire ^^

    @Andnotor la fonction IntersectRect fonctionne bien, mais l'autre doit avoir un problème de class ou alors mal écrit

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Citation Envoyé par Coussati Voir le message
    la fonction IntersectRect fonctionne bien, mais l'autre doit avoir un problème de class ou alors mal écrit
    Non, elle est juste mais il faut un Delphi relativement récent. La structure TRect a été améliorée

  7. #7
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Non, elle est juste mais il faut un Delphi relativement récent. La structure TRect a été améliorée
    tu as surement raison, car j'utilise delphi 7

    merci en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Surcharger la méthode Create du composant TImage
    Par ero-sennin dans le forum Delphi
    Réponses: 27
    Dernier message: 07/03/2007, 16h29
  2. Erreur composant TImage : "la classe n'existe pas"
    Par jeroe dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/03/2006, 16h46
  3. Composant TImage sur fenêtre MDI Parent
    Par charles.apollon dans le forum C++Builder
    Réponses: 6
    Dernier message: 10/02/2005, 15h47
  4. [BCB6]Redimentionnement manuel d'un composant TImage
    Par vsavoir dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/09/2004, 11h55
  5. mettre a blanc le composant TImage
    Par Chonchon dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/11/2003, 09h24

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