Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.21;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
14-67522
Jaxtor
2003-04-03 12:35
2003.04.21
Софт для прошивки телефона


3-67089
Наташа
2003-04-03 23:00
2003.04.21
Создание отчета Master-Detail с помощью Free_Report


3-67183
Жорик
2003-04-03 14:36
2003.04.21
Как написать базу на ADO, используя MS Access????


14-67470
race1
2003-04-06 13:42
2003.04.21
stretch wallpaper


3-67146
MishaS
2003-04-03 10:56
2003.04.21
Фиксация записи