cs_etrix
Messages postés55Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention30 janvier 2004
-
3 avril 2003 à 20:40
Illuzmax
Messages postés3Date d'inscriptionmercredi 6 octobre 2004StatutMembreDernière intervention24 avril 2006
-
23 juin 2005 à 14:10
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
kakochime
Messages postés24Date d'inscriptionmardi 14 mai 2002StatutMembreDernière intervention 5 décembre 20081 4 avril 2003 à 15:58
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;
cs_etrix
Messages postés55Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention30 janvier 2004 4 avril 2003 à 17:30
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)
kakochime
Messages postés24Date d'inscriptionmardi 14 mai 2002StatutMembreDernière intervention 5 décembre 20081 4 avril 2003 à 17:39
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és24Date d'inscriptionmardi 14 mai 2002StatutMembreDernière intervention 5 décembre 20081 4 avril 2003 à 17:43
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_etrix
Messages postés55Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention30 janvier 2004 4 avril 2003 à 19:01
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
kakochime
Messages postés24Date d'inscriptionmardi 14 mai 2002StatutMembreDernière intervention 5 décembre 20081 4 avril 2003 à 19:22
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...
cs_etrix
Messages postés55Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention30 janvier 2004 4 avril 2003 à 20:44
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
kakochime
Messages postés24Date d'inscriptionmardi 14 mai 2002StatutMembreDernière intervention 5 décembre 20081 4 avril 2003 à 21:02
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
cs_etrix
Messages postés55Date d'inscriptionmardi 25 mars 2003StatutMembreDernière intervention30 janvier 2004 4 avril 2003 à 21:21
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)