Entwickler-Ecke

Internet / Netzwerk - Stream


Anonymous - Di 27.05.03 11:45
Titel: Stream
Hallo, habe jetzt also den Codeschnippsel aus der FAQ genommen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
   B : TBitmap;
implementation

{$R *.dfm}
procedure GetScreenShot (var ABitmap : TBitmap);  
var
  DC : THandle;
begin  
  if Assigned(ABitmap) then                  // Prüfen ob gültiges Bitmap übergeben wurde 
  begin  
    DC := GetDC(0);                          // Desktop DC holen 
    try  
      ABitmap.Width := Screen.Width;           // Bitmapgrösse den... 
      ABitmap.Height := Screen.Height;         // Bildschirm anpassen
      BitBlt(ABitmap.Canvas.Handle,            // Dekstop 
             0,0,Screen.Width,Screen.Height,   // in 
             DC,                               // das 
             0,0,                              // Bitmap 
             SrcCopy                           // kopieren 
        );  
    finally  
      ReleaseDC(0, DC);                        // DC wieder freigeben 
    end;  
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);


begin
  B := TBitmap.Create;  
  try  
    GetScreenShot(B);  
    Image1.Picture.Assign(B);  
  finally
    B.Free;
  end;  
end





end.


Wie kann ich jetzt das Bild in einen Stream fassen so das ich diesen dann versenden kann.....

Gruß

Alex


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt


Anonymous - Di 27.05.03 12:14
Titel: ok
ok, ich hab die antwort schon....

aber vielleicht kann mir nun jemand sagen wie ich es schaffe ein bild zu schießen, welches aber nicht so hochauflösend sein muss wie das oroginal desktopbild....wegen der streamgröße!!!!


focus - Di 27.05.03 12:52

hi,
um immer nur das aktive fenster zu knipsen hat

bis11 folgenden code geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure ScreenShotActiveWindow(Bild: TBitMap); 
var 
  c : TCanvas; 
  r, t : TRect; 
  h : THandle; 
begin 
  c := TCanvas.Create; 
  c.Handle := GetWindowDC(GetDesktopWindow); 
  h := GetForeGroundWindow; 
  if h<>0 then 
    GetWindowRect(h, t); 
  try 
    r := Rect(0,0,t.Right-t.left, t.Bottom-t.Top); 
    Bild.Width := t.Right-t.left; 
    Bild.Height := t.Bottom-t.Top; 
    Bild.Canvas.CopyRect(r, c, t); 
  finally 
    ReleaseDC(0, c.handle); 
    c.Free; 
  end
end;

( http://www.delphi-forum.de/viewtopic.php?t=10801&highlight=screenshot )

ich denke das verringert den traffic recht drastisch..
gruss
michael

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.