![]() |
ScreenShot-Programm zu groß
Tach!
Mit dem Code
Delphi-Quellcode:
kann man ja einen ScreenShot machen. Das mach' ich in einem Programm, das kein Formular besitzt, da ich es einfach und schnell haben wollte.
var
DC:HDC; B:TBitmap; B:=TBitmap.Create; B.Width:=Screen.Width; B.Height:=Screen.Height; DC:=GetWindowDC(GetDesktopWindow); BitBlt(B.Canvas.Handle,0,0,B.Width,B.Height,DC,0,0,SrcCopy); B.SaveToFile('D:\ScreenShot.bmp'); B.Free; Allerdings muss man, um die globale Variable Screen abfragen zu können, die Unit Forms usen und, um HDC zu verwenden, die Unit Windows. Durch die Nutzung dieser Units ist meine EXE mindestens 360 KB groß. Ist auf irgeneinem Wege möglich das Programm klein zu halten ? Danke für jede konstruktive Antwort! |
Re: ScreenShot-Programm zu groß
![]() |
Re: ScreenShot-Programm zu groß
Die größe des Auflösung des Bildschirms bekommst du auch mit [msdn]GetSystemMetrics] und den Flags SM_CXSCREEN, SM_CYSCREEN. Auf die Unit Windows wirst du nicht verzichten können, aber die macht deine Exe auch nicht "groß".
|
Re: ScreenShot-Programm zu groß
Delphi-Quellcode:
procedure ScreenShot(x: Integer;
y: Integer; //(x, y) = Left-top coordinate Width: Integer; Height: Integer; //(Width-Height) = Bottom-Right coordinate bm: TBitMap); //Destination var dc: HDC; lpPal: PLOGPALETTE; begin {test width and height} if ((Width = 0) or (Height = 0)) then Exit; bm.Width := Width; bm.Height := Height; {get the screen dc} dc := GetDc(0); if (dc = 0) then Exit; {do we have a palette device?} if (GetDeviceCaps(dc, RASTERCAPS) and RC_PALETTE = RC_PALETTE) then begin {allocate memory for a logical palette} GetMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY))); {zero it out to be neat} FillChar(lpPal^, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)), #0); {fill in the palette version} lpPal^.palVersion := $300; {grab the system palette entries} lpPal^.palNumEntries := GetSystemPaletteEntries(dc, 0, 256, lpPal^.palPalEntry); if (lpPal^.PalNumEntries <> 0) then {create the palette} bm.Palette := CreatePalette(lpPal^); FreeMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY))); end; {copy from the screen to the bitmap} BitBlt(bm.Canvas.Handle, 0, 0, Width, Height, Dc, x, y, SRCCOPY); {release the screen dc} ReleaseDc(0, dc); end; |
Re: ScreenShot-Programm zu groß
@arbu man: UPX ist KEINE Lösung denn dadruch wird nicht weniger speicher verbraucht sondern das Gegenteil tritt ein. Nur die Exe-Datei ist kleiner, aber da kann man noch eher winzip etc. nutzen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz