IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ DelphiConsultez toutes les FAQ

Nombre d'auteurs : 124, nombre de questions : 929, dernière mise à jour : 31 décembre 2023  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.

SommaireSystèmeSouris (5)
précédent sommaire suivant
 

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;

Mis à jour le 18 octobre 2013 atlantis

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;
Il existe aussi les constantes :
  • 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).

Mis à jour le 18 octobre 2013 Al-Yazdi

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;
Cette fonction retourne l'état de la touche, le bit 15 du résultat est à 1 si la touche (ou le bouton) est actuellement enfoncée. Le test fonctionne aussi même si l'application n'est pas active. Le numéro de touche passé en paramètre doit être le code de touche virtuel. Delphi définit les constantes VK_xxxx pour chaque touche du clavier.

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;

Mis à jour le 18 octobre 2013 Nono40

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;
Note : ce code nécessite l'ajout des unités Windows, Types, Forms et Graphics dans la clause uses.

Mis à jour le 14 janvier 2014 Lung

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;
Exemple d'utilisation dans le OnClick d'un TButton :
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;
Note : ce code nécessite l'ajout des unités Windows, Types, Forms et Graphics dans la clause uses

Mis à jour le 14 janvier 2014 LadyWasky

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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.