⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pageman.pas

📁 suite component ace report
💻 PAS
📖 第 1 页 / 共 4 页
字号:
          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 + -