Capture d'écran de la fenetre active

Signaler
Messages postés
55
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
30 janvier 2004
-
Messages postés
3
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
24 avril 2006
-
salut,
voilà j'ai deja bcp chercher mais j'ai rien trouver pour faire une capture d'ecran de la fenetre active en delphi.
j'espere vraiment que qqun sait packe j'en ai vraiment tres besoin. merci a tous

13 réponses

Messages postés
24
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
5 décembre 2008
1
Salut,

Il te faut trouver le handle de la fenêtre active, puis sa taille et enfin, copier son canvas dans ton bitmap et enregistrer le bitmap.

procedure Capture;
var
WinCanvas: TCanvas;
R:Trect;
Bmp:TBitmap;

BEGIN
WinCanvas:=TCanvas.Create;//créer le canvas pour la copie
Bmp:=Tbitmap.Create;//Créer un bitmap ;-)
WinCanvas.Handle:=GetWindowDC(GetForeGroundWindow);//Trouve le handle de la fenêtre active
GetWindowRect(GetForeGroundWindow,R);//Charge R avec sa position et sa taille
Bmp.Width:=R.Right-R.Left;//Largeur de ton Bitmap
Bmp.Height:=R.Bottom-R.Top;//Hauteur de ton Bitmap
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,WinCanvas.Handle,0,0, SRCCOPY);//Copie le Canvas de ta fenêtre dans ton Bitmap
...
//et voilà, reste plus qu'à enregistrer ton Bitmap
...
//Libère la mémoire
WinCanvas.Free;
Bmp.free;

END;

Kakochime
Messages postés
55
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
30 janvier 2004

m'en sort pas ...
je met le code que tu m'a donné dans une action onclick, ca me donne ca:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
procedure Capture;
var
WinCanvas: TCanvas;
R:Trect;
Bmp:TBitmap;

BEGIN
WinCanvas:=TCanvas.Create;//créer le canvas pour la copie
Bmp:=Tbitmap.Create;//Créer un bitmap ;-)
WinCanvas.Handle:=GetWindowDC(GetForeGroundWindow);//Trouve le handle de la fenêtre active
GetWindowRect(GetForeGroundWindow,R);//Charge R avec sa position et sa taille
Bmp.Width:=R.Right-R.Left;//Largeur de ton Bitmap
Bmp.Height:=R.Bottom-R.Top;//Hauteur de ton Bitmap
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,WinCanvas.Handle,0,0, SRCCOPY);//Copie le Canvas de ta fenêtre dans ton Bitmap
...
//et voilà, reste plus qu'à enregistrer ton Bitmap
...
//Libère la mémoire
WinCanvas.Free;
Bmp.free;

end;

end.

et j'ai 2erreurs:

[Erreur] Unit1.pas(1143): Instruction attendu(e) mais 'PROCEDURE' trouvé(e)

[Erreur] Unit1.pas(1157): Instruction attendu(e) mais '..' trouvé(e)

y'a un truc ke j'ai pas du faire ou mal ;(
Messages postés
24
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
5 décembre 2008
1
Manque un END;... :-)
Mais pourquoi tu mets la procedure dans le onclick ???
Fait plutôt comme ça, ça sera plus clair.

//--------------------------
procedure Capture
BEGIN
...
...
END;
//----------------------------
procedure TForm1.SpeedButton1Click(Sender: TObject);
BEGIN
Capture;//Appel de la procedure
END;
//-----------------------------

Kakochime
Messages postés
24
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
5 décembre 2008
1
Hum, je viens de m'apercevoir que tu auras un autre problème pour ta capture. Quand tu vas cliquer sur ton bouton, c'est ta forme qui aura le focus et qui deviendra la fenêtre active... Va falloir utiliser les touches de ton clavier pour faire la capture.

Kakochime
Messages postés
55
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
30 janvier 2004

ben si c ma form qui sera capturer j'suis tres content packe c ca k'il me fo :) :), bon je test et je te dit des nouvelles (merci pour ton aide !)
Messages postés
55
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
30 janvier 2004

bon, donc ca a l'air de marcher, j'ai ca:

//--------------------------
procedure Capture;
var
WinCanvas: TCanvas;
R:Trect;
Bmp:TBitmap;

BEGIN
WinCanvas:=TCanvas.Create;//créer le canvas pour la copie
Bmp:=Tbitmap.Create;//Créer un bitmap ;-)
WinCanvas.Handle:=GetWindowDC(GetForeGroundWindow);//Trouve le handle de la fenêtre active
GetWindowRect(GetForeGroundWindow,R);//Charge R avec sa position et sa taille
Bmp.Width:=R.Right-R.Left;//Largeur de ton Bitmap
Bmp.Height:=R.Bottom-R.Top;//Hauteur de ton Bitmap
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,WinCanvas.Handle,0,0, SRCCOPY);//Copie le Canvas de ta fenêtre dans ton Bitmap

//et voilà, reste plus qu'à enregistrer ton Bitmap

//Libère la mémoire
WinCanvas.Free;
Bmp.free;

end;

//----------------------------
procedure TForm1.SpeedButton1Click(Sender: TObject);
BEGIN
Capture;//Appel de la procedure
END;
//-----------------------------

end.

le programme se lance j'appuie sur mon SpeedButon1, la rien se pace, je pense que c normal, kes ke je fé si par ex je veux la capture dans une timage, ou bien je sais pas comment je dois continuer packe pour l'instant y'a rien

merci bcp
Messages postés
24
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
5 décembre 2008
1
arf, je pensais que tu voulais seulement enrgistrer le résultat.
Pour voir ta capture dans une image, rajoute sur ta forme un Timage :-), puis ajoute cette ligne à la place de ...//et voilà, reste plus qu'à enregistrer ton Bitmap...

Image1.Picture.Graphic.Assign(Bmp);

Kakochime
Messages postés
55
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
30 janvier 2004

arfouille, now j'ai ca:

//--------------------------
procedure Capture;
var
WinCanvas: TCanvas;
R:Trect;
Bmp:TBitmap;

BEGIN
WinCanvas:=TCanvas.Create;//créer le canvas pour la copie
Bmp:=Tbitmap.Create;//Créer un bitmap ;-)
WinCanvas.Handle:=GetWindowDC(GetForeGroundWindow);//Trouve le handle de la fenêtre active
GetWindowRect(GetForeGroundWindow,R);//Charge R avec sa position et sa taille
Bmp.Width:=R.Right-R.Left;//Largeur de ton Bitmap
Bmp.Height:=R.Bottom-R.Top;//Hauteur de ton Bitmap
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,WinCanvas.Handle,0,0, SRCCOPY);//Copie le Canvas de ta fenêtre dans ton Bitmap

//et voilà, reste plus qu'à enregistrer ton Bitmap

//Libère la mémoire
WinCanvas.Free;
Bmp.free;

end;

//----------------------------
procedure TForm1.SpeedButton1Click(Sender: TObject);
BEGIN
Capture;//Appel de la procedure

END;

//-----------------------------
Image36.Picture.Graphic.Assign(Bmp);

end.

[Erreur] Unit1.pas(1167): Déclaration attendu(e) mais identificateur 'Image36' trouvé(e)

je c pas ce kia, ce ke j'ai mal fait? merci ! (on va y'ariver :o)
Messages postés
55
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
30 janvier 2004

ah oui avec un end; en + a la fin ca marche pas (peut etre ke c ke tu pensais)

[Erreur] Unit1.pas(1168): '.' attendu(e) mais ';' trouvé(e)
Messages postés
24
Date d'inscription
mardi 14 mai 2002
Statut
Membre
Dernière intervention
5 décembre 2008
1
Euh, faut faire gaffe un minimum quand même avant de dire que ça marche pas !
Ton image36 se trimballe comme ça en plein milieu de nulle part ?!!!!...hum, hum, hum.

Image36.Picture.Graphic.Assign(Bmp); à placer entre BlitBlt et WinCanvas.free

Kakochime
Messages postés
55
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
30 janvier 2004

arf ;( je l'ai fait et maintenant

//--------------------------
procedure Capture;
var
WinCanvas: TCanvas;
R:Trect;
Bmp:TBitmap;

BEGIN
WinCanvas:=TCanvas.Create;//créer le canvas pour la copie
Bmp:=Tbitmap.Create;//Créer un bitmap ;-)
WinCanvas.Handle:=GetWindowDC(GetForeGroundWindow);//Trouve le handle de la fenêtre active
GetWindowRect(GetForeGroundWindow,R);//Charge R avec sa position et sa taille
Bmp.Width:=R.Right-R.Left;//Largeur du Bitmap
Bmp.Height:=R.Bottom-R.Top;//Hauteur du Bitmap
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,WinCanvas.Handle,0,0, SRCCOPY);//Copie le Canvas de la fenêtre dans le Bitmap
end;

Image36.Picture.Graphic.Assign(Bmp);

//Libère la mémoire
WinCanvas.Free;
Bmp.free;

//----------------------------
procedure TForm1.SpeedButton1Click(Sender: TObject);
BEGIN
Capture;//Appel de la procedure
end;

end.

[Erreur] Unit1.pas(1152): Déclaration attendu(e) mais identificateur 'Image36' trouvé(e)

snif
on y est tt presque
Messages postés
3
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
24 avril 2006

<HR>



ii
Messages postés
3
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
24 avril 2006

ii