Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2010, 08:05   #11
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

тут тоже есть нечто похожее: http://www.delphiexpert.ru/view_lesson.php?id=96
только бы это под стринггрид сделать
Driver_09 вне форума Ответить с цитированием
Старый 19.06.2010, 11:49   #12
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Driver_09 Посмотреть сообщение
SERG1980, а как это сделать?
напишите код, пожалуйста, или скажите как)
Я просто пока не совсем все основные компоненты знаю, и как ими пользоваться((
Для начала скачайте и установите (устанавливается как обычная прога).
В демках есть пример печати грида и всего остального. Я недавно выкладывал документацию по fastreport, поисчите поиском. Для вас скорее подойдёт метод печати через Cross объект (описан как в демке так и в документации)
SERG1980 вне форума Ответить с цитированием
Старый 19.06.2010, 13:00   #13
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Ой, извиняюсь, невнимательно прочитал вопрос, нужен именно StringGrid, тогда не подойдет ehlib, там только dbgrideh'ы печатать можно.
Вот попробуй этот код (взял из DRKB):
Код:
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; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
PrintGrid(StringGrid1, 'Доход_2НДФЛ'); 
end;

Последний раз редактировалось tools; 19.06.2010 в 13:29.
tools вне форума Ответить с цитированием
Старый 19.06.2010, 13:52   #14
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

tools, спасибо огромное))
В принципе в коде я разобрался, только поясните для меня несколько строк:
TR: TRect; (это наверное так же как и TForm1?)
Printer.Canvas.Font.Style := [fsBold, fsUnderline];(конкретно что после присваивания)
Printer.Canvas.TextOut(0, 100, Printer.Title); (а тут числа что обозначают, они в принципе во всех строках)
Driver_09 вне форума Ответить с цитированием
Старый 19.06.2010, 14:00   #15
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Printer.Canvas.Font.Style := [fsBold, fsUnderline] - это стиль шрифта (fsBold - полужирный, fsItalic - курсив, fsUnderline - подчеркнутый, fsStrikeOut - перечеркнутый, их можно смешивать, поэтому и задается в виде множества). Все это свойства класса TFont.

Printer.Canvas.TextOut(0, 100, Printer.Title)- первые два числа - это координаты X и Y, т.е. верхний левый угол положения надписи. Именно с этой точки будет начинаться надпись.

TRect - это класс для задания координат прямоугольной области вывода наших ячеек.

Bentli, отдельную тему создавай и, естественно, не в этом разделе (здесь Delphi, а не Basic).

Последний раз редактировалось tools; 19.06.2010 в 14:19.
tools вне форума Ответить с цитированием
Старый 19.06.2010, 14:09   #16
Bentli
 
Регистрация: 19.06.2010
Сообщений: 4
По умолчанию

подскажите пожалуйста ,как добавить информацию в конец файла последовательного доступа в qbasic

Bentli, либо создай свою тему в правильном разделе, либо я твой пост удалю по той причине, что он не имеет отношения к данной теме!

Последний раз редактировалось artemavd; 19.06.2010 в 19:56.
Bentli вне форума Ответить с цитированием
Старый 19.06.2010, 14:27   #17
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

а где строчка которая отделяет столбцы?
то есть если увеличить шрифт, то не влазит вся инфа в этот столбец?
Driver_09 вне форума Ответить с цитированием
Старый 19.06.2010, 15:30   #18
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Сейчас попробую у себя на Delphi сделать. По результатам отпишусь здесь

Последний раз редактировалось tools; 19.06.2010 в 15:58.
tools вне форума Ответить с цитированием
Старый 19.06.2010, 16:36   #19
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

tools, будьте добры))
у меня просто как раз на принтере краска кончилась, нет уже возможности проверить)
Driver_09 вне форума Ответить с цитированием
Старый 21.06.2010, 02:59   #20
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Эх, забыл совсем про эту тему. Но, если еще не поздно, то вот я переделал код, опробуйте такой вариант:
Код:
procedure PrintGrid(sGrid: TStringGrid; sTitle: string);

var
X1, X2: Integer;
Y1, Y2: Integer;
TmpI: Integer;
F, i: Integer;
TR: TRect;
max_string:string;

begin
with Printer do
begin
    Title := sTitle;
    BeginDoc;
    with Canvas do
    begin
      Pen.Color  := 0;
      Font.Name := 'Times New Roman';
      Font.Size  := 12;
      Font.Style := [fsBold, fsUnderline];
      TextOut(0, 100, Printer.Title);
      Font.Size := 9;
    end;
end;

for F := 1 to sGrid.ColCount - 1 do
begin
  max_string:= sGrid.Cells[F,1];
   for i:=1 to sGrid.RowCount-1 do
      if Length(sGrid.Cells[F,i]) > Length(max_string)  then
          max_string:= sGrid.Cells[f,i];
   X1 := 0;
   for TmpI := 1 to (F - 1) do
     X1 := X1 + Trunc(Printer.Canvas.TextWidth(max_string)*1.2);
   Y1 := 300;
   X2 := 0;
   for TmpI := 1 to F do
     X2 := X2 + Trunc(Printer.Canvas.TextWidth(max_string)*1.2);
   Y2 := 450;
   TR := Rect(X1, Y1, X2 - 30, Y2);
   with Printer.Canvas do
   begin
       Font.Style := [fsBold];
       TextRect(TR, X1 + 50, 350, sGrid.Cells[F, 0]);
       Font.Style := [];
   end;
   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; 


procedure TForm1.button1Click(Sender: TObject);
begin
 PrintGrid(StringGrid1, 'Доход_2НДФЛ');
end;

Последний раз редактировалось tools; 21.06.2010 в 03:10.
tools вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести на печать ScrollBox в delphi BuT@JL Общие вопросы Delphi 5 10.05.2016 14:40
Печать таблицы stringgrid fezilk24 Общие вопросы Delphi 2 01.03.2010 15:00
Как вывести таблицу StringGrid на печать? graphoman Компоненты Delphi 1 07.01.2008 22:19
Печать StringGrid Gorin Компоненты Delphi 4 01.10.2007 16:24