Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Печать содержимого StringGrid

436
07 января 2007 года
Fevzi
87 / / 02.04.2005
У меня есть какие-то данные в таблице StringGrid.Каким образом можно вывести эти данные на печать, желательно вместе с самой таблицей?
246
07 января 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: Fevzi
У меня есть какие-то данные в таблице StringGrid.Каким образом можно вывести эти данные на печать, желательно вместе с самой таблицей?


1. Например заставить ЭТО сделать Word или Excel.
2. Воспользоваться каким-либо генератором отчетов напр. FastReport (TfrDataSet + TfrReport::OnGetValue) или TQuickRep::OnNeedData.
3. Можно попробовать метод PaintTo
4. И наконец попробовать самому "рисовать" например на канве метафайла страницы и слать их на принтер.

Я делаю это по методу 2 FR.

4.1K
09 января 2007 года
Zeran
80 / / 21.07.2006
Ой, а мона поподробнее, меня этот вопрос тоже ооочень интересует :)
А именно - мне нужно распечатать табличку такого плана:
Шапка
Еще какойто текст

ТАБЛИЦА С ГРИДА
подпись
З.Ы: см. вложение...
520
12 января 2007 года
inkognitum
155 / / 03.05.2006
В принципе все способы описал GIZMO.
А по подробнее надо изучать уже.
Конечно правильней будет если использовать какой либа из мастеров отчетов.

Допустим я иногда выкручивался тем что создавал HTML страничку на лету и пускал ее на печать, это удобно если лень разбиратся с FR, или же требуется нечно не стандртное, мне это было проще организовывать на HTML. Красиво и сердито.

Но повторюсь правильней использовать мастер отчетов.
1
12 января 2007 года
kot_
7.3K / / 20.01.2000
Этот код печатает TStringGrid. Заголовки забиты жестко в код - уже не помню почему, код писался на скорую руку лет так ... назад. :) Далее в разработке использовался ФР, поэтому необходимость в данном классе просто отпала. Сразу пример вызова:
Код:
void __fastcall TfmPrint::bbPrintClick(TObject *Sender)
{
//Диалог выбора принтера  - пользователь выбрал отмену
  if(!pd->Execute()) bbCancel->Click();
   Prn = Printer();
   if(!Prn->Printers->Count){
    Application->MessageBoxA("В системе не обнаружено принтера. Установите принтер используя меню \"Пуск\\Настройка\\Принтеры\\Добавить принтер\" и напечатайте накладную используя журнал накладных.","Нет принтера по умолчанию",MB_ICONINFORMATION+MB_OK);
    bbCancel->Click();
    return;
   }
   Prn->BeginDoc();
   int Vert = 0;
   Vert = Print(Vert);
   Print(Vert);
//Предполагается что печатается две накладные -
//легко может быть модифицировано.
   Prn->EndDoc();
}

Ну а далее - собственно функция - все переменные или классы, которые явно не объявлены - являются закрытыми членами класса TfmPrint
Код:
//---------------------------------------------------------------------------
int __fastcall TfmPrint::Print(const int& Vert){

 TCanvas *pCanvas = Prn->Canvas;//Получаем указатель на канву
// принтера
 int PosVert = Vert,PosGor = 0;
  if(PosVert >= (Prn->PageHeight-BottomWidth)){
   Prn->NewPage();
   PosVert = TopWidth; //Закрытая переменная класса - ширина отступа
// вверху
  }
    pCanvas->Brush->Color = clWhite;
    pCanvas->Font->Size = 14;
  pCanvas->Font->Color = clBlack;
  pCanvas->Font->Style=TFontStyles()<< fsBold;

  AnsiString String = InvoiceIn.GetName()+" № "+InvoiceIn.GetCode();
  if(Vert==0)PosVert = TopWidth;
  PosGor = Prn->PageWidth/2;
  PosGor -= (pCanvas->TextWidth(String)/2);

  pCanvas->TextOutA(PosGor,PosVert,String);
  if(PosVert >= (Prn->PageHeight-BottomWidth)){
   Prn->NewPage();
   PosVert = TopWidth;
  }
  PosVert += pCanvas->TextHeight(InvoiceIn.GetName()+" № "+InvoiceIn.GetName());
  pCanvas->Font->Size = 12;
  if(PosVert >= (Prn->PageHeight-BottomWidth)){
   Prn->NewPage();
   PosVert = TopWidth;
  }
  PosVert += pCanvas->TextHeight(String)*2;

  String = "Дата: " + Form1->stDocumentData->Caption;
  PosGor = Prn->PageWidth/2;
  PosGor -= (pCanvas->TextWidth(String)/2);
  pCanvas->TextOutA(PosGor,PosVert,String);
  if(PosVert >= (Prn->PageHeight-BottomWidth)){
     Prn->NewPage();
     PosVert = TopWidth;
  }
  PosGor = LeftWidth;//Ширина отступа слева - устанавливаем каретку
  PosVert += pCanvas->TextHeight(String);
  pCanvas->Font->Size = 10;
  String = "Поставщик: " + Form1->stPostav->Caption+"\r\n";
   int j = 1;
//Устанавливаем переносы
    do{
    AnsiString g = String[j];
    if(PosGor >= (Prn->PageWidth-RightWidth)||g=="\r"){
     PosGor = LeftWidth+pCanvas->TextWidth("Поставщик: ");
     if(PosVert >= (Prn->PageHeight-BottomWidth)){
      Prn->NewPage();
       PosVert = TopWidth;
    }

     PosVert += pCanvas->TextHeight(String);
    }
    if(g!="\r"&&g!="\n"){
    pCanvas->TextOutA(PosGor,PosVert,g);
    PosGor += pCanvas->TextWidth(g);
    }
     j++;
   }while(String.Length()>= j);
 String = "Получатель: "+Form1->stFirmAddress->Caption+"\r\n";
   j = 1;
  PosGor = LeftWidth;
    do{
    AnsiString g = String[j];
    if(PosGor >= (Prn->PageWidth-RightWidth)||g=="\r"){
     PosGor = LeftWidth+pCanvas->TextWidth("Поставщик: ");
     if(PosVert >= (Prn->PageHeight-BottomWidth)){
      Prn->NewPage();
      PosVert = TopWidth;
      }

     PosVert += pCanvas->TextHeight(String);
    }
    if(g!="\r"&&g!="\n"){
    pCanvas->TextOutA(PosGor,PosVert,g);
    PosGor += pCanvas->TextWidth(g);
    }
     j++;
   }while(String.Length()>= j);
if(PosVert >= (Prn->PageHeight-BottomWidth)){
 Prn->NewPage();
 PosVert = TopWidth;
 }
PosVert += pCanvas->TextHeight(String)*2;
PosGor = LeftWidth;
TRect Num;
TRect Cod;
TRect Name;
TRect EdIz;
TRect Cena;
TRect Colvo;
TRect Summ;
if(PosVert >= (Prn->PageHeight-BottomWidth)){
 Prn->NewPage();
 PosVert = TopWidth;
 }
Num.Left = PosGor;
Num.Right = PosGor+pCanvas->TextWidth("№ п/п")+1;
Num.Top = PosVert;
Num.Bottom = PosVert+pCanvas->TextHeight("№ п/п")+40;

Cod.Left = Num.Right;
Cod.Right = Num.Right+(pCanvas->TextWidth("Код")+20);
Cod.Top = PosVert;
Cod.Bottom = Num.Bottom;

Name.Left = Cod.Right;
Name.Right = Cod.Right+(pCanvas->TextWidth("Наименование")+500);
Name.Top = PosVert;
Name.Bottom = Num.Bottom;

EdIz.Left = Name.Right;
EdIz.Right = Name.Right+(pCanvas->TextWidth("Ед.изм")+2);
EdIz.Top = PosVert;
EdIz.Bottom = Num.Bottom;

Cena.Left = EdIz.Right;
Cena.Right = EdIz.Right+(pCanvas->TextWidth("Цена")+300);
Cena.Top = PosVert;
Cena.Bottom = Num.Bottom;

Colvo.Left = Cena.Right;
Colvo.Right = Cena.Right+(pCanvas->TextWidth("Кол-во")+300);
Colvo.Top = PosVert;
Colvo.Bottom = Num.Bottom;

Summ.Left = Colvo.Right;
Summ.Right = Colvo.Right+(pCanvas->TextWidth("Сумма")+500);
Summ.Top = PosVert;
Summ.Bottom = Num.Bottom;


pCanvas->Pen->Color = clWindowText;
pCanvas->Font->Size = 10;
pCanvas->Brush->Color = clActiveCaption;
pCanvas->Font->Color = clWhite;
pCanvas->TextRect(Num,Num.Left+1,Num.Top+10,"№ п/п");
pCanvas->TextRect(Cod,Cod.Left+10,Cod.Top+10,"Код");
pCanvas->TextRect(Name,Name.Left+10,Name.Top+10,"Наименование");
pCanvas->TextRect(EdIz,EdIz.Left+1,EdIz.Top+10,"Ед.изм");
pCanvas->TextRect(Cena,Cena.Left+10,Cena.Top+10,"Цена");
pCanvas->TextRect(Colvo,Colvo.Left+10,Colvo.Top+10,"Кол-во");
pCanvas->TextRect(Summ,Summ.Left+10,Summ.Top+10,"Сумма");
pCanvas->Brush->Color = clBlack;
pCanvas->FrameRect(Num);
pCanvas->FrameRect(Cod);
pCanvas->FrameRect(Name);
pCanvas->FrameRect(EdIz);
pCanvas->FrameRect(Cena);
pCanvas->FrameRect(Colvo);
pCanvas->FrameRect(Summ);
for(int i=0;i<InvoiceIn.GetProductCount();i++){
 pCanvas->Brush->Color = clNone;
 pCanvas->Brush->Style = bsClear;
 pCanvas->Pen->Color = clWindowText;
 pCanvas->Font->Color = clBlack;

 if(PosVert >= (Prn->PageHeight-BottomWidth)){
 Prn->NewPage();
 PosVert = TopWidth;
 }
 PosVert += Num.Height();
 Num.Top = PosVert;
 Num.Bottom = PosVert+pCanvas->TextHeight("№ п/п")+10;

 Cod.Top = PosVert;
 Cod.Bottom = Num.Bottom;

 Name.Top = PosVert;
 Name.Bottom = Num.Bottom;

 EdIz.Top = PosVert;
 EdIz.Bottom = Num.Bottom;

 Cena.Top = PosVert;
 Cena.Bottom = Num.Bottom;

 Colvo.Top = PosVert;
 Colvo.Bottom = Num.Bottom;

 Summ.Top = PosVert;
 Summ.Bottom = Num.Bottom;
ScladList.Product = ScladList.findId(InvoiceIn.getProduct(i));
 pCanvas->TextRect(Num,Num.Left+10,Num.Top+10,IntToStr(i+1));
 pCanvas->TextRect(Cod,Cod.Left+10,Cod.Top+10,IntToStr(ScladList.Product->GetCode()));
 pCanvas->TextRect(Name,Name.Left+10,Name.Top+10,ScladList.Product->GetName());
 pCanvas->TextRect(EdIz,EdIz.Left+1,EdIz.Top+10,ScladList.Product->GetPack());
 pCanvas->TextRect(Cena,Cena.Left+10,Cena.Top+10,FloatToStr(ScladList.Product->GetPriceIn()));
 pCanvas->TextRect(Colvo,Colvo.Left+10,Colvo.Top+10,FloatToStr(ScladList.Product->GetCount()));
 pCanvas->TextRect(Summ,Summ.Left+10,Summ.Top+10,FloatToStr(ScladList.Product->GetPriceIn()*ScladList.Product->GetCount()));
 pCanvas->Brush->Color = clBlack;
 pCanvas->FrameRect(Num);
 pCanvas->FrameRect(Cod);
 pCanvas->FrameRect(Name);
 pCanvas->FrameRect(EdIz);
 pCanvas->FrameRect(Cena);
 pCanvas->FrameRect(Colvo);
 pCanvas->FrameRect(Summ);
}
pCanvas->Brush->Color = clWhite;
if(PosVert >= (Prn->PageHeight-BottomWidth)){
 Prn->NewPage();
 PosVert = TopWidth;
 }
PosVert += Num.Height()*2;
pCanvas->Font->Size = 14;
pCanvas->TextOutA(PosGor,PosVert,"Всего сумма: ");
pCanvas->TextOutA(Summ.Left,PosVert,FloatToStr(InvoiceIn.GetAmount()));
pCanvas->Font->Size = 12;
if(PosVert >= (Prn->PageHeight-BottomWidth)){
 Prn->NewPage();
 PosVert = TopWidth;
 }
PosVert += Num.Height()*2;

pCanvas->TextOutA(PosGor,PosVert,"Поставщик:_____________________ ");
pCanvas->TextOutA(PosGor+pCanvas->TextWidth("Поставщик:_____________________ ")+800,PosVert,"Получатель:_____________________ ");
PosVert += Num.Height()*6;
do{
pCanvas->TextOutA(PosGor,PosVert,"- ");
PosGor += pCanvas->TextWidth("- ");
}while(PosGor < Prn->PageWidth);
PosVert += Num.Height()*6;
return PosVert;
}
294
16 января 2007 года
Plisteron
982 / / 29.08.2003
Цитата: Fevzi
У меня есть какие-то данные в таблице StringGrid.Каким образом можно вывести эти данные на печать, желательно вместе с самой таблицей?

На Торри нашёл вот такую печаталку СтрингГрида. Может быть, подойдёт.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог