PDA

View Full Version : چاپ اطلاعات در دلفی



mina_84
سه شنبه 16 اسفند 1384, 15:43 عصر
سلام
من می خواهم اطلاعات موجود در stringgrid (در دلفی7) با زدن دکمه چاپ ،چاپ شود کسی می دونه چه کدی رو باید روی دکمه چاپ نوشت.
با تشکر

Mahmood_M
سه شنبه 16 اسفند 1384, 17:45 عصر
مینا خانم شما باید از ابزارهای گزارش گیری استفاده کنید ( همونطوری که بهتون گفته بودم ).

Ehsansh
سه شنبه 16 اسفند 1384, 20:09 عصر
نه محمود آقا ... گزارش گیری برای String Grid استفاده نمیشه. احتمالا شما با DBGrid اشتباه گرفتین.
این کد کمکت میکنه:


procedure TForm1.Button20Click(Sender: TObject);
var
I, Y, X, Start, Stop: Integer;
begin
{Initialize}
PrintDialog1.Options := [poPageNums, poSelection];
PrintDialog1.FromPage := 1;
PrintDialog1.MinPage := 1;
PrintDialog1.ToPage := 1; {Number of Pages to Print}
PrintDialog1.MaxPage := 1; {Number of Pages to Print}
{Execute}
if PrintDialog1.Execute then
begin
{ determine the range the user wants to print }
with PrintDialog1 do
begin
if PrintRange = prAllPages then
begin
Start := MinPage - 1;
Stop := MaxPage - 1;
end
else if PrintRange = prSelection then
begin
Start := PageControl1.ActivePage.PageIndex;
Stop := Start;
end
else { PrintRange = prPageNums }
begin
Start := FromPage - 1;
Stop := ToPage - 1;
end;
end; {With dialog}
{print}
with Printer do
begin
BeginDoc;
I := 0;
begin
for Y := 0 to StringGrid1.RowCount -1 do
for X := 0 to StringGrid1.ColCount -1 do
begin
Printer.Canvas.TextOut(X*10+1,Y+1,StringGrid1.Cell s(X,Y));
{*10 is the space between coloumns}
if (I <> Stop) and (Y = 50) then begin
NewPage; {50 is number of items per page}
I := I + 1;
end {new page}
else begin
break;
end;
end; {X,Y Loops}
end; {Page loop}
EndDoc; {print}
end; {With printer}
end; {If execute}
end;

Mahmood_M
چهارشنبه 17 اسفند 1384, 15:11 عصر
ببخشید، هواسم نبود !!!
آقا احسان دستتون درد نکنه ...

Ehsansh
چهارشنبه 17 اسفند 1384, 15:53 عصر
یه راه بهتر هم پیدا کردم:
ساده تره. افقی و عمودی پرینت میگیره. خودم تستش کردم خیلی داحته فقط باید Copy Paste کنید.


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ߺeile, Zeilenabstand, Schriftgr?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ߺeile
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?span>
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;