Bonjour,
je souhaite créer une application graphique pour gérer un parc informatique.

L'ajout de PC sur le réseau local se traduit par la création d'une image (un objet TImage crée en dynamique).
Chaque image de PC pourra être déplacée sur la Form en maintenant le bouton de la souris appuyé.

Mon problème :
Si j'ajoute 2 PCs, lorsque je veux faire glisser l'image, seule la dernière créee bouge (même si j'ai cliqué sur une autre image).
En fait, mon programme garde l'adresse du dernier objet crée et l'utilise lors des appels aux événements.
Les adresses des objets sont empilées dans un composant TList mais je ne sais pas comment rediriger le pointeur sur la bonne adresse lors du clic sur une image...
Il faudrait que lors de la sélection d'une image, le bon objet soit sélectionné.

Ce n'est pas facile à expliquer comme ça.
Je peux toujours vous envoyer mon début d'appli pour que ce soit plus simple...

Voici un bout du 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
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// Création d'un nouvel icone et affectation des événements
   MonImage = new TImage(this);
   MonImage->Parent = Form1;
   MonImage->Picture->LoadFromFile(ExtractFilePath(Application->ExeName)+"pc1.ico");
   MonImage->Left = 30;
   MonImage->Top = 10;
   MonImage->OnMouseDown = ImageMouseDown;
   MonImage->OnMouseMove = DeplacementImage;
   MonImage->OnMouseUp = ImageMouseUp;
   MonImage->Height = 33;
   MonImage->Width = 33;
   MonImage->ShowHint = true;
   MonImage->Hint = "IP : 10.33.12.xxx";
   MonImage->PopupMenu = PopupMenu1;
}
J'ajoute ensuite les pointeurs dans un TList.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
// Ajout du pointeur dans la liste
   listeImages->Add((void *)MonImage);
Et voici l'événement appelé lors du déplacement :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::DeplacementImage(TObject *Sender, TShiftState Shift,
          int X, int Y)
{
    Actif = (TImage *)listeImages->Items[Edit3->Text.ToInt()];
 
    if(MoveFlag)
    {
    Actif->SetBounds(  Actif->Left + X - Movex,
                        Actif->Top + Y - Movey,
                        Actif->Width,
                        Actif->Height);
 
    }
}
Actif est un pointeur permettant de récupérer l'adresse du bon objet mais je le choisis manuellement (en informant un Edit avec l'indice de ma TList).
C'est de la bidouille tant que je n'aurai pas trouvé comment rendre la sélection automatique.