mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 16:16:05 +02:00
LazReport, Child bands impleementation by Gabor Boros with changes, issue #26996
git-svn-id: trunk@46838 -
This commit is contained in:
parent
3497257130
commit
735b4ac629
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -2224,6 +2224,12 @@ components/lazreport/images/package_images.bat svneol=native#text/x-msdos-progra
|
||||
components/lazreport/license-lazreport.txt svneol=native#text/plain
|
||||
components/lazreport/license-rus.txt svneol=native#text/plain
|
||||
components/lazreport/license.txt svneol=native#text/plain
|
||||
components/lazreport/samples/ChildBand_Example/ChildBand_Example.ico -text
|
||||
components/lazreport/samples/ChildBand_Example/ChildBand_Example.lpi svneol=native#text/plain
|
||||
components/lazreport/samples/ChildBand_Example/ChildBand_Example.lpr svneol=native#text/pascal
|
||||
components/lazreport/samples/ChildBand_Example/ChildBand_Example.res -text
|
||||
components/lazreport/samples/ChildBand_Example/unit1.lfm svneol=native#text/plain
|
||||
components/lazreport/samples/ChildBand_Example/unit1.pas svneol=native#text/pascal
|
||||
components/lazreport/samples/Demo_CrossTab/demo_cross.lrf svneol=LF#text/xml eol=lf
|
||||
components/lazreport/samples/Demo_CrossTab/project1.ico -text
|
||||
components/lazreport/samples/Demo_CrossTab/project1.lpi svneol=native#text/plain
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 134 KiB |
@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="9"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<MainUnit Value="0"/>
|
||||
<Title Value="ChildBand_Example"/>
|
||||
<ResourceType Value="res"/>
|
||||
<UseXPManifest Value="True"/>
|
||||
<Icon Value="0"/>
|
||||
</General>
|
||||
<i18n>
|
||||
<EnableI18N LFM="False"/>
|
||||
</i18n>
|
||||
<VersionInfo>
|
||||
<StringTable ProductVersion=""/>
|
||||
</VersionInfo>
|
||||
<BuildModes Count="1">
|
||||
<Item1 Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<local>
|
||||
<FormatVersion Value="1"/>
|
||||
</local>
|
||||
</RunParams>
|
||||
<RequiredPackages Count="3">
|
||||
<Item1>
|
||||
<PackageName Value="FCL"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="lazreport"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item3>
|
||||
</RequiredPackages>
|
||||
<Units Count="2">
|
||||
<Unit0>
|
||||
<Filename Value="ChildBand_Example.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit0>
|
||||
<Unit1>
|
||||
<Filename Value="unit1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="Form1"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="Unit1"/>
|
||||
</Unit1>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="ChildBand_Example"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Options>
|
||||
<Win32>
|
||||
<GraphicApplication Value="True"/>
|
||||
</Win32>
|
||||
</Options>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions Count="3">
|
||||
<Item1>
|
||||
<Name Value="EAbort"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item3>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@ -0,0 +1,21 @@
|
||||
program ChildBand_Example;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, Unit1
|
||||
{ you can add units after this };
|
||||
|
||||
{$R *.res}
|
||||
|
||||
begin
|
||||
RequireDerivedFormResource := True;
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end.
|
||||
|
Binary file not shown.
68
components/lazreport/samples/ChildBand_Example/unit1.lfm
Normal file
68
components/lazreport/samples/ChildBand_Example/unit1.lfm
Normal file
File diff suppressed because one or more lines are too long
73
components/lazreport/samples/ChildBand_Example/unit1.pas
Normal file
73
components/lazreport/samples/ChildBand_Example/unit1.pas
Normal file
@ -0,0 +1,73 @@
|
||||
unit Unit1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, LR_Class, LR_DBSet, Forms, Controls, Graphics,
|
||||
Dialogs, StdCtrls, BufDataset, db;
|
||||
|
||||
type
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
TForm1 = class(TForm)
|
||||
BufDataset1: TBufDataset;
|
||||
Button1: TButton;
|
||||
CheckBox1: TCheckBox;
|
||||
CheckBox2: TCheckBox;
|
||||
frDBDataSet1: TfrDBDataSet;
|
||||
frReport1: TfrReport;
|
||||
procedure Button1Click(Sender: TObject);
|
||||
procedure CheckBox1Change(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure frReport1BeginBand(Band: TfrBand);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TForm1 }
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
var
|
||||
i:Integer;
|
||||
|
||||
begin
|
||||
BufDataset1.CreateDataset;
|
||||
for i:=1 to 10 do
|
||||
begin
|
||||
BufDataset1.AppendRecord([i]);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.frReport1BeginBand(Band: TfrBand);
|
||||
begin
|
||||
if CheckBox1.Checked and (Band.Name='Child1') then
|
||||
begin
|
||||
Band.Visible:=((BufDataset1.FieldByName('FIELD1').Value mod 2)=0);
|
||||
Band.PrintChildIfNotVisible:=CheckBox2.Checked;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.Button1Click(Sender: TObject);
|
||||
begin
|
||||
frReport1.ShowReport;
|
||||
end;
|
||||
|
||||
procedure TForm1.CheckBox1Change(Sender: TObject);
|
||||
begin
|
||||
CheckBox2.Visible:=CheckBox1.Checked;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -87,6 +87,16 @@ msgid "Cross footer"
|
||||
msgstr "Křížení patičky"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Není"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Není"
|
||||
|
||||
@ -2232,6 +2242,10 @@ msgstr "Měřítko"
|
||||
msgid "&Whole page"
|
||||
msgstr "Celá stránka"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#, fuzzy
|
||||
#| msgid "Printer selected is not valid"
|
||||
|
@ -96,6 +96,16 @@ msgid "Cross footer"
|
||||
msgstr "Kreuz-Footer"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Keiner"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Keiner"
|
||||
|
||||
@ -2224,6 +2234,10 @@ msgstr "Maßstab"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Ganze &Seite"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#| msgid "Printer selected is not valid"
|
||||
msgid "Selected printer is not valid"
|
||||
|
@ -89,6 +89,16 @@ msgid "Cross footer"
|
||||
msgstr "Pie de datos cruzados"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Ninguno"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Ninguno"
|
||||
|
||||
@ -2214,6 +2224,10 @@ msgstr "Escala"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Toda la página"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#| msgid "Printer selected is not valid"
|
||||
msgid "Selected printer is not valid"
|
||||
|
@ -95,6 +95,16 @@ msgid "Cross footer"
|
||||
msgstr "Pied de page tableau"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Aucun"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Aucun"
|
||||
|
||||
@ -2245,6 +2255,10 @@ msgstr "Échelle"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Page entière"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#, fuzzy
|
||||
#| msgid "Printer selected is not valid"
|
||||
|
@ -88,6 +88,16 @@ msgid "Cross footer"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Nincs"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Nincs"
|
||||
|
||||
@ -2198,6 +2208,10 @@ msgstr "Átméretezés"
|
||||
msgid "&Whole page"
|
||||
msgstr "Teljes oldal"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
msgid "Selected printer is not valid"
|
||||
msgstr "A kiválasztott nyomtató érvénytelen"
|
||||
|
@ -86,6 +86,16 @@ msgid "Cross footer"
|
||||
msgstr "Footer silang"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Tidak ada"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Tidak ada"
|
||||
|
||||
@ -2234,6 +2244,10 @@ msgstr "Skala"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Seluruh halaman"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#, fuzzy
|
||||
#| msgid "Printer selected is not valid"
|
||||
|
@ -90,6 +90,16 @@ msgid "Cross footer"
|
||||
msgstr "Pedice incrodiato"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Nessuno"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Nessuno"
|
||||
|
||||
@ -2196,6 +2206,10 @@ msgstr "Scala"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Intera pagina"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
msgid "Selected printer is not valid"
|
||||
msgstr "La stampante selezionata non è valida."
|
||||
@ -2544,3 +2558,4 @@ msgstr "a capo parole"
|
||||
#: lr_const.syes
|
||||
msgid "Yes"
|
||||
msgstr "&Sì"
|
||||
|
||||
|
@ -88,6 +88,16 @@ msgid "Cross footer"
|
||||
msgstr "Kryžmės poraštės"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Joks"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Joks"
|
||||
|
||||
@ -2222,6 +2232,10 @@ msgstr "Mastelis"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Visas lapas"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#, fuzzy
|
||||
#| msgid "Printer selected is not valid"
|
||||
|
@ -89,6 +89,16 @@ msgid "Cross footer"
|
||||
msgstr "Stopka krzyżowa"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Żaden"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Żaden"
|
||||
|
||||
@ -2237,6 +2247,10 @@ msgstr "Skaluj"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Cała strona"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#, fuzzy
|
||||
#| msgid "Printer selected is not valid"
|
||||
|
@ -81,6 +81,12 @@ msgid "Cross footer"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sband22
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sband23
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
@ -2187,6 +2193,10 @@ msgstr ""
|
||||
msgid "&Whole page"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
msgid "Selected printer is not valid"
|
||||
msgstr ""
|
||||
|
@ -87,6 +87,16 @@ msgid "Cross footer"
|
||||
msgstr "Rodapé Ref.Cruz."
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Nenhum"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Nenhum"
|
||||
|
||||
@ -2221,6 +2231,10 @@ msgstr "Escala"
|
||||
msgid "&Whole page"
|
||||
msgstr "Página &inteira"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#, fuzzy
|
||||
#| msgid "Printer selected is not valid"
|
||||
|
@ -86,6 +86,16 @@ msgid "Cross footer"
|
||||
msgstr "Cross-примечание"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Нет"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Нет"
|
||||
|
||||
@ -2218,6 +2228,10 @@ msgstr "Масштаб"
|
||||
msgid "&Whole page"
|
||||
msgstr "&Вся страница"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#| msgid "Printer selected is not valid"
|
||||
msgid "Selected printer is not valid"
|
||||
|
@ -89,6 +89,16 @@ msgid "Cross footer"
|
||||
msgstr "Перехресний нижній колонтитул"
|
||||
|
||||
#: lr_const.sband22
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband22"
|
||||
msgid "Child"
|
||||
msgstr "Немає"
|
||||
|
||||
#: lr_const.sband23
|
||||
#, fuzzy
|
||||
#| msgid "None"
|
||||
msgctxt "lr_const.sband23"
|
||||
msgid "None"
|
||||
msgstr "Немає"
|
||||
|
||||
@ -2223,6 +2233,10 @@ msgstr "Масштаб"
|
||||
msgid "&Whole page"
|
||||
msgstr "Сторінка &повністю"
|
||||
|
||||
#: lr_const.sprintchildifnotvisible
|
||||
msgid "Print child if not visible"
|
||||
msgstr ""
|
||||
|
||||
#: lr_const.sprintererror
|
||||
#, fuzzy
|
||||
#| msgid "Printer selected is not valid"
|
||||
|
@ -71,7 +71,7 @@ var
|
||||
First: Boolean;
|
||||
begin
|
||||
First := True;
|
||||
for bt := btReportTitle to btCrossFooter do
|
||||
for bt := btReportTitle to btChild do
|
||||
begin
|
||||
b := TRadioButton.Create(GB1);
|
||||
b.Parent := GB1;
|
||||
@ -80,7 +80,7 @@ begin
|
||||
b.Caption := frBandNames[Bt];
|
||||
b.OnClick := @bClick;
|
||||
b.Enabled := (bt in [btMasterHeader..btSubDetailFooter,
|
||||
btGroupHeader, btGroupFooter]) or not frCheckBand(bt);
|
||||
btGroupHeader, btGroupFooter, btChild]) or not frCheckBand(bt);
|
||||
if b.Enabled and First then
|
||||
begin
|
||||
b.Checked := True;
|
||||
|
@ -37,6 +37,7 @@ const
|
||||
flBandOnFirstPage = $10;
|
||||
flBandOnLastPage = $20;
|
||||
flBandRepeatHeader = $40;
|
||||
flBandPrintChildIfNotVisible = $80;
|
||||
|
||||
flPictCenter = 2;
|
||||
flPictRatio = 4;
|
||||
@ -67,7 +68,7 @@ type
|
||||
btSubDetailHeader, btSubDetailData, btSubDetailFooter,
|
||||
btOverlay, btColumnHeader, btColumnFooter,
|
||||
btGroupHeader, btGroupFooter,
|
||||
btCrossHeader, btCrossData, btCrossFooter, btNone);
|
||||
btCrossHeader, btCrossData, btCrossFooter, btChild, btNone);
|
||||
TfrBandTypes = set of TfrBandType;
|
||||
TfrDataSetPosition = (psLocal, psGlobal);
|
||||
TfrValueType = (vtNotAssigned, vtDBField, vtOther, vtFRVar);
|
||||
@ -535,13 +536,15 @@ type
|
||||
fDataSetStr : String;
|
||||
fBandType : TfrBandType;
|
||||
fCondition : String;
|
||||
|
||||
fChild : String;
|
||||
|
||||
procedure P1Click(Sender: TObject);
|
||||
procedure P2Click(Sender: TObject);
|
||||
procedure P3Click(Sender: TObject);
|
||||
procedure P4Click(Sender: TObject);
|
||||
procedure P5Click(Sender: TObject);
|
||||
procedure P6Click(Sender: TObject);
|
||||
procedure P7Click(Sender: TObject);
|
||||
function GetTitleRect: TRect;
|
||||
function TitleSize: Integer;
|
||||
procedure CalcTitleSize;
|
||||
@ -569,6 +572,7 @@ type
|
||||
published
|
||||
property DataSet: String read fDataSetStr write fDataSetStr;
|
||||
property GroupCondition: String read fCondition write fCondition;
|
||||
property Child: String read fChild write fChild;
|
||||
|
||||
property BandType: TfrBandType read fBandType write fBandType;
|
||||
|
||||
@ -693,6 +697,7 @@ type
|
||||
Positions: Array[TfrDatasetPosition] of Integer;
|
||||
LastGroupValue: Variant;
|
||||
HeaderBand, FooterBand, LastBand: TfrBand;
|
||||
ChildBand: TfrBand;
|
||||
Values: TStringList;
|
||||
Count: Integer;
|
||||
DisableInit: Boolean;
|
||||
@ -725,6 +730,7 @@ type
|
||||
|
||||
Typ: TfrBandType;
|
||||
PrintIfSubsetEmpty, NewPageAfter, Stretched, PageBreak: Boolean;
|
||||
PrintChildIfNotVisible: Boolean;
|
||||
Objects: TFpList;
|
||||
DataSet: TfrDataSet;
|
||||
IsVirtualDS: Boolean;
|
||||
@ -1416,11 +1422,12 @@ function FindObjectProps(AObjStr:string; out frObj:TfrObject; out PropName:strin
|
||||
|
||||
const
|
||||
lrTemplatePath = 'LazReportTemplate/';
|
||||
frCurrentVersion = 27;
|
||||
frCurrentVersion = 28;
|
||||
// version 2.5: lazreport: added to binary stream ParentBandType variable
|
||||
// on TfrView, used to extend export facilities
|
||||
// version 2.6: lazreport: added to binary stream Tag property on TfrView
|
||||
// version 2.7: lazreport: added to binary stream FOnClick, FOnMouseEnter, FOnMouseLeave, FCursor property on TfrMemoView
|
||||
// version 2.8. lazreport: added support for child bands
|
||||
|
||||
frSpecCount = 9;
|
||||
frSpecFuncs: Array[0..frSpecCount - 1] of String = ('PAGE#', '',
|
||||
@ -1740,7 +1747,8 @@ begin
|
||||
frBandNames[btCrossHeader] := sBand19;
|
||||
frBandNames[btCrossData] := sBand20;
|
||||
frBandNames[btCrossFooter] := sBand21;
|
||||
frBandNames[btNone] := sBand22;
|
||||
frBandNames[btChild] := sBand22;
|
||||
frBandNames[btNone] := sBand23;
|
||||
|
||||
frSpecArr[0] := sVar1;
|
||||
frSpecArr[1] := sVar2;
|
||||
@ -4844,6 +4852,7 @@ begin
|
||||
BandType := TFrBandView(Source).BandType;
|
||||
DataSet := TFrBandView(Source).DataSet;
|
||||
GroupCondition:=TFrBandView(Source).GroupCondition;
|
||||
Child := TFrBandView(Source).Child;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -4854,8 +4863,12 @@ begin
|
||||
With Stream do
|
||||
if frVersion>23 then begin
|
||||
Read(fBandType,SizeOf(BandType));
|
||||
if (frVersion<28) and (fBandType=btChild) then
|
||||
fBandType := btNone; // btNone and btChild were swapped in version 29
|
||||
fCondition :=ReadString(Stream);
|
||||
fDataSetStr:=ReadString(Stream);
|
||||
if frVersion>=28 then
|
||||
fChild :=ReadString(Stream);
|
||||
end else
|
||||
begin
|
||||
if StreamMode=smDesigning then begin
|
||||
@ -4872,6 +4885,7 @@ begin
|
||||
RestoreProperty('BandType',XML.GetValue(Path+'BandType/Value','')); // todo chk
|
||||
FCondition := XML.GetValue(Path+'Condition/Value', ''); // todo chk
|
||||
FDatasetStr := XML.GetValue(Path+'DatasetStr/Value', ''); // todo chk
|
||||
FChild := XML.GetValue(Path+'Child/Value', '');
|
||||
end;
|
||||
|
||||
procedure TfrBandView.SaveToStream(Stream: TStream);
|
||||
@ -4883,6 +4897,7 @@ begin
|
||||
Write(fBandType,SizeOf(fBandType));
|
||||
frWriteString(Stream, fCondition);
|
||||
frWriteString(Stream, fDataSetStr);
|
||||
frWriteString(Stream, fChild);
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -4892,6 +4907,7 @@ begin
|
||||
XML.SetValue(Path+'BandType/Value', GetSaveProperty('BandType')); //Ord(FBandType)); // todo: use symbolic values
|
||||
XML.SetValue(Path+'Condition/Value', FCondition);
|
||||
XML.SetValue(Path+'DatasetStr/Value', FDatasetStr);
|
||||
XML.SetValue(Path+'Child/Value', FChild);
|
||||
end;
|
||||
|
||||
procedure TfrBandView.Draw(aCanvas: TCanvas);
|
||||
@ -5033,7 +5049,7 @@ var
|
||||
m: TMenuItem;
|
||||
begin
|
||||
if BandType in [btReportTitle, btReportSummary, btPageHeader, btCrossHeader,
|
||||
btMasterHeader..btSubDetailFooter, btGroupHeader, btGroupFooter] then
|
||||
btMasterHeader..btSubDetailFooter, btGroupHeader, btGroupFooter, btChild] then
|
||||
inherited DefinePopupMenu(Popup);
|
||||
|
||||
if BandType in [btReportTitle, btReportSummary, btMasterData, btDetailData,
|
||||
@ -5093,6 +5109,15 @@ begin
|
||||
m.Checked := (Flags and flBandRepeatHeader) <> 0;
|
||||
Popup.Items.Add(m);
|
||||
end;
|
||||
|
||||
if BandType <> btPageFooter then
|
||||
begin
|
||||
m := TMenuItem.Create(Popup);
|
||||
m.Caption := sPrintChildIfNotVisible;
|
||||
m.OnClick := @P7Click;
|
||||
m.Checked := (Flags and flBandPrintChildIfNotVisible) <> 0;
|
||||
Popup.Items.Add(m);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrBandView.P1Click(Sender: TObject);
|
||||
@ -5181,6 +5206,16 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrBandView.P7Click(Sender: TObject);
|
||||
begin
|
||||
frDesigner.BeforeChange;
|
||||
with Sender as TMenuItem do
|
||||
begin
|
||||
Checked := not Checked;
|
||||
Flags := (Flags and not flBandPrintChildIfNotVisible) + Word(Checked) * flBandPrintChildIfNotVisible;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TfrBandView.GetTitleRect: TRect;
|
||||
begin
|
||||
if BandType in [btCrossHeader..btCrossFooter] then
|
||||
@ -6921,6 +6956,8 @@ begin
|
||||
else
|
||||
begin
|
||||
DoDraw;
|
||||
if (ChildBand <> nil) then
|
||||
ChildBand.Draw;
|
||||
if not (Typ in [btMasterData, btDetailData, btSubDetailData, btGroupHeader]) and
|
||||
NewPageAfter then
|
||||
Parent.NewPage;
|
||||
@ -6931,9 +6968,13 @@ begin
|
||||
// if band is not visible, just performing aggregate calculations
|
||||
// relative to it
|
||||
else
|
||||
if Typ in [btMasterData, btDetailData, btSubDetailData] then
|
||||
Parent.DoAggregate([btPageFooter, btMasterFooter, btDetailFooter,
|
||||
btSubDetailFooter, btGroupFooter, btReportSummary]);
|
||||
begin
|
||||
if (ChildBand <> nil) and PrintChildIfNotVisible then
|
||||
ChildBand.Draw;
|
||||
if Typ in [btMasterData, btDetailData, btSubDetailData] then
|
||||
Parent.DoAggregate([btPageFooter, btMasterFooter, btDetailFooter,
|
||||
btSubDetailFooter, btGroupFooter, btReportSummary]);
|
||||
end;
|
||||
|
||||
// check if multiple pagefooters (in cross-tab report) - resets last of them
|
||||
if not DisableInit then
|
||||
@ -7335,7 +7376,8 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
for b := btReportTitle to btGroupFooter do // fill other bands
|
||||
for b := btReportTitle to btChild do // fill other bands
|
||||
if not (b in [btCrossHeader..btCrossFooter]) then
|
||||
begin
|
||||
FirstBand := True;
|
||||
Bnd := Bands[b];
|
||||
@ -7370,6 +7412,7 @@ begin
|
||||
InitDataSet(TfrBandView(Bt).DataSet);
|
||||
Stretched := (Flags and flStretched) <> 0;
|
||||
PrintIfSubsetEmpty := (Flags and flBandPrintIfSubsetEmpty) <> 0;
|
||||
PrintChildIfNotVisible := (Flags and flBandPrintChildIfNotVisible) <> 0;
|
||||
if Skip then
|
||||
begin
|
||||
NewPageAfter := False;
|
||||
@ -7527,6 +7570,26 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
for b := btReportTitle to btChild do
|
||||
begin
|
||||
Bnd := Bands[b];
|
||||
while Bnd <> nil do
|
||||
begin
|
||||
if Bnd.View <> nil then
|
||||
begin
|
||||
s := TfrBandView(Bnd.View).Child;
|
||||
|
||||
for i := 0 to RTObjects.Count - 1 do
|
||||
begin
|
||||
bt :=TfrView(RTObjects[i]);
|
||||
if (bt.Typ = gtBand) and (TfrBandView(bt).BandType=btChild) and (bt.Name=s) then
|
||||
Bnd.ChildBand:=bt.Parent;
|
||||
end;
|
||||
end;
|
||||
Bnd := Bnd.Next;
|
||||
end;
|
||||
end;
|
||||
|
||||
if ColCount = 0 then ColCount := 1;
|
||||
ColWidth := (RightMargin - LeftMargin) div ColCount;
|
||||
end;
|
||||
|
@ -186,7 +186,8 @@ resourcestring
|
||||
sBand19 = 'Cross header';
|
||||
sBand20 = 'Cross data';
|
||||
sBand21 = 'Cross footer';
|
||||
sBand22 = 'None';
|
||||
sBand22 = 'Child';
|
||||
sBand23 = 'None';
|
||||
|
||||
sVar1 = 'Page#';
|
||||
sVar2 = 'Expression';
|
||||
@ -223,6 +224,7 @@ resourcestring
|
||||
sNotAssigned = '[None]';
|
||||
sFormNewPage = 'Force new page';
|
||||
sPrintIfSubsetEmpty = 'Print if detail empty';
|
||||
sPrintChildIfNotVisible = 'Print child if not visible';
|
||||
sBreaked = 'Breaked';
|
||||
sPictureCenter = 'Center picture';
|
||||
sKeepAspectRatio = 'Keep aspect ratio';
|
||||
|
Loading…
Reference in New Issue
Block a user