Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Вниз
QReport и геморой Найти похожие ветки
← →
Valeriya (2003-04-03 11:55) [0]Подскажите, плиз, как сделать так. чтобы можно было регулировать число столбцов. Есть несколько постоянных столбцов (обязательных) и надо к ним ещё добавить n столбцов одинаковой ширины. При этом нужно ещё как-то разобраться чтобы это всё разместилось на странице...
← →
Leran2002 (2003-04-03 12:12) [1]Такие отчеты я предпочетаю выводить в любимый всеми Word...
Вот кусок кода из рабочей проги:
uses ..., OleServer, Word97;
procedure TReitFrm.BitBtn1Click(Sender: TObject);
var
WordDoc:_Document;
WordTbl:Table;
RowNum:integer;
TmpS:string;
StartR,EndR:OleVariant;
pSeparator,pNumRows,pNumColumns:OleVariant;
Check1,Check2:boolean;
begin
WordApp.Connect;
Check1:=WordApp.Options.CheckSpellingAsYouType; {*} Check2:=WordApp.Options.CheckGrammarAsYouType;
WordApp.Options.CheckSpellingAsYouType:=false; {*} WordApp.Options.CheckGrammarAsYouType:=false;
WordApp.Visible:=false;
WordDoc:=WordApp.Documents.Add(EmptyParam,EmptyParam);
With WordDoc.PageSetup do begin
Orientation := wdOrientPortrait; {wdOrientLandscape;}
LeftMargin := 28.35;
RightMargin := LeftMargin;
TopMargin := LeftMargin;
BottomMargin := LeftMargin;
End;
WordDoc.Paragraphs.Add(EmptyParam);
With WordDoc.Paragraphs.First do begin
Range.Font.Bold := 1;
Range.Font.Size := 14;
Range.Text := "Результаты обработки статических данных";
Format.Alignment := wdAlignParagraphCenter;
End;
WordDoc.Paragraphs.Add(EmptyParam);
TmpS:="№"#9"Ф. И. О."#9"Должность"#9"Кафедра"#9"Балл";
WordDoc.Paragraphs.Add(EmptyParam);
// начало диапозона
StartR:=WordDoc.Paragraphs.Get_Last.Range.Start;
ReportQuery.Parameters.ParamValues["[Год]"]:= SelYear;
ReportQuery.Open;
ReportQuery.First;
RowNum:=0;
while not ReportQuery.Eof do begin
inc(RowNum);
TmpS:=TmpS +#9+ IntToStr(RowNum) +
#9+ ReportQueryFIO.AsString +
#9+ ReportQueryDolz.AsString +
#9+ ReportQueryKafed.AsString +
#9+ ReportQuerySumBall.AsString ;
ReportQuery.Next;
end;
ReportQuery.Close;
WordDoc.Paragraphs.Get_Last.Range.InsertAfter(TmpS);
EndR:=WordDoc.Paragraphs.Get_Last.Range.End_;
WordDoc.Range(StartR,EndR).Select;
pSeparator:=wdSeparateByTabs;
pNumRows:=EmptyParam;
pNumColumns:=5;
WordDoc.Range(StartR,EndR).ConvertToTable(
pSeparator, pNumRows, pNumColumns,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam);
WordTbl:=WordDoc.Tables.Item(1);
WordTbl.Range.Paragraphs.Alignment := wdAlignParagraphLeft;
WordTbl.Rows.Alignment := wdAlignRowCenter;
WordTbl.Range.Font.Bold:=0;
WordTbl.Range.Font.Size:=12;
WordTbl.Columns.Item(1).Width := 20;
WordTbl.Columns.Item(2).Width := 170;
WordTbl.Columns.Item(3).Width := 140;
WordTbl.Columns.Item(4).Width := 140;
WordTbl.Columns.Item(5).Width := 40;
WordTbl.Range.Font.Size := 10;
WordTbl.Rows.SpaceBetweenColumns := 0;
WordTbl.Rows.Item(1).Range.Font.Bold:=1;
WordTbl.Rows.Item(1).Range.Paragraphs.Alignment := wdAlignParagraphCenter;
WordTbl.Borders.Item(wdBorderTop).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderLeft).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderBottom).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderRight).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderHorizontal).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderVertical).LineStyle := wdLineStyleSingle;
WordTbl.Columns.Item(1).Select;
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
WordTbl.Columns.Item(5).Select;
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;
WordApp.Selection.Collapse(EmptyParam);
WordApp.Options.CheckSpellingAsYouType:=Check1;
WordApp.Options.CheckGrammarAsYouType:=Check2;
WordApp.Visible:=true;
// активизировать приложение
WordApp.Activate;
// максимизировать приложение
WordApp.WindowState:=wdWindowStateMaximize;
WordApp.Disconnect;
end;
Если что обрашайся постараюсь помочь...
← →
SanteR (2003-04-03 12:53) [2]Отчет делаешь со всеми полями, а при печати проверяешь некую булеву переменную bOptionalField, например
QRLabelOptional1->Enabled = bOptionalField;
Возможно пригодятся обработчики событий
QuickRep1BeforePrint и QRLabelPrint.
← →
Valeriya (2003-04-03 13:07) [3]2 SanterR: поподробнее, как обработчики написать, пожалуйста.
← →
Johnmen (2003-04-03 13:18) [4]Обработчики пишутся примерно так : C:\Program Files\Borland\Delphi...\Demos\QuickRpt
И писать в теме "QReport и геморой" по крайней мере некорректно...
По сути вопроса :
коротко - все делается динамически,
подробно - большие пространства и значительное время для ответа
← →
SanteR (2003-04-03 13:20) [5]Если bOptinal будет false, то столбец
будет с пустыми ячейками.
void __fastcall TQuickReport1::QuickRep1BeforePrint(
TCustomQuickRep *Sender, bool &PrintReport)
{
QRLabelOptional1->Enabled = bOptional;
QRExprOptional1->Enabled = bOptional;
}
//---------------------------------------------------------------------------
← →
SanteR (2003-04-03 13:25) [6]Следующий код возможно подскажет как убрать также и рамки ячеек
void __fastcall TQuickReport1::QRLabelOptional1Print(TObject *sender, AnsiString &Value)
{
((TQRLabel*)sender)->Frame->DrawBottom = bDrawBottom;
}
//---------------------------------------------------------------------------
← →
Valeriya (2003-04-03 13:49) [7]Ещё вопрос: а если много столбцов получится?
← →
SanteR (2003-04-03 14:07) [8]Если столбцы уже не помещаются по ширине страницы, то возможно поможет использование одного и того же столбца для вывода разной информации в разное время. В обработчике QRLabelPrint, например, можно подменять значение, которое будет напечатано:
void __fastcall TQuickReport1::QRLabelOptional1Print(TObject *sender, AnsiString &Value)
{
if(bOther) Value = ValueOther;
}
//---------------------------------------------------------------------------
А вообще у меня был только один последний столбец, который я печатал только по требованию. (21-я графа в индивидуальной карточке ЕСН)
Привет славному городу Подольску от программистов из Пущино!
← →
Valeriya (2003-04-03 15:02) [9]Спасибочки, я не подольчанка правда, но программистам из Пущино благодарна искренне :)
← →
Ozone (2003-04-04 06:15) [10]To Johnmen ©
".."QReport и геморой"..."
Тавталогия получается ..........
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c