PB Capture Souris [Résolu]

fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 28 août 2007 à 11:21 - Dernière réponse : fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention
- 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
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 28 août 2007 à 18:24
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

Merci WhiteHippo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de WhiteHippo
fbalien 265 Messages postés dimanche 7 décembre 2003Date d'inscription 11 novembre 2016 Dernière intervention - 28 août 2007 à 22:23
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.