FAQ DelphiConsultez toutes les FAQ
Nombre d'auteurs : 124, nombre de questions : 934, dernière mise à jour : 23 octobre 2024 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).
Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.
L'équipe Delphi de Developpez.com.
Pour connaître la position de la souris, il suffit d'utiliser la procédure GetCursorPos (var P : TPoint).
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 | var Position: TPoint; begin GetCursorPos(Position); Showmessage('Les coordonnées de la souris sont X: ' + IntToStr(Position.X) + ' et Y: ' + IntToStr(Position.Y)); end; |
Il suffit de déplacer la souris, faire croire à Windows que le bouton est appuyé, puis relâcher et remettre (ou pas) le curseur en place. Voici comment faire :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var MyPoint: TPoint; begin GetCursorPos(MyPoint); {Récupère la position du curseur } SetCursorPos(300, 200); {Positionne le curseur sur la fiche } mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); {Simule l'action de clic du bouton gauche de la souris } mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); {Simule l'action de relâcher du bouton gauche de la souris } SetCursorPos(MyPoint.X, MyPoint.Y); {Repositionne le curseur à sa position d'origine } end; |
- MOUSEEVENTF_RIGHTDOWN et MOUSEEVENTF_RIGHTUP pour provoquer des clics droits ;
- MOUSEEVENTF_MIDDLEDOWN et MOUSEEVENTF_MIDDLEUP pour provoquer un clic du bouton du milieu ;
- MOUSEEVENTF_MOVE pour faire croire que la souris a bougé sans la faire bouger ;
- MOUSEEVENTF_WHEEL pour faire croire que la molette a bougé (sans indication de sens).
Il est possible de tester à tout moment l'état d'une touche du clavier ou d'un bouton de la souris grâce à la fonction API :
Code Delphi : | Sélectionner tout |
function GetAsyncKeyState(vKey: Integer): SHORT; stdcall;
Par exemple, pour tester l'état du bouton gauche de la souris :
Code Delphi : | Sélectionner tout |
1 2 3 4 5 6 | procedure TForm1.Timer1Timer(Sender: TObject); begin If (GetAsyncKeyState(VK_LBUTTON)And $8000)<>0 Then Label1.Caption := 'Enfoncé' Else Label1.Caption := 'Relâché'; end; |
Pour récupérer la position du Hotspot d'un curseur, on utilise la méthode GetIconInfo.
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | function GetHotSpot(CursorIndex:TCursor):TPoint; var iconInfo: TIconInfo; begin if GetIconInfo(Screen.Cursors[CursorIndex], iconInfo) then try Result.X:=iconInfo.xHotspot; Result.Y:=iconInfo.yHotspot; finally DeleteObject(IconInfo.hbmColor); DeleteObject(IconInfo.hbmMask); //Ces 2 membres sont créés par l'appel à GetIconInfo. Il faut donc les supprimer. end; end; |
Pour cela, on dessine le curseur récupéré sur le TBitmap à l'aide de la méthode DrawIconEx.
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | procedure CursorToBitmap(CursorIndex:TCursor;var ABmp:TBitmap); var hCursor: THandle; begin ABmp.Width := 32; ABmp.Height := 32; ABmp.PixelFormat := pf24bit; // pour éviter de travailler avec les palettes hCursor := Screen.Cursors[CursorIndex]; DrawIconEx(ABmp.Canvas.Handle, 0,0, hCursor, 32,32, 0,0, DI_NORMAL); // Remplissage du curseur depuis "l'extérieur" de telle façon qu'un curseur blanc // apparaisse blanc. on suppose que le coin supérieur droit sera le point de départ du remplissage // On suppose que RGB(250,250,250) sera la couleur de "transparence". ABmp.Canvas.Brush.Color := RGB(250,250,250); ABmp.Canvas.FloodFill(31,0, clWhite, fsSurface); // Le coin supérieur gauche de certains curseurs est "bloqué" contre le floodfill ABmp.Canvas.FloodFill(0,0, clWhite, fsSurface); end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | procedure TForm1.Button1Click(Sender: TObject); var iconInfo: TIconInfo; abmp:tbitmap; begin abmp:=TBitmap.Create; try //On récupère mon Bitmap (en premier paramètre, //on indique quel curseur on souhaite : //crHandPoint, crHourGlass, crArrow, etc.) CursorToBitmap(crHandPoint,abmp); //On l'affiche sur la fiche Form1.Canvas.Draw(5,5,abmp); //ou le sauvegarde abmp.saveTofile('MonCurseur.bmp'); finally abmp.Free; end; end; |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.