Einzelnen Beitrag anzeigen

Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Rendern von TRichEdit auf TBitmap

  Alt 14. Nov 2004, 15:51
Hi,

Ich möchte den Inhalt eines RichEdit in einen rechteckigen Bereich eines Bitmaps rendern. Das Bitmap hat 300 DPI / 300 DPI und die Größe A4 (-> 2480 x 3507 Pixel). Wenn ich den Text auf den Drucker rendern lasse, wird er richtig dargestellt. Wird der Text aber auf das Bitmap gezeichnet, wird er verkleinert (Font.Size = 12 Pt wird dann zu abs(Font.Height) = 16 Px). Wie kann man dafür sorgen, dass der Text gemäß der DPI-Zahl des Ziel-Bitmaps gerendert wird?

Hier der Code, den ich zum Rendern benutze:
Delphi-Quellcode:
function TMyRichEdit.RenderText(TargetCanvas: TCanvas; TestMetricsOnly: Boolean): Integer;
//Code based on a sample by P. Below [url]www.swissdelphicenter.com[/url]
var
  fmt: TFormatRange;
  Flag: Integer;
  OldBkMode: Integer;
begin
  If TestMetricsOnly then Flag := 0 else Flag := 1;
  with fmt do
  begin
    hdc:= TargetCanvas.Handle;
    hdcTarget:= hdc;
    // rect needs to be specified in twips (1/1440 inch) as unit
    rc:= Rect( FPxLeft * 1440 div PPIx,
                FPxTop * 1440 div PPIy,
                (FPxLeft + FPxWidth) * 1440 div PPIx,
                (FPxTop + FPxHeight) * 1440 div PPIy);

    rcPage:= rc;
    chrg.cpMin := 0;
    chrg.cpMax := Self.GetTextLen;
  end;
  OldBkMode := SetBkMode(TargetCanvas.Handle, TRANSPARENT);
  Result := SendMessage(Self.Handle, EM_FORMATRANGE, Flag, lParam(@fmt));
  // next call frees some cached data
  SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0);
  SetBkMode(TargetCanvas.Handle, OldBkMode);
end;
Beste Grüße,
Dani
Dani H.
  Mit Zitat antworten Zitat