zur Startseite Infos für Behinderte Behindertensoftware Forum Programmierarchiv
Webguide Markus privat Kontakt Download Gästebuch
Online Games Entstehungsgeschichte

Screenshot speichern und drucken

Screenshot speichern

procedure Screenshot_speichern(Filename: String);
var
ADC: HDC;
aBMP: TBitmap;
MH, hBMP: THandle;
begin
aBMP := TBitmap.Create;
aBMP.Width := Screen.Width;
aBMP.Height := Screen.Height;
ADC := GetDC(0);
hBMP := CreateCompatibleBitmap(ADC, Screen.Width, Screen.Height);
MH := SelectObject(ADC, hBMP);
try
BitBlt(aBMP.Canvas.Handle, 0, 0, aBMP.Width, aBMP.Height, ADC, 0, 0, SRCCOPY);
aBMP.SaveToFile(Filename);
finally
aBMP.Free;
SelectObject(ADC, MH);
DeleteOobject(hBMP);
Releasedc(0, ADC);
end;
end;

Screenshot drucken


procedure Screenshotdrucken;
var
ADC: HDC;
aBMP: TBitmap;
MH, hBMP: THandle;
begin
aBMP := TBitmap.create;
aBMP.Width := Screen.Width;
aBMP.Height := Screen.Height;
ADC := GetDC(0);
hBMP := CreateCompatibleBitmap(ADC, Screen.Width, Screen.Height);
MH := SelectObject(ADC, hBMP);
try
BitBlt(aBMP.Canvas.Handle, 0, 0, aBMP.Width, aBMP.Height, ADC, 0, 0, SRCCOPY);
Bild_drucken(aBMP);
finally
aBMP.Free;
SelectObject(ADC, MH);
DeleteObject(hBMP);
Releasedc(0, ADC);
end;
end;

procedure Bild_drucken(Bild: TBitmap);
var
Info: PBitmapInfo;
InfoSize: DWord;
Image: Pointer;
ImageSize: DWord;
PWidth, PHeight: Integer;
Bitmap: TBitmap;
Site: Word;
aDevice: array[0..255] of char;
aDriver: array[0..255] of char;
aPort: array[0..255] of char;
PDMode: PDEVMODE;
PHMode: THandle;
DC: THandle;
X_DPI, Y_DPI: Integer;
begin
{Der ganze Code ist jetzt für meinen Drucker (berechnet für 180 DPI)
Welche Werte Du eventuell ändern mußt , siehe unten. Mache einfach mal einen Probedruck.}


Bitmap := TBitmap.Create;
Bitmap.Assign(Bild);
PWidth := Bitmap.Width*2; // Diese Werte musst Du eventuell anpassen
PHeight := Bitmap.Height*2; // "
X_DPI := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
Y_DPI := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
PWidth := PWidth * round(X_DPI / 150); // eventuell auch anpassen
PHeight := PHeight * round(Y_DPI / 150); // "
DC := Printer.Handle;
PHMode := DC;
Printer.GetPrinter(aDevice, aDriver, aPort, PHMode);
if PHMode <> 0 then
begin
PDMode := GlobalLock(PHMode);
if PDMode <> nil then
begin
PDMode^.dmOrientation := 1;
PDMode^.dmPapersize := dmPaper_A4;
GlobalUnlock(PHMode);
end;
end;
Printer.Orientation := poLandscape;
Printer.Begindoc;
with Bitmap do
begin
GetDIBSizes(Handle, InfoSize, ImageSize);
Info := AllocMem(InfoSize);
try
Image := AllocMem(ImageSize);
try
GetDIB(Handle, Palette, Info^, Image^);
with Info^.bmiHeader do
StretchDIBits(Printer.Canvas.Handle, round(X_DPI * (9 / 25.4)),
round(Y_DPI * (2 / 25.4)), PWidth, PHeight, 0, 0,
biWidth, biHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
end;
Printer.EndDoc;
Bitmap.Free;
end;

zurück zum Stichwortverzeichnis