📄 pageman.pas
字号:
SubBand.SetOrderDirect(999);
TSctGroupPage(page).orderbands;
TSctGroupPage(page).arrangebands;
updateoutline;
Spot := BandList.Items.IndexOfObject(Subband);
BandList.ItemIndex := Spot;
BandListClick(BandList);
end else Raise Exception.Create('Could not create band.');
except
if SubBand <> nil then Subband.Free;
Raise;
end;
end;
end;
end;
procedure TSctPageManager.subdataaddClick(Sender: TObject);
var
SubDataBand: TSctSubDataBand;
bd: TSctBand;
Spot: Integer;
dsg: TSctDataSourceGuide;
begin
if AceBandCheck(TSctGroupPage(Page), False, True) then
begin
if BandIndex <> -1 then
begin
SubDataBand := nil;
bd := TSctBand(BandList.Items.Objects[BandIndex]);
try
SubDataBand := TSctSubDataBand.Create(Page.Owner);
if SctAutoSetComponentName(SubDataBand, 'Data', False) then
begin
SubDataBand.Parent := TSctGroupPage(Page);
SubDataBand.Band := bd;
SubDataBand.Height := 20;
SubDataBand.Top := 0;
SubDataBand.width := 200;
SubDataBand.BandName := SubDataBand.Name;
SubDataBand.SetOrderDirect(999);
SubDataBand.UpdateLevel := TSctLevel.Create(Page.Owner);
SubDataBand.UpdateLevel.Parent := TSctGroupPage(Page);
SctAutoSetComponentName(SubDataBand.UpdateLevel, SubDataBand.Name+'Level', False);
SubDataBand.UpdateLevel.IsHeader := False;
{$ifdef AceBDE}
if TWinControl(Sender).Tag > 0 then
begin
dsg := TSctGroupPage(FPage).DataSourceList.Items[TWinControl(Sender).Tag-1];
dsg.UpdateLevel := SubDataBand.UpdateLevel;
SubDataBand.DataSource := dsg.DataSource;
end;
{$endif}
end else Raise Exception.Create('Could not create band.');
except
if SubDataBand <> nil then SubDataBand.Free;
Raise;
end;
PageDesigner.Modified;
TSctGroupPage(page).orderbands;
TSctGroupPage(page).arrangebands;
UpdateOutline;
Spot := BandList.Items.IndexOfObject(SubDataBand);
BandList.ItemIndex := Spot;
BandListClick(BandList);
end;
end;
end;
procedure TSctPageManager.DeleteSubDataBandsOf(bd: TSctBand);
var
pos: Integer;
Done: Boolean;
subdata: TSctSubDataBand;
pg: TSctGroupPage;
begin
Done := False;
pos := 0;
pg := TSctGroupPage(page);
if pg.subdatabands <> nil then
begin
while (Not Done) do
begin
if pg.subdatabands.Count > pos then
begin
subdata := TSctSubDataBand(pg.subdatabands.items[pos]);
if (subdata.band = bd) Then
begin
DeleteSubBandsOf(subdata);
DeleteSubDataBandsOf(subdata);
DeleteHFBandsOf(subdata);
if subdata.updatelevel <> nil Then
begin
subdata.updatelevel.parent := nil;
subdata.updatelevel.free;
end;
subdata.Parent := nil;
subdata.SafeDelete;
pos := 0;
end else Inc(Pos);
end else Done := True;
if pg.subdatabands = nil then Done := True;
end;
end;
end;
procedure TSctPageManager.DeleteSubBandsOf(bd: TSctBand);
var
pos: Integer;
Done: Boolean;
subband: TSctSubBand;
pg: TSctGroupPage;
begin
Done := False;
pos := 0;
pg := TSctGroupPage(page);
if pg.subbands <> nil then
begin
while (Not Done) do
begin
if pg.subbands.Count > pos then
begin
subband := TSctSubBand(pg.subbands.items[pos]);
if (subband.band = bd) Then
begin
DeleteSubDataBandsOf(subband);
subband.Parent := nil;
subband.SafeDelete;
pos := 0;
end else Inc(Pos);
end else Done := True;
if pg.subbands = nil then Done := True;
end;
end;
end;
procedure TSctPageManager.datahfdelete( bd: TObject );
var
hfb: TSctDataHeadBand;
begin
{ see message on delete group }
ComponentSelect(PageDesigner, page);
{ delete any headers or footer for the subdata }
hfb := TSctDataHeadBand(bd);
if hfb.updatelevel <> nil Then
begin
hfb.updatelevel.parent := nil;
hfb.updatelevel.free;
end;
DeleteSubBandsOf(hfb);
DeleteSubDataBandsOf(hfb);
hfb.Parent := nil;
hfb.SafeDelete;
PageDesigner.Modified;
TSctGroupPage(page).orderbands;
TSctGroupPage(page).arrangebands;
UpdateOutLine;
end;
procedure TSctPageManager.DeleteHFBandsOf(bd: TObject);
var
pg: TSctGroupPage;
pos: Integer;
hfb: TSctDataHeadBand;
done: Boolean;
begin
{ delete any headers or footer for the subdata }
pg := TSctGroupPage(Page);
Done := False;
pos := 0;
if pg.datahfbands <> nil then
begin
while (Not Done) do
begin
if pg.datahfbands.Count > pos then
begin
hfb := pg.datahfbands.items[pos];
if hfb.band = bd Then
begin
if hfb.updatelevel <> nil Then
begin
hfb.updatelevel.parent := nil;
hfb.updatelevel.free;
end;
DeleteSubBandsOf(hfb);
DeleteSubDataBandsOf(hfb);
hfb.Parent := nil;
hfb.SafeDelete;
pos := 0;
end else Inc(Pos);
end else Done := True;
if pg.datahfbands = nil then Done := True;
end;
end;
end;
procedure TSctPageManager.btnDeleteClick(Sender: TObject);
var
bd: TSctBand;
Ask: Boolean;
Spot: Integer;
begin
if BandIndex <> -1 then
begin
bd := TSctBand(BandList.Items.Objects[BandIndex]);
if AceIsAncestor(bd) then ShowMessage('Selection contains a component '
+ 'introduced in an ancestor form which cannot be deleted')
else
begin
Ask := False;
Spot := 0;
while Spot < BandList.Items.Count do
begin
if TSctBand(BandList.Items.Objects[Spot]).Band = bd then
begin
Ask := True;
Spot := BandList.Items.Count;
end;
Inc(Spot);
end;
if Not Ask then Ask := bd.Labels <> nil;
if Ask then
begin
Ask :=
Application.MessageBox('This band contains labels or child bands. Delete Anyway?'
, 'Confirm Delete', MB_YESNO) = ID_NO;
end;
if Not Ask then
begin
if bd is TSctSubDataBand Then subdatadelete( bd )
else if bd is TSctSubBand Then subbanddelete( bd )
else if bd is TSctDataHeadBand Then datahfdelete( bd )
else if bd is TSctOverLayBand Then overlaydelete( bd );
end;
end;
end;
end;
procedure TSctPageManager.subdatadelete(bd: TObject);
var
band: TSctSubDataBand;
begin
{ see message on delete group }
ComponentSelect(PageDesigner, page);
band := TSctSubDataBand(bd);
if band.updatelevel <> nil Then
begin
band.updatelevel.parent := nil;
band.updatelevel.free;
end;
{ if there are any subdatabands to this subdataband then delete them }
{ delete any subbands to any of the bands above }
DeleteSubBandsOf(band);
DeleteSubDataBandsOf(band);
DeleteHFBandsOf(band);
band.Parent := nil;
band.SafeDelete;
PageDesigner.Modified;
TSctGroupPage(page).orderbands;
TSctGroupPage(page).arrangebands;
UpdateOutLine;
end;
procedure TSctPageManager.subbanddelete(bd: TObject);
var
band: TSctSubBand;
begin
{ see message on delete group }
ComponentSelect(PageDesigner, page);
band := TSctSubBand(bd);
{ delete any subdatabands of this band }
DeleteSubDataBandsOf(band);
band.Parent := nil;
band.SafeDelete;
PageDesigner.Modified;
TSctGroupPage(page).orderbands;
TSctGroupPage(page).arrangebands;
UpdateOutLine;
end;
procedure TSctPageManager.addheadfootbandClick(Sender: TObject);
var
hfb: TSctDataHeadBand;
AddHead: Boolean;
bd: TSctSubDataBand;
BandName: String;
Spot: Integer;
begin
if BandIndex <> -1 then
begin
bd := TSctSubDataBand(BandList.Items.Objects[BandIndex]);
AddHead := Sender = DataHeader1;
hfb := nil;
try
if AddHead Then
begin
hfb := TSctDataHeadBand.Create(Page.Owner);
BandName := bd.Name + 'Header';
end else
begin
hfb := TSctDataFootBand.Create(Page.Owner);
BandName := bd.Name + 'Footer';
end;
if SctAutoSetComponentName(hfb, BandName, False) then
begin
hfb.Parent := TSctGroupPage(Page);
hfb.Band := bd;
hfb.height := 20;
hfb.Top := 0;
hfb.width := 200;
hfb.bandname := hfb.Name;
hfb.UpdateLevel := TSctLevel.Create(Page.Owner);
hfb.UpdateLevel.Parent := TSctGroupPage(Page);
SctAutoSetComponentName(hfb.UpdateLevel, hfb.Name + 'Level', False);
hfb.UpdateLevel.IsHeader := AddHead;
TSctGroupPage(Page).orderbands;
TSctGroupPage(Page).arrangebands;
updateoutline;
Spot := BandList.Items.IndexOfObject(hfb);
BandList.ItemIndex := Spot;
BandListClick(BandList);
end else Raise Exception.Create('Invalid band name');
except
if hfb <> nil then hfb.Free;
{Application.HandleException(self);}
Raise;
end;
end;
end;
procedure TSctPageManager.AddOverLayClick(Sender: TObject);
var
OverlayBand: TSctOverlayBand;
Spot: Integer;
begin
OverlayBand := nil;
try
OverLayBand := TSctOverLayBand.Create(Page.Owner);
if SctAutoSetComponentName(OverlayBand, 'OverlayBand', False) then
begin
OverlayBand.Parent := TSctGroupPage(FPage);
OverlayBand.Height := 20;
OverlayBand.BandName := OverlayBand.Name;
OverlayBand.UpdateLevel := TSctLevel.Create(Page.Owner);
OverlayBand.UpdateLevel.Parent := TSctGroupPage(FPage);
SctAutoSetComponentName(OverlayBand.UpdateLevel, OverlayBand.Name+'Level', False);
OverlayBand.UpdateLevel.IsHeader := False;
OverlayBand.First := Sender = PrintFirst1;
OverlayBand.SetOrderDirect(999);
TSctGroupPage(Page).orderbands;
TSctGroupPage(Page).arrangebands;
updateoutline;
Spot := BandList.Items.IndexOfObject(OverlayBand);
BandList.ItemIndex := Spot;
BandListClick(BandList);
end;
except
if OverlayBand <> nil then OverlayBand.Free;
Raise;
end;
end;
procedure TSctPageManager.overlaydelete(bd: TObject);
var
band: TSctOverLayBand;
begin
{ see message on delete group }
ComponentSelect(PageDesigner, page);
band := TSctOverLayBand(bd);
if band.updatelevel <> nil Then
begin
band.updatelevel.parent := nil;
band.updatelevel.free;
end;
band.Parent := nil;
band.SafeDelete;
PageDesigner.Modified;
TSctGroupPage(page).orderbands;
TSctGroupPage(page).arrangebands;
UpdateOutLine;
end;
procedure TSctPageManager.GroupAddClick(Sender: TObject);
var
Group: TSctGroup;
begin
Group := TSctGroup.Create(Page.Owner);
try
SctAutoSetComponentName(Group, 'Group', False);
Group.Parent := TSctGrouppage(Page);
Grouplist.Items.Add(group.Name);
FGroupPosList.Add(group);
Group.AddBands(TSctGrouppage(Page));
Group.Level := Grouplist.Items.Count;
TSctGrouppage(Page).OrderBands;
TSctGrouppage(Page).ArrangeBands;
UpdateOutline;
GroupListClick(self);
PageDesigner.Modified;
except
if Group <> nil then Group.SafeDelete;
Raise;
end;
end;
procedure TSctPageManager.GroupDeleteClick(Sender: TObject);
var
Group: TSctGroup;
Pos: Integer;
begin
if GroupIndex <> -1 Then
begin
{ this is here because if the group is selected in the object
inspector a gpf will occur, not really sure why }
ComponentSelect(PageDesigner, Page);
Pos := GroupIndex;
Group := TSctGroup(FGroupPosList.Items[ Pos ]);
if AceIsAncestor(Group) then ShowMessage('Selection contains a component '
+ 'introduced in an ancestor form which cannot be deleted')
else
begin
{ delete any associated bands }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -