Jeg er igang med at lave et skriveprogram i RichEdit og har fundet et udskrivnings kode her på eksperten. Den laver en venstre margen ved en udskrivning, men ikke nogen højre margen. Jeg har sat richedits align til AlClient og dette medfører at skriften overskrider papirets højre grænse. Min kode er:
procedure TForm1.MUdskrivClick(Sender: TObject); //udskrivning var I, XPixelsPrTomme, YPixelsPrTomme, Margen, LinieHoejde, LinieTaeller: Integer; begin if PrintDialog.Execute then begin Richedit.WordWrap:=true; Printer.Canvas.Font := Richedit.Font; XPixelsPrTomme := GetDeviceCaps(Printer.Handle, LOGPIXELSX); Margen := XPixelsPrTomme; // - altså én tomme YPixelsPrTomme := GetDeviceCaps(Printer.Handle, LOGPIXELSY); LinieHoejde := Round(Abs(Printer.Canvas.Font.Size) / 72 * YPixelsPrTomme * 1.40); LinieTaeller := 3; Printer.BeginDoc; for I := 0 to Richedit.Lines.Count - 1 do begin Inc(LinieTaeller); Printer.Canvas.TextOut(Margen, LinieTaeller * LinieHoejde, Richedit.Lines.Strings[I]); end; Printer.EndDoc; end;
Årsagen er ikke så meget richedits align AlClient. Årsagen til at teksten overskrider højre margen er at du bruger Printer.Canvas.TextOut. Printeren vil simpelthen ignorere resten af linien hvis linien er længere end sidebredden. Du er nødt til at dele hver linie op i et antal linier der hver især kan være på papiret. Du kan bruge (Printer.PageWidth - Margen) for at se hvor meget plads der er på siden og Printer.Canvas.TextWidth(Richedit.Lines.Strings[I]) til at finde længden af linien på printeren. Så må du opdele linien nogle passende steder, f.eks. ved mellemrum mellem ord. Et andet problem i øvrigt med din kode er at du heller ikke tager hensyn til om du når bunden af siden så hvis du overskrider siden ((LinieTaeller+1) * LinieHoejde > Printer.PageHeight) din tekst også ignoreret. Så her kan du bruge noget i stil med dette: Inc(LinieTaeller); if ((LinieTaeller+1) * LinieHoejde > Printer.PageHeight) then begin Printer.NewPage; LinieTaeller := 3; end; Printer.Canvas.TextOut(Margen, LinieTaeller * LinieHoejde, 'din tekst');
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.