Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > 'Print Stringgrid'


Автор: Elv 22.6.2005, 07:54
1. Alex, все работает, все печатает, только печатает не таблицу, и то, что в ней, а эти вда слова:
'Print Stringgrid', может быть вместо этих слов другое, что нужно написать?

Код

uses  
 Printers;  

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;


2. Расчет вещественных чисел в StrinGrid. Как сделать?

Автор: mvdr 22.6.2005, 10:07
Цитата(Elv @ 22.6.2005, 08:54)
Расчет вещественных чисел в StrinGrid.
как вариант:
  • считывание содержимого ячейки (типа "3,14") в Edit
  • разбивка в два Edit'a (целой и дробной части)
  • тоже самое делаем со второй ячейкой
  • складываем отдельно дробные и отдельно целые части
  • если сумма дробных перевалила за 100, то к целой прибавляем 1
Пояснение:
Код

Edit1.Text:=StringGrid1.Cells[x,y];
for i:= 1 to Lenght(Edit1.Text) do
 if Edit1.Text[i]=',' then 
  begin 
   Edit3.text:=copy(Edit1.Text,i+1,Length(Edit1.Text) - i);
   i:=Lenght(edit1.Text);
 end
else Edit2.Text:=Edit2.text+copy(Edit1.Text,i,1);

Автор: Alex 22.6.2005, 11:24
Я не знаю, что у вас там печатается, вот пример, где все нормально печатается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)