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.