Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Richedit Formdruck ? (https://www.delphipraxis.net/63962-richedit-formdruck.html)

Vader 25. Feb 2006 10:22


Richedit Formdruck ?
 
hallo,

habe auf meiner form einige richedit's
plaziert, in der laufzeit habe ich dort dann was reinkopiert, jetzt wollte ich einen ausdruck von der
form machen
Delphi-Quellcode:
form1.print;

siehe da, der reinkopierte text in den richedit's wird nicht mitausgedruckt, auch dann nicht wenn ich
was reinschreibe in der laufzeit ?

wie ist das möglich,und wie kann ich das anderes lösen ?
mfg vader

Die Muhkuh 25. Feb 2006 11:15

Re: Richedit Formdruck ?
 
Willst du die komplette Form drucken oder nur die RichEdits?

Wenn ja, dann musste RichEdit.Print benutzen.

Vader 25. Feb 2006 11:57

Re: Richedit Formdruck ?
 
die komplete form mit den inhalt der richedit's !
mfg vader

marabu 25. Feb 2006 13:15

Re: Richedit Formdruck ?
 
Hallo Vader,

ich habe mir zu diesem Zweck folgendes zurecht gelegt - vielleicht hilft es auch dir:

Delphi-Quellcode:
function GrabImage(h: HWND): TBitMap;
var
  dc: HDC;
  lpPal: PLogPalette;
  r: TRect;
begin
  dc := GetDC(0);
  GetWindowRect(h, r);
  Result := TBitMap.Create;;
  Result.Width := Succ(r.Right - r.Left);
  Result.Height := Succ(r.Bottom - r.Top);
  if (GetDeviceCaps(dc, RASTERCAPS) AND RC_PALETTE = RC_PALETTE) then
  begin
    GetMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
    FillChar(lpPal^, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)), #0);
    lpPal^.palVersion := $300;
    lpPal^.palNumEntries := GetSystemPaletteEntries(dc, 0, 256, lpPal^.palPalEntry);
    if (lpPal^.PalNumEntries <> 0) then
      Result.Palette := CreatePalette(lpPal^);
    FreeMem(lpPal, sizeof(TLOGPALETTE) + (255 * sizeof(TPALETTEENTRY)));
  end;
  BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, dc, r.Left, r.Top, SRCCOPY);
  ReleaseDC(0, dc);
end;
Delphi-Quellcode:
procedure PrintImage(const x, y, w, h: Integer; bm: TBitMap);
var
  Info: PBitmapInfo;
  InfoSize: DWORD;
  Image: Pointer;
  ImageSize: DWORD;
  Bits: HBITMAP;
  DIBWidth, DIBHeight: DWORD;
begin
  with Printer do
  begin
    Canvas.Lock;
    try
      Bits := bm.Handle;
      GetDIBSizes(Bits, InfoSize, ImageSize);
      Info := AllocMem(InfoSize);
      try
        Image := AllocMem(ImageSize);
        try
          GetDIB(Bits, 0, Info^, Image^);
          with Info^.bmiHeader do
          begin
            DIBWidth := biWidth;
            DIBHeight := biHeight;
          end;
          StretchDIBits(
            Canvas.Handle,
            x, y, w, h,
            0, 0, DIBWidth, DIBHeight,
            Image, Info^, DIB_RGB_COLORS, SRCCOPY
          );
        finally
          FreeMem(Image, ImageSize);
        end;
      finally
        FreeMem(Info, InfoSize);
      end;
    finally
      Canvas.Unlock;
    end;
  end;
end;
Aufrufbeispiele:

Delphi-Quellcode:
procedure TDemoForm.SaveButtonClick(Sender: TObject);
begin
  with GrabImage(Handle) do
  begin
    SaveToFile(ChangeFileExt(ParamStr(0), '.bmp'));
    Free;
  end;
end;

procedure TDemoForm.PrintButtonClick(Sender: TObject);
var
  bm: TBitMap;
  ratio: Extended;
  iOffset, iMaxWidth, iWidth, iHeight: Cardinal;
begin
  bm := GrabImage(Handle);
  try
    ratio := bm.Width / bm.Height;
    with Printer do
    begin
      iMaxWidth := Succ(Canvas.ClipRect.Right - Canvas.ClipRect.Left);
      iWidth := Round(iMaxWidth * 0.8);
      iHeight := Round(iWidth / ratio);
      iOffset := (iMaxWidth - iWidth) div 2;
      BeginDoc;
      PrintImage(iOffset, iOffset, iWidth, iHeight, bm);
      EndDoc;
    end;
  finally
    bm.Free;
  end;
end;
GrabImage() liefert nicht nur die client area, sondern auch die vom window manager gemalten Bereiche (borders, caption, ...)

Grüße vom marabu

Vader 25. Feb 2006 19:15

Re: Richedit Formdruck ?
 
hallo,

wau, nicht schlecht, jetzt druckt es alles aus, aber meine form wird in A% format gedruckt,geht das auch
größer ?

mfg vader

marabu 25. Feb 2006 19:17

Re: Richedit Formdruck ?
 
Vader, wenn du es in A& drucken willst, dann musst du anders skalieren - habe ich dir im Aufruf ja gezeigt.

Freundliche Grüße vom marabu

Vader 25. Feb 2006 20:26

Re: Richedit Formdruck ?
 
hallo,

alles klar, hab ich, danke !

mfg vader


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz