Printer的問題~ |
尚未結案
|
narcysion
一般會員 發表:54 回覆:18 積分:14 註冊:2003-03-14 發送簡訊給我 |
問題一:
我是要印出StringGrid裡面的資料,
但由於資料量大,所以印出來一定會超出一頁以上
但下面程式碼就只能印出一頁而已~
請教各位大大,我該如何改程式碼呢? 問題二:
請教一下哦~StringGrid的列印就只能印出裡面的值嗎?
可不可以連週圍框線都印出來~ ==================================
procedure PrintGrid(sGrid: TStringGrid; sTitle: String);
var
X1, X2 : Integer;
Y1, Y2 : Integer;
TmpI : Integer;
F : Integer;
TR : TRect;
begin
//=====列印表頭開始===
Printer.Title:=sTitle;
Printer.Orientation := poLandscape;
Printer.BeginDoc;
Printer.Canvas.Pen.Color:=0;
Printer.Canvas.Font.Name:='Times New Roman';
Printer.Canvas.Font.Size:=12;
Printer.Canvas.Font.Style:=[fsBold, fsUnderline];
Printer.Canvas.TextOut(2900, 0, Printer.Title);
//=====列印表頭結束=== For F:=0 to sGrid.ColCount-1 do begin
X1:=0;
For TmpI:=1 to F do X1:=X1 5*(sGrid.ColWidths[TmpI]);
Y1:=150;
X2:=0; For TmpI:=1 to (F 1) do X2:=X2 5*(sGrid.ColWidths[TmpI]); Y2:=290;
TR:=Rect(X1, Y1, X2-30, Y2);
Printer.Canvas.Font.Style:=[fsBold];
Printer.Canvas.Font.Size:=10;
Printer.Canvas.TextRect(TR, X1 50, 180, sGrid.Cells[F, 0]); Printer.Canvas.Font.Style:=[];
For TmpI:=1 to sGrid.RowCount-1 do begin
Y1:=100* TmpI 200;
Y2:=100*(TmpI 1) 200;
TR:=Rect(X1, Y1, X2-30, Y2);
Printer.Canvas.TextRect(TR, X1 50, Y1, sGrid.Cells[F, TmpI]);
end;
end;
Printer.EndDoc;
end; procedure TMainForm.SpeedButton3Click(Sender: TObject);
begin
PrintGrid(StringGrid,TRIM(MainDB.zFuncName));
end;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
參考這篇試試: http://www.swissdelphicenter.ch/torry/showcode.php?id=1577
1.參考 NewPage 部份
2.參考 MoveTo / LineTo 部份
uses printers; //StringGrid Inhalt ausdrucken procedure PrintStringGrid(Grid: TStringGrid; Title: string; Orientation: TPrinterOrientation); var P, I, J, YPos, XPos, HorzSize, VertSize: Integer; AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer; mmx, mmy: Extended; Footer: string; begin //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen HeaderSize := 100; FooterSize := 200; ZeilenSize := 36; FontHeight := 36; //Printer initializieren Printer.Orientation := Orientation; Printer.Title := Title; Printer.BeginDoc; //Druck auf mm einstellen mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4; mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) / GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4; VertSize := Trunc(mmy) * 10; HorzSize := Trunc(mmx) * 10; SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC); //Zeilenanzahl festlegen Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize; //Seitenanzahl ermitteln if Grid.RowCount mod Zeilen <> 0 then AnzSeiten := Grid.RowCount div Zeilen 1 else AnzSeiten := Grid.RowCount div Zeilen; Seite := 1; //Grid Drucken for P := 1 to AnzSeiten do begin //Kopfzeile Printer.Canvas.Font.Height := 48; Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Title) div 2)), - 20,Title); Printer.Canvas.Pen.Width := 5; Printer.Canvas.MoveTo(0, - HeaderSize); Printer.Canvas.LineTo(HorzSize, - HeaderSize); //Fußzeile Printer.Canvas.MoveTo(0, - VertSize FooterSize); Printer.Canvas.LineTo(HorzSize, - VertSize FooterSize); Printer.Canvas.Font.Height := 36; Footer := 'Seite: ' IntToStr(Seite) ' von ' IntToStr(AnzSeiten); Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)), - VertSize 150,Footer); //Zeilen drucken Printer.Canvas.Font.Height := FontHeight; YPos := HeaderSize 10; for I := 1 to Zeilen do begin if Grid.RowCount >= I (Seite - 1) * Zeilen then begin XPos := 0; for J := 0 to Grid.ColCount - 1 do begin Printer.Canvas.TextOut(XPos, - YPos, Grid.Cells[J, I (Seite - 1) * Zeilen - 1]); XPos := XPos Grid.ColWidths[J] * 3; end; YPos := YPos ZeilenSize; end; end; //Seite hinzufügen Inc(Seite); if Seite <= AnzSeiten then Printer.NewPage; end; Printer.EndDoc; end; //Example procedure TForm1.Button1Click(Sender: TObject); begin //Drucken im Querformat PrintStringGrid(Grid, 'StringGrid Print Landscape', poLandscape); //Drucken im Hochformat PrintStringGrid(Grid, 'StringGrid Print Portrait', poPortrait); end;-- 歡迎光臨 KTop 研究院! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |