| Autor |
Beitrag |
tortom1000
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: So 19.09.04 14:23
Hallo,
ich habe bei einem Screenshotprogramm gesehen, das dort der Inhalt des aktiven Fensters gegrabbt wurde. (Ohne Rahmen und Menüleisten).
Weiß jemand, wie das funktioniert?
Vielen Dank, Tom.
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: So 19.09.04 14:33
Eigentlich kein Problem. Du brauchst nur das Handle des Fensters, das du capturen möchtest. Alles andere machst du dann mit GetDC und Canvas.
GETDC
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: So 19.09.04 14:55
geht unter XP auf einfach mit Alt + Druck  Da braucht man kein Programm für.... abr für lernzecke natrülich immer wieder gern geschrieben
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
tortom1000 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: So 19.09.04 16:26
hi maxk,
wenn du weißt, wie es geht, wäre ich dir für tipps bezgl. änderungen in dem quelltext sehr dankbar, damit nur noch der inhalt des aktiven fensters "gegrabbt" werden.
[/code]
procedure TForm1.takeScreenShot2(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;
Bild.savetofile(file);
end;
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: So 19.09.04 16:49
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:
| var H:THandle; DC:HDC; Canvas:TCanvas;
ARect:TRect; AWidth,AHeight:integer; begin H:=GetForegroundWindow; DC:=GetWindowDC(H);
Windows.GetWindowRect(H,ARect);
AWidth:=ARect.Right-ARect.Left; AHeight:=ARect.Bottom-ARect.Top;
ARect:=Rect(0,0,AWidth,AHeight);
Canvas:=TCanvas.Create; try Canvas.Handle:=DC;
Bild.Width:=AWidth; Bild.Height:=AHeight; Bild.Canvas.CopyRect(ARect,Canvas,ARect); finally Canvas.Free; ReleaseDC(H,DC); end; end; |
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
tortom1000 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: So 19.09.04 17:18
hallo,
vielen Dank erstmal für deine Unterstützung. ich weiß, das einem profi die newbie-fragen
schon mal blöde erscheinen, aber jeder fängt ja mal klein an.....
wenn ich deinen quelltext benutze, habe ich ebenso wie bei meinem (abgekupferten  )
quelltext im resultat ein bild, welches jedoch den fensterrahmen und die programmmenüleiste enthält. ich habe deinen quelltext lediglich um die bildabspeicherung ergänzt. fehlt denn da noch etwas wesentliches oder mache ich noch einen fehler?
viele grüße und nochmals danke für deine hilfe
Tom
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: So 19.09.04 17:55
 Dann habe ich deine Frage falsch verstanden. Egal! Dann musst du statt DC:=GetWindowDC(H); einfach DC:=GetDC(H); nehmen 
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
tortom1000 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: So 19.09.04 18:07
Funktioniert perfekt.
Vielen Dank für deine schnelle Hilfe.
Tom
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: So 19.09.04 18:13
 Mir fällt grad auf, dass ich es ja oben schon richtig hatte:
| maxk hat folgendes geschrieben: | | Alles andere machst du dann mit GetDC und Canvas. |
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|