Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Richedit.Lines Frage (https://www.delphipraxis.net/129961-richedit-lines-frage.html)

thomas2009 28. Feb 2009 16:06


Richedit.Lines Frage
 
Hallo

ich verwende momentan diesen Code für eine Zeile mit Edit Komponent
Delphi-Quellcode:
TextOut(dc, 10, 10, PChar(Edit1.Text), Length(Edit1.Text));
Nun möchte ich mehrere Zeillen verwenden z.B. mit einem Richedit
Die Zeillen müssen nicht einandern überdecken :
Delphi-Quellcode:
TextOut(dc, x1, y1 ...
Dafür muss die Texthöhe für jede Zeile von Richedit (die am grüssten) ausgelesen werden

Ich habe versucht mit Richedit mit einer zeile. Es hat aber nicht geklappt:
Delphi-Quellcode:
TextOut(dc, 10, 180, PChar(RichEdit1.Lines[0]), Length(RichEdit1.Lines[0]));
was ist hier falsch ?

Warum klappt es mit Edit und mit Richedit nicht ?

blink182 28. Feb 2009 16:17

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

DeddyH 28. Feb 2009 16:45

Re: Richedit.Lines Frage
 
Nein nein, die fangen schon bei 0 an, aber ich habe das Problem immer noch nicht verstanden :glaskugel:.

toms 28. Feb 2009 16:55

Re: Richedit.Lines Frage
 
Könnte es daran liegen, dass das RichEdit RTF Formatierungen enthält?

Satty67 28. Feb 2009 16:58

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?

DeddyH 28. Feb 2009 17:08

Re: Richedit.Lines Frage
 
Ich habe das gerade mal ausprobiert. So erfolgt keine Ausgabe:
Delphi-Quellcode:
Textout(Canvas.Handle,10,10,PChar(redt1.Lines[0]),Length(redt1.Lines[0]));
So aber schon:
Delphi-Quellcode:
Textout(Canvas.Handle,10,10,PChar(redt1.Lines[0]),StrLen(PChar(redt1.Lines[0])));
Wobei bei einem direkten Vergleich beide Zahlen gleich sind. Komisch :gruebel:

thomas2009 28. Feb 2009 19:41

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;

DeddyH 28. Feb 2009 22:01

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.

toms 1. Mär 2009 07:29

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 21:33 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