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 :

[Delphi][TImage] Image map


Sujet :

Composants VCL Delphi

  1. #1
    Membre confirmé Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Par défaut [Delphi][TImage] Image map
    Comment peut on diviser un TImage en plusieurs zones cliquable

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut

    qu'entends tu par diviser un timage en plusieurs zones cliquable ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    Personnellement j'utiliserais l'évènement onclick de TIMage.

    Je récupèrerait la position du click dans l'image. (Mous.CursorPos et TImage.Screentoclient)

    Puis je testerais si le point "cliquer" est dans une zone "cliquable" (PtInRect).

  4. #4
    Membre confirmé Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Par défaut
    je vous donne un exemple :
    imaginons la carte de la france et que mon programme doit cliquez sur chaque petite zone de cette carte et déclencher un événement. Si je fais ça en récupérant les coordonnée de chaque point de la carte ,je pense que c'est pas tres une solution optimale

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Ce que je proposais était de tester sur une région rectangulaire (ptinRect), et non sur un point de l'image.

    Si vous désirer tester dans d'autre type de région c'est plus difficile.

    Peut être pourriez vous créer des régions avec CreatePolyPolygonRgn (voir http://zewaren.developpez.com/delphi/regions/)
    Et tester si le point ou vous avez cliquer est dans une des régions (PtInRegion) ?

    La difficulté Dans ce cas est de définir les contours des régions sans laisser de troues dans la carte.

  6. #6
    Membre confirmé Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Par défaut
    je connais cette fonction mais là, ça resout pas mon probleme, c'est pas du tout faisable. Il s'agit de toute une carte à decouper, il ya de quoi se ranger les ongles

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Salut,

    Comment peut on diviser un TImage en plusieurs zones cliquable
    ... suggestion :
    1) tu récupères le BitMap de ta carte de France
    2) tu découpes ta carte de France en cartes plus petites en la recopiant dans des BitMap rectangulaires et plus petits,
    3) puis tu places ces BitMap dans des TImage placés cote à cote sur ta Form de façon à reconstituer ta carte de France.
    ... et ça te donne des petites zones cliquables rectangulaires.
    ... difficile de faire plus simple.

    Le découpage peut se faire soit avec un logiciel du type PaintShopPro, ou encore par programmation.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Une idée comme cela en passant .

    Prenez non pas une mais deux image (de même taille).

    La première image est l'image d'affichage.
    La 2° image vas contenir les zones sous la forme la plus simple qui soit, une couleur par exemple( la zone1 est rouge, la zone2 est bleu etc.)

    Lorsque vous cliquer sur votre image afficher, vous détecter la position du click.
    A partir de votre position, vous regarder dans la deuxième image la couleur du pixel de la position.
    Si couleur rouge --> Zone 1
    Si couleur Bleu --> Zone 2
    etc..

    Pas très beaux comme programmation, mais définition des zones très simples.
    Attention si le TImage d'affichage n'est pas à l'échelle 1, vous devrez convertir la position de click sur l'image d'affichage en position réeel dans l'image.

  9. #9
    Membre confirmé Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Par défaut
    la c'est la solution la plus évidente, mais mon soucis est beaucoup plus, sur la lourdeur de l'application. Avec cette methode je dois avoir qlq chose comme 90 TBitmap, que je trouve maladroit à faire. C'est surtout ça mon soucis. A titre d'exemple, Windev propose un composant zone de cliquage tres souple.
    Je voudrais obtenir le meme resultat sans passer par des composant externes.

  10. #10
    Membre confirmé Avatar de colfire_dev
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Novembre 2007
    Messages : 244
    Par défaut
    J'avais pas lu le message de Jean françois , vous avez repondu pendant que je repondais à gilbert.

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Re-Salut,

    la c'est la solution la plus évidente, mais mon soucis est beaucoup plus, sur la lourdeur de l'application. Avec cette methode je dois avoir qlq chose comme 90 TBitmap, que je trouve maladroit à faire. C'est surtout ça mon soucis. A titre d'exemple, Windev propose un composant zone de cliquage tres souple.
    Je voudrais obtenir le meme resultat sans passer par des composant externes.
    ... le découpage des "N" BitMap's à partir du grand et le positionnement cote à cote des "N" TImage sur la Form peuvent se faire de façon dynamique par programmation
    ... et une fois que le code est prêt pour 1 seul BitMap il est quasiment achevé pour 90 BitMap's ou davantage.

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Salut,

    Il y a encore plus simple si tu peux te contenter de Zones rectangulaires suivant un maillage de wmX fois hmY pixels pour chaque zone :
    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
     
    var       xs,ys   : integer; // récupération position de la souris dans le TImage
              nbX,nbY : integer; // Nombres de rangées/colonnes de zones
    procedure TfrmGenP.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin     xs := X;
              ys := Y;
    end;
     
    //        Identification du N° de la zone sur laquelle il a été cliqué :
    procedure TfrmGenP.Image1Click(Sender: TObject);
    var       wmX, hmY : integer; // Taille d'une zone
              NumeroDeZoneCliquee : integer;
    begin     nbX := 10; // < à modifier selon besoins
              nbY := 10; // < à modifier selon besoins
              wmX := Image1.width div nbX;
              hmY := Image1.height div nbY;
              NumeroDeZoneCliquee := ((ys div hmY) * nbY) + (xs div wmX) + 1;
              ShowMessage('Il a cliqué sur la Zone'+intToStr(NumeroDeZoneCliquee ));
              // renvoie Numéros depuis Zone1 à ZoneN
    end;
    ... code testé : marche.

    A+

    P.S : Hier je devais avoir les neurones englués en proposant le découpage du BitMap en 90 BitMap's.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. Une image dans une image (image map?)
    Par oklama dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2007, 14h13
  2. Image de fond & image map
    Par jorisvh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/08/2006, 17h39
  3. Image mapping : probleme entre IE et FF
    Par avogadro dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/08/2006, 14h58
  4. [Image] image map dans des images dynamique?
    Par xtaze dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/05/2006, 17h28

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