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 :
J'ajoute ensuite les pointeurs dans un TList.
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; }
Et voici l'événement appelé lors du déplacement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // Ajout du pointeur dans la liste listeImages->Add((void *)MonImage);
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).
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); } }
C'est de la bidouille tant que je n'aurai pas trouvé comment rendre la sélection automatique.
Partager