|
Delphi Tips & Tricks | Tips & Tricks | Bug List | Cool Delphi Sites | Printing a Form The following code prints all visible TLabel, TEdit, TMemo, TDBText, TDBEdit and TDBMemo components on the form with proper place, size and font. Set the Form Scrollbar.Range to 768 Horz and 1008 Vert for a 8 X 10.5 page at 96formPPI. uses Printers; procedure TForm1.SpeedButton1Click(Sender: TObject); var C : array[0..255] of char; CLen, ScaleX, ScaleY, I : integer; Format : Word; DC : HDC; MComp : TMemo; R: TRect; begin Printer.BeginDoc; DC := Printer.Canvas.Handle; ScaleX := GetDeviceCaps(DC, LOGPIXELSX) div PixelsPerInch; ScaleY := GetDeviceCaps(DC, LOGPIXELSY) div PixelsPerInch; for I := 0 to ComponentCount-1 do if (Components[I] is TCustomLabel) or (Components[I] is TCustomEdit) then begin MComp := TMemo(Components[I]); if (MComp.visible) then begin Printer.Canvas.Font := MComp.Font; DC := Printer.Canvas.Handle; {so DrawText knows about font} R := MComp.BoundsRect; R.Top := (R.Top + VertScrollBar.Position) * ScaleY; R.Left := (R.Left + HorzScrollBar.Position) * ScaleX; R.Bottom := (R.Bottom + VertScrollBar.Position) * ScaleY; R.Right := (R.Right + HorzScrollBar.Position) * ScaleY; if (not(Components[I] is TCustomLabel)) and (MComp.BorderStyle = bsSingle) then Printer.Canvas.Rectangle(R.Left,R.Top,R.Right,R.Bottom); Format := DT_LEFT; if (Components[I] is TEdit) or (Components[I] is TCustomMaskEdit) then Format := Format or DT_SINGLELINE or DT_VCENTER else begin if MComp.WordWrap then Format := DT_WORDBREAK; if MComp.Alignment = taCenter then Format := Format or DT_CENTER; if MComp.Alignment = taRightJustify then Format := Format or DT_RIGHT; R.Bottom := R.Bottom + Printer.Canvas.Font.Height + 1; end; CLen := MComp.GetTextBuf(C,255); R.Left := R.Left + ScaleX + ScaleX; DrawText(DC, C, CLen, R, Format); end; end; Printer.EndDoc; end; | Borland Delphi | About the Authors | Home | For Queries Mail To Webmaster Copyright © 1996 Asylum Software Pvt. Ltd. This is an ASPL production. |