Glisser/ Déplacer un composant Firemonkey c++builder - C++ - Programmation
Marsh Posté le 07-11-2017 à 20:27:34
Cette solution marche.
Elle nécessite deux variables globales, mais ça fonctionne.
public: // Déclarations utilisateur
bool Deplacement;
int XPos, YPos;
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
float X, float Y)
{
XPos = X;
YPos = Y;
if (Shift.Contains(ssLeft)) Deplacement = true;
}
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, float X,
float Y)
{
if ( Deplacement == true )
{
Image1->Position->X += X-XPos;
Image1->Position->Y += Y-YPos;
}
}
void __fastcall TFor:lol:m1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
float X, float Y)
{
Deplacement = false;
}
Marsh Posté le 28-10-2017 à 13:52:13
Bonjour;
J'aimerais déplacer un Bouton (ou autre composant).
Erreur avec
- if (Shift.Contains(ssLeft)) {ReleaseCapture(); SendMessage(MonBouton, WM_SYSCOMMAND, SC_MOVE+1,0); }
Ci-dessous mon code :
Dans Unit2.h
private: // Déclarations utilisateur
TButton *MonBouton; // je crée un bouton
void __fastcall MonBoutonClick(TObject *Sender);
void __fastcall MonBoutonMouseMove(TObject *Sender, TShiftState Shift, float X,
float Y);
Dans Unit2.cpp
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
MonBouton = new TButton(this); // création de MonBouton
MonBouton->Position->X = 20;
MonBouton->Position->Y = 20;
MonBouton->Text = "Bouton";
MonBouton->Parent = Form2;
MonBouton->OnClick = MonBoutonClick;
MonBouton->OnMouseMove = MonBoutonMouseMove;
}
void __fastcall TForm2::MonBoutonClick(TObject *Sender)
{
ShowMessage("Tu viens de cliquer sur MonBouton" );
}
void __fastcall TForm2:: MonBoutonMouseMove(TObject *Sender, TShiftState Shift, float X,
float Y)
{
// ShowMessage("Tu viens de passer sur MonBouton" ); // le message s'affiche si le curseur passe sur MonBouton
if (Shift.Contains(ssLeft))
{
ReleaseCapture();
SendMessage(MonBouton, WM_SYSCOMMAND, SC_MOVE+1,0); // erreur
}
}
Merci d'avance pour vos réponses