Wydruk bitmapy i naniesionych na nią danych

0

Mam 2 formy: na pierwszej jest kilka edit' ów Na drugiej bitmapę z label 'ami które przejmują wpis z Form1 Jak wydrukować blankiet wraz z naniesionymi w label'ach danymi ?

0

Mam nadzieje ze zechcesz przyjąć podziękowanie :) znaczy się ze Tylko formularz wraz z zawartością label'i będzie wydrukowany? Bitmapa jako druczek + tekst ? Dziękuje Karol :)

0

Tu masz gotowca:

procedure ScreenshotMain(const Bitmap: TBitmap; const ScreenArea: TRect);
var
  BitmapRect, ScreenRect: TRect;
  DesktopDC: HDC;
  DesktopCanvas: TCanvas;
begin
  BitmapRect := Rect(0, 0, ScreenArea.Right - ScreenArea.Left, ScreenArea.Bottom - ScreenArea.Top);
  ScreenRect := Rect(ScreenArea.Left, ScreenArea.Top, ScreenArea.Right, ScreenArea.Bottom);
  Bitmap.PixelFormat := pf24bit;  // optional
  Bitmap.Width  := ScreenArea.Right  - ScreenArea.Left;
  Bitmap.Height := ScreenArea.Bottom - ScreenArea.Top;
  DesktopDC := GetWindowDC(GetDeskTopWindow);
  try
    DesktopCanvas := TCanvas.Create;
    try
      DesktopCanvas.Handle := DesktopDC;
      Bitmap.Canvas.CopyMode := cmSrcCopy;
      Bitmap.Canvas.CopyRect(BitmapRect, DesktopCanvas, ScreenRect);
    finally
      DesktopCanvas.Free;
    end;
  finally
    ReleaseDC(GetDeskTopWindow, DesktopDC);
  end;
end;

function ScreenshotArea(IncludeCursor: Boolean; const ScreenArea: TRect): TBitmap;
var
  r: TRect;
  CI: TCursorInfo;
  Icon: TIcon;
  II: TIconInfo;
begin
  Result := TBitmap.Create;
  r := ScreenArea;
  ScreenshotMain(Result, r);
  if IncludeCursor then
  begin
    Icon := TIcon.Create;
    try
      CI.cbSize := SizeOf(CI);
      if GetCursorInfo(CI) then
        if CI.flags = CURSOR_SHOWING then
        begin
          Icon.Handle := CopyIcon(CI.hCursor);
          if GetIconInfo(Icon.Handle, II) then
          try
            Result.Canvas.Draw(ci.ptScreenPos.x - Integer(II.xHotspot) - r.Left, ci.ptScreenPos.y - Integer(II.yHotspot) - r.Top, Icon);
          finally
            DeleteObject(II.hbmMask);
            DeleteObject(II.hbmColor);
          end;
        end;
    finally
      Icon.Free;
    end;
  end;
end;


Function GetControlScreenShot(ControlHandle: THandle): TBitmap;
 Var
  R: TRect;
begin
  if GetWindowRect(ControlHandle, R) then Result:=ScreenshotArea(false, R);
End;


procedure TForm1.Button1Click(Sender: TObject);
 Var
  BM: Tbitmap;
begin
  Panel1.BevelInner:=bvNone;
  Panel1.BevelOuter:=bvNone;
  Update;
  BM:=GetControlScreenShot(Panel1.Handle);
  BM.SaveToFile('c:\PanelShot.bmp');
  BM.Free;
end;

Kładziesz tylko na panel co tam chcesz (Image, Edit, Label, Memo, itd.) i dostajesz screenshota jego zawartości. Dla np. samego Image możesz dać Image.Align:=alClient;.

1 użytkowników online, w tym zalogowanych: 0, gości: 1