![]() |
Richedit.Lines Frage
Hallo
ich verwende momentan diesen Code für eine Zeile mit Edit Komponent
Delphi-Quellcode:
Nun möchte ich mehrere Zeillen verwenden z.B. mit einem Richedit
TextOut(dc, 10, 10, PChar(Edit1.Text), Length(Edit1.Text));
Die Zeillen müssen nicht einandern überdecken :
Delphi-Quellcode:
Dafür muss die Texthöhe für jede Zeile von Richedit (die am grüssten) ausgelesen werden
TextOut(dc, x1, y1 ...
Ich habe versucht mit Richedit mit einer zeile. Es hat aber nicht geklappt:
Delphi-Quellcode:
was ist hier falsch ?
TextOut(dc, 10, 180, PChar(RichEdit1.Lines[0]), Length(RichEdit1.Lines[0]));
Warum klappt es mit Edit und mit Richedit nicht ? |
Re: Richedit.Lines Frage
probier mal mit RichEdit1.lines[1], ich glaub der zählt da normal und fängt nicht bei 0 an, bin mir aber gerade nicht ganz sicher
|
Re: Richedit.Lines Frage
Nein nein, die fangen schon bei 0 an, aber ich habe das Problem immer noch nicht verstanden :glaskugel:.
|
Re: Richedit.Lines Frage
Könnte es daran liegen, dass das RichEdit RTF Formatierungen enthält?
|
Re: Richedit.Lines Frage
Er meint wohl, das er mehrere Zeilen ausgeben will, die sich nicht überlappen dürfen.
Also der abgebildete Code scheint korrekt, da musst Du woanders etwas geändert haben, was die Ausgabe verhindert. €: Lines sind aber ohne Formatierung, oder? |
Re: Richedit.Lines Frage
Ich habe das gerade mal ausprobiert. So erfolgt keine Ausgabe:
Delphi-Quellcode:
So aber schon:
Textout(Canvas.Handle,10,10,PChar(redt1.Lines[0]),Length(redt1.Lines[0]));
Delphi-Quellcode:
Wobei bei einem direkten Vergleich beide Zahlen gleich sind. Komisch :gruebel:
Textout(Canvas.Handle,10,10,PChar(redt1.Lines[0]),StrLen(PChar(redt1.Lines[0])));
|
Re: Richedit.Lines Frage
Hier ist mein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var y, x : Integer; dc : HDC; begin dc := canvas.handle; SetBkMode(dc,transparent); BeginPath(dc); //TextOut(dc, 10, 180, PChar(RichEdit1.Lines[0]), Length(RichEdit1.Lines[0])); Textout(Canvas.Handle,10,10,PChar(RichEdit1.Lines[0]),StrLen(PChar(RichEdit1.Lines[0]))); EndPath(dc); SelectClipPath(dc, RGN_COPY); BitBlt(dc, 30, 180, Image1.clientWidth, image1.clientHeight, image1.picture.bitmap.canvas.handle, 0, 0, SRCCOPY); end; |
Re: Richedit.Lines Frage
Ja und? Geht es damit oder nicht? Im Übrigen ist das wohl das Beispiel aus dem MSDN, wenn ich das richtig in Erinnerung habe.
|
Re: Richedit.Lines Frage
Den RichEdit Inhalt kannst du so auf einen Canvas malen:
Delphi-Quellcode:
uses
RichEdit; procedure RichEditToCanvas(RichEdit: TRichEdit; Canvas: TCanvas; PixelsPerInch: Integer); var ImageCanvas: TCanvas; fmt: TFormatRange; begin ImageCanvas := Canvas; with fmt do begin hdc:= ImageCanvas.Handle; hdcTarget:= hdc; // rect needs to be specified in twips (1/1440 inch) as unit rc:= Rect(0, 0, ImageCanvas.ClipRect.Right * 1440 div PixelsPerInch, ImageCanvas.ClipRect.Bottom * 1440 div PixelsPerInch ); rcPage:= rc; chrg.cpMin := 0; chrg.cpMax := RichEdit.GetTextLen; end; SetBkMode(ImageCanvas.Handle, TRANSPARENT); RichEdit.Perform(EM_FORMATRANGE, 1, Integer(@fmt)); // next call frees some cached data RichEdit.Perform(EM_FORMATRANGE, 0, 0); end; procedure TForm1.Button1Click(Sender: TObject); begin RichEditToCanvas(RichEdit1, Image1.Canvas, Self.PixelsPerInch); Image1.Refresh; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz