PB Capture Souris [Résolu]

Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Dernière intervention
11 novembre 2016
- - Dernière réponse : fbalien
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
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
Dernière intervention
5 avril 2012
3
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 121 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
Dernière intervention
11 novembre 2016
1
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.