Gliiser déplacer timage dans timage...possible?

Signaler
Messages postés
12
Date d'inscription
vendredi 29 mai 2009
Statut
Membre
Dernière intervention
9 juin 2009
-
Messages postés
12
Date d'inscription
vendredi 29 mai 2009
Statut
Membre
Dernière intervention
9 juin 2009
-
Bonjour à tous,

tout est dans le titre :o)

J'ai un cadre Timage dans lequel je souhaiterais déplacer un autre Timage (drag and drop), cela est-il possible?

Mes essais ne sont pas vraiment concluant pour le moment...

J'ai autorisé le glisser/déplacer pour la forme contenant mon image à déplacer initiale.

J'ai autorisé le glisser/déplacer pour le timage destiné à recevoir mon image à déplacer.

Et j'ai dit que lorsque j'appuie sur l'image à déplacer: image-a-déplacer.begindrag(true);

Qu'en dites vous?

merci d'avance pour vos réponses, commentaires!

ps: first post :o)

3 réponses

Messages postés
12
Date d'inscription
vendredi 29 mai 2009
Statut
Membre
Dernière intervention
9 juin 2009

précision: voici l'erreur que j'obtiens lorsque j'essai de définir le image-a-deplacer.parent=timage

"unit1.pas(67,24) Error: Incompatible type for arg no. 1: Got "TImage", expected "TWinControl""

...alors que j'arrive très bien à déplacer l'image dans ma forme tform1....

faut il que je change le type de mon image à déplacer? (shape) ou plutôt le type de mon image à recevoir? (panel) 

Le problème est que je souhaite pouvoir dessiner sur ces objets des formes avec le pen.

Merci d'avance
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
16
Salut,

Pour servir de parent, un contrôle doit être une instance d'un descendant de TWinControl ce qui n'est pas le cas de TImage.

Tu places donc ton image de fond dans un TPanel aux mêmes dimensions.
L'image 'dragable' (Image2 dans le code ci-dessous) sur cette image de fond et :

var StartPoint : TPoint;

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  begin
  StartPoint.X := X;
  StartPoint.Y := Y;
end;

procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  begin
  if ssLeft in Shift then begin //vérifie que le bouton gauche est enfoncé.
    Image2.Left := Image2.Left-(StartPoint.X-X); //Translation horizontale.
    Image2.Top := Image2.Top -(StartPoint.Y-Y); //Translation verticale.
    // Ici, tu peux ajuster la position de Image2 par rapport aux bords du TPanel, si tu veux...
  end;
end;




NB : Le TPanel n'est nécessaire que pour empêcher Image2 d'aller se balader partout sur la fiche... à voir selon tes besoins.
Messages postés
12
Date d'inscription
vendredi 29 mai 2009
Statut
Membre
Dernière intervention
9 juin 2009

génial, j'essaye ça tout de suite!!!

en fait j'utilisais la méthode dragover et dragdrop mais elles ne conviennent pas à mon problème (qui est plus graphique).

J'ai vu ta réponse pour mon autre post, c'est bizzare que ton image ne se dédouble pas!

Bref, je vais utiliser ta solution pour déplacer l'image sur le panel (à aucun moment tu ne précise image.parent:=panel  , cette méthode ne sert à rien?
autre question: lorsque je dessine sur panel pendant que l'image se trouve dessus, l'image aussi est recouverte par le dessin...est-ce normal? comment gérer la superposition des objet?

enfin, je pense qu'il faudra que je rafraichisse le fond d'écran sur lequel se balade mon image (voici un tuto , dailleurs au passage (je profite de ta présence :o) les premières explications de ce tuto montrent comment déplacer une image dans une boucle...cette méthode est très bizzare non? ne faut t-il pas utiliser un timer plutôt? car dans l'exemple du tuto, ce qui va déterminer la vitesse de déplacement du sprite sera la vitesse de calcul du processeur (effectuer la boucle i=0 to 50)
voilà, par contre la deuxieme partie semble donner une bonne méthode pour rafraichir le fond d'écran...)

Meric beaucoup pour ta réponse, mon problème s'en voit éclaircie (et mes idées par la même)

ps: c'est en fait dans le cadre d'un projet dans mon école: un rayon se ballade sur tpanel, et au contact des miroirs (mes timages)  ils se réfléchissent suivant la loi de descartes...l'objectif étant d'amener la rayon jusqu'à la sortie en déplacant les miroirs sur le tpanel.....:o)