lzRichEdit1 drucken

Rund um die LCL und andere Komponenten
Antworten
Emsbootsmann
Beiträge: 28
Registriert: Mo 29. Jan 2007, 18:50

lzRichEdit1 drucken

Beitrag von Emsbootsmann »

ich habe mir die Komponente lzRichEdit heruntergeladen und nun möchte ich den text auch ausdrucken weiss aber nicht wie.
Kann mir jemand helfen?

Benutzeravatar
theo
Beiträge: 10905
Registriert: Mo 11. Sep 2006, 19:01

Re: lzRichEdit1 drucken

Beitrag von theo »

Soweit mir bekannt ist, kann diese Komponente nicht drucken.
Ich glaube man kann aber RTF speichern und dann mit einem anderen Prog wie Word oder OpenOffice drucken.
Es gibt vllt. noch andere Möglichkeiten, aber die sind mir im Moment nicht bekannt.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: lzRichEdit1 drucken

Beitrag von Christian »

Du könntest n Bildschirmfoto der Komponente machen und das drucken.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Emsbootsmann
Beiträge: 28
Registriert: Mo 29. Jan 2007, 18:50

Re: lzRichEdit1 drucken

Beitrag von Emsbootsmann »

esrt einmal danke ,aber ich möchte in einem Programm eine möglichkeit schaffen um einen Serienbrief oder Aushand zu erstellen ohne noch andere Programme zu nutzen.
Ich habe mir mal richview angesehen , aber auch damit krieg ich es nicht hin auszudrucken.
Gibt es denn andere Kostenlose Komponenten eine Memo oder sowas zu editieren ähnlich wordpad und dann drucken

Benutzeravatar
theo
Beiträge: 10905
Registriert: Mo 11. Sep 2006, 19:01

Re: lzRichEdit1 drucken

Beitrag von theo »

Naja, wenn du nur auf Windows drucken willst:
Da lzRichEdit sowieso das entsprechende MS Control verwendet (z.B. aus RICHED20.DLL) kannst du das vllt. nach dieser Anleitung hinbiegen:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Wenn es auf Linux auch laufen sollte, geht das nat. nicht.

Aber da muss du selber durch. Wer viel will, muss auch viel schwitzen. :wink:
Viel Glück!

Benutzeravatar
theo
Beiträge: 10905
Registriert: Mo 11. Sep 2006, 19:01

Re: lzRichEdit1 drucken

Beitrag von theo »

OK, bei mir hat sich ein Termin verschoben, deshalb habe ich das MSDN Bsp. kurz übersetzt.
Kann man ja vllt. mal brauchen.
Der Code bezieht sich auf die Demo bei lzRichEdit (Exemplo...), benötigt noch einen PrintDialog.

Das druckt hier, ist aber nur so runtergehackt. Ich war selber erschrocken, dass es es funktioniert hat und übernehme keine Garantie. :wink:

Code: Alles auswählen

uses Windows, Printers, OSPrinters, richedit;      
...
function PrintRTF(REhwnd: HWND; PRhdc: HDC ): boolean;
var di:DOCINFO;
  cxPhysOffset,cyPhysOffset,cxPhys,cyPhys,cpmin:integer;
  fr: FORMATRANGE;
  Success : Boolean;
begin
    if StartDoc(PRhdc, @di)=0 then
    begin
      result:=False;
      Exit;
    end;
 
    cxPhysOffset := GetDeviceCaps(PRhdc, PHYSICALOFFSETX);
    cyPhysOffset := GetDeviceCaps(PRhdc, PHYSICALOFFSETY);
 
    cxPhys := GetDeviceCaps(PRhdc, PHYSICALWIDTH);
    cyPhys := GetDeviceCaps(PRhdc, PHYSICALHEIGHT);
 
    // Create "print preview".
    SendMessage(REhwnd, EM_SETTARGETDEVICE, PRhdc, Round(cxPhys/2));
 
    fr.hdc       := PRhdc;
    fr.hdcTarget := PRhdc;
 
    // Set page rect to physical page size in twips.
    fr.rcPage.top   := 0;
    fr.rcPage.left  := 0;
    fr.rcPage.right  := MulDiv(cxPhys, 1440, GetDeviceCaps(PRhDC, LOGPIXELSX));
    fr.rcPage.bottom := MulDiv(cyPhys, 1440, GetDeviceCaps(PRhDC, LOGPIXELSY));
 
    // Set the rendering rectangle to the pintable area of the page.
    fr.rc.left   := cxPhysOffset;
    fr.rc.right  := cxPhysOffset + cxPhys;
    fr.rc.top    := cyPhysOffset;
    fr.rc.bottom := cyPhysOffset + cyPhys;
 
    SendMessage(REhwnd, EM_SETSEL, 0, LPARAM(-1));          // Select the entire contents.
    SendMessage(REhwnd, EM_EXGETSEL, 0, LPARAM(@fr.chrg));  // Get the selection into a CHARRANGE.
 
    Success := TRUE;
 
    // Use GDI to print successive pages.
    while ((fr.chrg.cpMin < fr.chrg.cpMax) AND Success) do
    begin
        Success := StartPage(PRhdc) > 0;
 
        if (not Success) then break;
 
        cpMin := SendMessage(REhwnd, EM_FORMATRANGE, 1, LPARAM(@fr));
        if (cpMin <= fr.chrg.cpMin) then
        begin
            Success := FALSE;
            break;
        end;
        fr.chrg.cpMin := cpMin;
        Success := EndPage(PRhdc) > 0;
    end;
    SendMessage(REhwnd, EM_FORMATRANGE, 0, 0);
    if (Success) then EndDoc(PRhdc) else AbortDoc(PRhdc);
    result:= Success;
end;          
...
procedure TForm1.ToolButton29Click(Sender: TObject);
begin
   If PrintDialog1.Execute then PrintRTF(lzRichEdit1.Handle,TWinPrinter(Printer).Handle);
end;          
 

Emsbootsmann
Beiträge: 28
Registriert: Mo 29. Jan 2007, 18:50

Re: lzRichEdit1 drucken

Beitrag von Emsbootsmann »

Hat leider nicht funktioniert,er druckt nicht,der printdialog geht auf, der Success kommt aber im Drucker steht 0 anstehende Dokumente
Aber trotzdem danke für die Bemühungen

Benutzeravatar
theo
Beiträge: 10905
Registriert: Mo 11. Sep 2006, 19:01

Re: lzRichEdit1 drucken

Beitrag von theo »

Emsbootsmann hat geschrieben:Hat leider nicht funktioniert,er druckt nicht,der printdialog geht auf, der Success kommt aber im Drucker steht 0 anstehende Dokumente
Aber trotzdem danke für die Bemühungen
Hmm, da kann ich nichts dazu sagen. Hier druckt das und es ist das von Microsoft empfohlene Verfahren.

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: lzRichEdit1 drucken

Beitrag von creed steiger »

Habs vorhin probiert,Win XP 32bit und Laz 1.0.irgendwas funktioniert einwandfrei.

Edit:
Danke Theo für deine Zeit und für den Code :)
Zuletzt geändert von creed steiger am Mo 9. Dez 2013, 19:18, insgesamt 1-mal geändert.

Emsbootsmann
Beiträge: 28
Registriert: Mo 29. Jan 2007, 18:50

Re: lzRichEdit1 drucken

Beitrag von Emsbootsmann »

Ich habs gerade auch ausprobiert, auf xp läufts auf win 7 leider nicht, es scheint so als übergibt er die Seite nicht,der Drucker wird geöffnet aber die Seite nicht übergeben

Antworten