PB Capture Souris [Résolu]

Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
- - Dernière réponse : fbalien
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
- 28 août 2007 à 22:23
    Bonjour

j'utilise le code suivant pour faire une capture de la souris

procedure TForm1.affichesouris;
var
  infoCurseur: TCursorInfo;
  fIcon: TIcon;
  infoIcon: TIconInfo;
begin
  infocurseur.hCursor := 0;
  infoCurseur.cbSize := SizeOf(infoCurseur);
  fIcon := TIcon.Create;
  if GetCursorInfo(infoCurseur) then
    if infoCurseur.Flags = CURSOR_SHOWING then
    begin
      fIcon.Handle := CopyIcon(infocurseur.hCursor );
      if ficon.Handle = 0 then caption := (SysErrorMessage(GetLastError )) + inttostr(infocurseur.hCursor );
      if GetIconInfo(fIcon.Handle, infoIcon) then
      begin
        DrawIcon(DCcompatible,infoCurseur.ptScreenPos.x-Integer(infoIcon.xHotspot),
                              infoCurseur.ptScreenPos.y-Integer(infoIcon.yHotspot),fIcon.Handle);
      end;
      DestroyIcon(icon.Handle );
    end;
  fIcon.free;
end;

mais au bout d'un certain temps çà ne marche plus ( plantage au bout de 9964 exécutions)
cela semble planter à la ligne fIcon.Handle := CopyIcon(infocurseur.hCursor );
où CopyIcon me renvoie un "paramètre incorrecte"
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
3
Merci
Bonsoir


Ton problème vient du fait que des ressources ne sont pas désallouées. Il est dit dans la doc windows :
"GetIconInfo creates bitmaps for the hbmMask and hbmColor members of ICONINFO. The calling application must manage these bitmaps and delete them when they are no longer necessary. "

En clair, il ne faut pas oublier de les libérer à la fin de ta fonction. Donc en ajoutant un 
  DeleteObject(infoIcon.hbmMask);
  DeleteObject(infoIcon.hbmColor);
avant le
  DestroyIcon(ficon.Handle);
cela devrait solutionner ton problème.

Cordialement. <hr />"L'imagination est plus importante que le savoir." Albert Einstein

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 158 internautes nous ont dit merci ce mois-ci

Commenter la réponse de WhiteHippo
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
0
Merci
Merci WhiteHippo
En effet apres recherche sur une autre solution je suis tombé sur cette info
cela a tourné plus de 4h sans planter
Commenter la réponse de fbalien