StringGrid 的在C++ BUIDER 打印问题<< 请看代码 >> |
尚未結案
|
samba
一般會員 發表:10 回覆:14 積分:9 註冊:2003-04-10 發送簡訊給我 |
我这样写的函数,却只能打印标题,不知错在哪里!
请帮忙看看,
我是从DELPHI的代码转过来的~ void __fastcall TForm1::PrintGrid(TStringGrid * Grid, AnsiString sTitle)
{
int X1,X2;
int Y1,Y2;
int Tmpl;
int F;
TRect TR;
TPrinter *Ptn = Printer();
Ptn->Title=sTitle;
Ptn->BeginDoc();
Ptn->Canvas->Pen->Color=clBlue ;
Ptn->Canvas->Font->Name="Times New Roman";
Ptn->Canvas->Font->Size=12;
Ptn->Canvas->Font->Style=TFontStyles()<< fsBold << fsUnderline;
Ptn->Canvas->TextOutA(0,100,Ptn->Title);
for (F=0; F
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
samba
一般會員 發表:10 回覆:14 積分:9 註冊:2003-04-10 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
samba
一般會員 發表:10 回覆:14 積分:9 註冊:2003-04-10 發送簡訊給我 |
可DELPHI 使用这个方法可以列出的,请参考:
procedure PrintGrid(sGrid: TStringGrid; sTitle: string);
var
X1, X2: Integer;
Y1, Y2: Integer;
TmpI: Integer;
F: Integer;
TR: TRect;
begin
Printer.Title := sTitle;
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(0, 100, Printer.Title);
for F := 1 to sGrid.ColCount - 1 do
begin
X1 := 0;
for TmpI := 1 to (F - 1) do
X1 := X1 5 * (sGrid.ColWidths[TmpI]);
Y1 := 300;
X2 := 0;
for TmpI := 1 to F do
X2 := X2 5 * (sGrid.ColWidths[TmpI]);
Y2 := 450;
TR := Rect(X1, Y1, X2 - 30, Y2);
Printer.Canvas.Font.Style := [fsBold];
Printer.Canvas.Font.Size := 7;
Printer.Canvas.TextRect(TR, X1 50, 350, sGrid.Cells[F, 0]);
Printer.Canvas.Font.Style := [];
for TmpI := 1 to sGrid.RowCount - 1 do
begin
Y1 := 150 * TmpI 300;
Y2 := 150 * (TmpI 1) 300;
TR := Rect(X1, Y1, X2 - 30, Y2);
Printer.Canvas.TextRect(TR, X1 50, Y1 50, sGrid.Cells[F, TmpI]);
end;
end;
Printer.EndDoc;
end; //Examplem, Beispiel: procedure TForm1.Button1Click(Sender: TObject);
begin
PrintGrid(StringGrid1, 'Print Stringgrid');
end;
|
samba
一般會員 發表:10 回覆:14 積分:9 註冊:2003-04-10 發送簡訊給我 |
可DELPHI 使用这个方法可以列出的,请参考: procedure PrintGrid(sGrid: TStringGrid; sTitle: string);
var
X1, X2: Integer;
Y1, Y2: Integer;
TmpI: Integer;
F: Integer;
TR: TRect;
begin
Printer.Title := sTitle;
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(0, 100, Printer.Title);
for F := 1 to sGrid.ColCount - 1 do
begin
X1 := 0;
for TmpI := 1 to (F - 1) do
X1 := X1 5 * (sGrid.ColWidths[TmpI]);
Y1 := 300;
X2 := 0;
for TmpI := 1 to F do
X2 := X2 5 * (sGrid.ColWidths[TmpI]);
Y2 := 450;
TR := Rect(X1, Y1, X2 - 30, Y2);
Printer.Canvas.Font.Style := [fsBold];
Printer.Canvas.Font.Size := 7;
Printer.Canvas.TextRect(TR, X1 50, 350, sGrid.Cells[F, 0]);
Printer.Canvas.Font.Style := [];
for TmpI := 1 to sGrid.RowCount - 1 do
begin
Y1 := 150 * TmpI 300;
Y2 := 150 * (TmpI 1) 300;
TR := Rect(X1, Y1, X2 - 30, Y2);
Printer.Canvas.TextRect(TR, X1 50, Y1 50, sGrid.Cells[F, TmpI]);
end;
end;
Printer.EndDoc;
end; //Examplem, Beispiel: procedure TForm1.Button1Click(Sender: TObject);
begin
PrintGrid(StringGrid1, 'Print Stringgrid');
end;
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
samba您好:
我沒有Delphi也不會所以沒有辦法測試說
但我分別用< class="code">
Image1->Canvas->TextRect(TR,X1 50,350,Grid->Cells[F][0]);
Image2->Canvas->TextRect(TR,X1 50,Y1 50,Grid->Cells[F][Tmpl]);
取代您原來的程式碼但都呈現白色一片...
或是您可以等有經驗的人可以幫助您,我經驗尚淺請見諒 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |