| 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; |