Capture d'ecran VC++ - Programmation
Marsh Posté le 05-04-2001 à 16:21:27
avec delphi c'est super facile. Tu crées un instance de l'objet TPaintBox (zone de dessin normalement) et ensuite tu choppes le handle de la zonne de dessin du bureau avec une fonction de l'API Win32. Tu dis que l'instance que tu a créé a pour handle celui que tu as choppé et tu fais toto.saveToFile(je sais plus quelle est la méthode mais en gros ca prends au moins 3 4 ligne en delphi).
Malheureusement je ne peux pas etre plus précis ccar je ne m'en souvient plus (il y a 1 an deja) et le source n'est pas tout pret (environ 2km de la ou je suis maintenat)
Marsh Posté le 05-04-2001 à 18:33:31
ouais ok, tu pourrais le copier coller dans les jours qui viennent ca serait sympa, merci d'avance
Marsh Posté le 08-04-2001 à 00:32:25
tiens j'ai pu retrouver ce code
en gros je fais des dessin sur le bureau en le faisant passer pour un canvas. Donc je peux utiliser toutes les méthodes de la classe TCanvas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
private
{ Déclarations privées}
bureau:TCanvas;
public
{ Déclarations publiques}
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
bureau := TCanvas.Create;
bureau.Handle := GetDC(hWnd_Desktop);
end;
procedure TForm1.Button1Click(Sender: TObject);
Var h,ht:longint;
begin
bureau.Pen.Color := clWhite;
bureau.Font.Name := 'Courier New';
bureau.Font.Size := Trunc(Screen.Width / 6.4);
ht := bureau.TextHeight('Blaireu');
h := 0;
while ( h < Screen.Height ) do
begin
bureau.Textout(0,h,'Blaireau');
h := h + ht;
end;
Form1.Hide;
Form1.Show;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
{ bureau.Pen.Color := clBlack;
bureau.FillRect(Rect(0,0,Screen.Width-1,Screen.Height-1));
}end;
procedure TForm1.Button2Click(Sender: TObject);
Var c,r,v,b:longint;
nx,ny:longint;
px,py:longint;
bx,by:longint;
nb:longint;
x,y:longint;
tmp:array [0..319,0..239] of longint;
begin
// zomm inverse
{ initialisation }
PaintBox1.Canvas.CopyRect(Rect(0,0,320,240),bureau,Rect(0,0,Screen.Width,Screen.Height));
{ nx := Screen.Width div 320;
ny := Screen.Height div 200;
for x := 0 to 319 do
for y := 0 to 239 do
begin
px := nx * x;
py := ny * y;
r := 0;
v := 0;
b := 0;
nb := 0;
for bx := px to (px+nx - 1) do
for by := py to (py+ny - 1) do
begin
inc(nb);
c := bureau.Pixels[bx,by];
r := r + ((c shr 16) and 255);
v := v + ((c shr 8) and 255);
b := b + ( c and 255);
end;
r := r div nb;
v := v div nb;
b := b div nb;
tmp[x,y] := (r shl 16) + (v shl 8) + b;
end;
for x := 0 to 319 do
for y := 0 to 239 do
PaintBox1.Canvas.Pixels[x,y] := tmp[x,y];}
end;
end.
Marsh Posté le 05-04-2001 à 15:52:59
Comment le programmer ???
Mon logiciel devra faire une capture de l'ecran dans sa totalite et l'enregistrer au format bitmap sur support....