Autor |
Beitrag |
patrick dee
      
Beiträge: 311
Win 98SE, WinXP
D3,D6
|
Verfasst: Mi 30.10.02 14:09
hi
habe zum drucken mit Seitenrand für eine RichEdit diesen Code gefunden.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button2Click(Sender: TObject); var presX, presY: Integer; Begin with richedit1 do begin plaintext := true; lines.loadfromfile( changefileext( application.exename, '.DPR' )); presX := GetDeviceCaps( printer.handle, LOGPIXELSX ); presY := GetDeviceCaps( printer.handle, LOGPIXELSY ); with pagerect do begin left := presX; // 1 inch left margin top := 3 * presY div 2; // 1.5 inch top margin right := Printer.PageWidth - 3 * presX div 4; // 0.75 inch right margin bottom := Printer.PageHeight - presY; // 1 inch bottom margin end; Print('Testjob'); end; End; |
Nur ich kriege es nicht hin das oben und links ein korekter Seitenrand
bleibt. Mit diesem Beispiel wird mitten in einem Blatt gedruckt.
Kann mir jemand Helfen oder hat evtl eine bessere Idee wie ich das Lösen kann. Brauche oben und linkes einen Rand damit man die Seiten nach dem Drucken auch Lochen kann ohne den Text zu durchbohren.
gruß
patrick
_________________ Glauben heißt nichts wissen ...
|
|
Sven
      
Beiträge: 314
D6 Ent, K3 Pro (patched)
|
Verfasst: Mi 30.10.02 16:51
Ich verwende ein TRxRichEdit. Um das Drucken mit Rändern zu ermöglichen, mußte ich dieses anpassen. Nei druckt er ohne Probleme.
Li, Ob, Re und Un sind Die Ränder in Twips.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| procedure TRxCustomRichEdit.Print(const Caption: string; const Li,Ob,Re,Un: integer); //by SL var Range: TFormatRange; LastChar, MaxLen, LogX, LogY, OldMap: Integer; SaveRect : TRect; TextLenEx : TGetTextLengthEx; i, j : integer; begin FillChar(Range, SizeOf(TFormatRange), 0); with Printer, Range do begin Title := Caption; BeginDoc; hdc := Handle; hdcTarget := hdc; LogX := GetDeviceCaps(Handle, LOGPIXELSX); LogY := GetDeviceCaps(Handle, LOGPIXELSY); if IsRectEmpty(PageRect) then begin rc.left := Li; rc.top := Ob; rc.right := MulDiv(PageWidth,1440,LogX) - Re; rc.bottom := MulDiv(PageHeight,1440,LogY) - Un; end else begin rc.left := MulDiv(PageRect.Left,1440,LogX) - Li; rc.top := MulDiv(PageRect.Top,1440,LogY) - Ob; rc.right := MulDiv(PageRect.Right,1440,LogX) - Re; rc.bottom := MulDiv(PageRect.Bottom,1440,LogY) - Un; end; rcPage := rc; SaveRect := rc; LastChar := 0; if RichEditVersion >= 2 then begin with TextLenEx do begin flags := GTL_DEFAULT; codepage := CP_ACP; end; MaxLen := Perform(EM_GETTEXTLENGTHEX, WParam(@TextLenEx), 0); end else MaxLen := GetTextLen; chrg.cpMax := -1; { ensure printer DC is in text map mode } OldMap := SetMapMode(hdc, MM_TEXT); SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); { flush buffer } try repeat rc := SaveRect; chrg.cpMin := LastChar; LastChar := SendMessage(Self.Handle, EM_FORMATRANGE, 1, Longint(@Range)); if (LastChar < MaxLen) and (LastChar <> -1) then NewPage; until (LastChar >= MaxLen) or (LastChar = -1); EndDoc; finally SendMessage(Self.Handle, EM_FORMATRANGE, 0, 0); { flush buffer } SetMapMode(hdc, OldMap); { restore previous map mode } end; end; end; |
Ich hoffe es hilft.
Gruß Sven
_________________ MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
|
|
Raphael82
      
Beiträge: 67
|
Verfasst: Do 31.10.02 01:46
Du kannst in jedem TRichEdit, TMemo oder welche Komponente auch immer du verwenden magst deine Seitenränder hinbekommen!
Svens Lösungsansatz ist doch recht umständlich, das geht auch um einiges kürzer..
Habe glaube ich bei www.delphi-source.de neulich ein Tutorial darüber gesehen. Die Tutorials dort sind sehr gut, also schau einfach mal rein!
Raphael
_________________ Share your knowledge to receive perfection!
|
|
patrick dee 
      
Beiträge: 311
Win 98SE, WinXP
D3,D6
|
Verfasst: Do 31.10.02 06:54
Hi Seven
danke für deiene hilfe. Aber was mich noch interesieren würde ob das so wie du geschrieben hast bei dir funktioniert. Glaube ich kaum den bei mir
geht da gar nix. Delphi 3 Antwortet mit tausend Fehlermeldungen das ist es wohl nicht. Und was soll bei ButtonPrint On click passieren ???????
Da steht gor nx dazu.
HAT DEN NIEMAND EINE LÖSUNG FÜR MICH DIE AUCH FUNKTIONIERT !!!
Auch der Tip von Raphael habe ich berücksichtigt. Aber das ging auch nicht.
gruß
patrick dee
_________________ Glauben heißt nichts wissen ...
|
|
Raphael82
      
Beiträge: 67
|
Verfasst: Do 31.10.02 11:12
Also gut, hier mal ein paar Grundlagen, welche so auch auch Delphi-Source, dem von mir oben angegebenen Linnk zu finden sind!
Also, zuerstmal sollte man wissen, dass standardmässig beim drucken in Pixel gerechnet wird. Da dies jedoch nicht geräteunabhängig ist solltest du die Einheiten umstellen, hier in 1/10mm:
Quelltext 1:
| SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); |
Was nun ungewönlich ist, aber wichtig, ist, dass sich nun der Koordinatenursprung links-oben befindet! Will man also eine Zeile mit 2cm Rand von links und oben drucken würde das so aussehen:
Quelltext 1:
| printer.Canvas.TextOut(20, -20, 'Ich stehe mit je 2cm Rand da!'); |
Dazu solltest du dir noch folgende Methoden genauer ansehen (delphihilfe, sdk, Win32 Developers Reference,...)
TPrinters, SetViewPortOrgEx, SetViewPortExtEx, SetWindowOrgEx, SetWindowExtEx,SetMapMode,GetDeviceCaps, Canvas..
Ausserdem empfehle ich dir nochmal das Drucken Tutorial bei
www.delphi-source.de. Nicht bei den Programmiertips nachsehen, sondern bei Tutorials!
Das Drucken ist nicht die leichteste Übung in Delphi, wenn man es richtig machen will!
Raphael[/url][/list]
_________________ Share your knowledge to receive perfection!
|
|
Sven
      
Beiträge: 314
D6 Ent, K3 Pro (patched)
|
Verfasst: Do 31.10.02 12:59
patrick dee hat folgendes geschrieben: | ... Aber was mich noch interesieren würde ob das so wie du geschrieben hast bei dir funktioniert. Glaube ich kaum den bei mir
geht da gar nix. Delphi 3 Antwortet mit tausend Fehlermeldungen das ist es wohl nicht. Und was soll bei ButtonPrint On click passieren ??????? ...
|
Also zum einen habe ich gesagt, daß es sich um einen Auszug aus meiner TRxRichEdit handelt, die ich in einigen Punkten selber anpassen mußte und zum anderen funktioniert es bei mir absolut einwandfrei, sonst hätte ich wohl kaum den Auszug gepostet.
_________________ MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
|
|
|