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

C++Builder Discussion :

D&D d'une TImage..


Sujet :

C++Builder

Vue hybride

Flow_75 D&D d'une TImage.. 10/12/2006, 23h50
Flow_75 voila, j'ai essayer de... 11/12/2006, 00h28
henderson Salut ! Si j'ai bien... 11/12/2006, 11h50
Flow_75 ok merci. Je verrais cela ce... 11/12/2006, 12h29
henderson Salut ! Sinon, pour... 11/12/2006, 13h54
Flow_75 salut, c'est N I C K E L... 11/12/2006, 16h49
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut D&D d'une TImage..
    BOnjour,

    voila, je suis en train de faire un petit programme qui utilise des images.
    Je voudrais pouvoir faire un D&D pour pouvoir les déplacer sur ma Form.
    Si possible avec un TShape carré pour faire un style d'ombre...
    J'ai vu quelques posts sur ce concept, mais rien de concret...

    MErci de votre aide.
    Flo

  2. #2
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    voila,

    j'ai essayer de faire un truc.
    dans l'evenement MouseDown de mon image, j'ai fait apparaitre un TShape au coordonnée de ma souris, et je rafraichis la position de mon carre tant que j'appuis sur mon bouton gauche de ma souris et quand je relache, ca fait réapparaitre mon image au là ou j'ai relacher ma souris...
    mais vu qu'un exemple vaut plus qu'un bon discours :

    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
    void __fastcall TForm1::MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
     TImage *pion = new TImage(Form1);
     TPoint *Pos = new TPoint;
    GetCursorPos(Pos);
     
     carre->Height = 58;
     carre->Width = 58;
     
    TPoint *Pos = new TPoint;
     
    pion = dynamic_cast <TImage *>(Sender);
    int posx,posy;
    while ((GetAsyncKeyState(VK_LBUTTON) & 0x8000) != 0)   {
     
     
    carre->Visible = true;
    pion->Visible = false;
     
    GetCursorPos(Pos);
    posx = Pos->x - Form1->Left-4-24;
    posy = Pos->y - Form1->Top - 23-24 ;
     
    carre->Top = posy;
    carre->Left = posx;
     
    pion->Left= posx;
    pion->Top = posy;
    }
     carre->Visible = true;
    pion->Visible = false;
    delete Pos;
    }
    bon, on va ignorer les erreurs de syntaxe pour se concentrer sur le principe.

    Le probleme est que là lors que je laisse appuyer le bouton, et que je bouge la souris, le carre n'apparait pas.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Si j'ai bien compris :
    - on doit cliquer sur un TImage
    - faire apparaître un TShape qui va suivre le mouvement de la souris.
    - l'image qui est à l'origine de l'action doit se placer en lieu est place du Shape qui disparait.

    Si on supppose (n) TImages et un TShape dont la propriété Visible est false.
    On va supposer également que les TImage se partagent les mêmes événementielles : Image1MouseDown, Image1MouseMove et Image1MouseUp
    Voici comment ça peut se faire :

    Déclarations globales (ou propriétés de la classe TForm1... c'est comme on veut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bool IsMoving = false;
    TPoint Start;
    TImage *Target;
    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
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Target = (TImage*)Sender;
    Start = Point(X,Y);
    Shape->SetBounds(Target->Left, Target->Top,Target->Width, Target->Height);
    Shape->BringToFront(); //au cas où...
    Shape->Visible = true;
    IsMoving = true;
    }
     
    void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    if(IsMoving)
        {
        Shape->Left = Shape->Left + X - Start.x;
        Shape->Top = Shape->Top + Y - Start.y;
        Start = Point(X,Y);
        }
    }
     
     
    void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
    if(IsMoving)
        {
        IsMoving = false;
        Shape->Visible = false;
        Target->SetBounds(Shape->Left, Shape->Top, Target->Width, Target->Height);
        }
    }
    C'est juste un exemple !

    A plus !

  4. #4
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    ok merci.
    Je verrais cela ce soir.

    Je te dirais ce que ca donne..

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Sinon, pour déplacer un TImage comme s'il était décollé du plan, donc en utilisant le TShape comme ombre sous l'image, on peut faire comme suit, en gardant les mêmes variables :

    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
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    Target = (TImage*)Sender;
    Start = Point(X,Y);
    Shape->SetBounds(Target->Left + 4, Target->Top + 4,Target->Width, Target->Height);
    Shape->BringToFront(); // passe en avant plan...
    Target->BringToFront(); //...mais sous l'image !
    Shape->Visible = true;
    IsMoving = true;
    }
     
    void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y)
    {
    if(IsMoving)
        {
        Target->Left = Target->Left + X - Start.x;
        Target->Top = Target->Top + Y - Start.y;
        Shape->Left = Target->Left + 4;
        Shape->Top = Target->Top + 4;
        }
    }
     
    void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
    if(IsMoving)
        {
        IsMoving = false;
        Shape->Visible = false;
        }
    }
    A plus !

  6. #6
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 100
    Par défaut
    salut,

    c'est N I C K E L !
    c'est simple, et ca marche !

    Merci beaucoup

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

Discussions similaires

  1. [delphi 6]Effacer une Timage
    Par OpenGG dans le forum Delphi
    Réponses: 1
    Dernier message: 27/07/2006, 00h25
  2. Réponses: 12
    Dernier message: 05/05/2006, 09h29
  3. Pb affichage du canvas dans une TImage
    Par Tango dans le forum Composants VCL
    Réponses: 28
    Dernier message: 11/10/2005, 13h57
  4. Déplacer une TImage avec la souris
    Par Ingelishome dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/03/2005, 14h16

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