| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 | unit ColVisibleManager;interfaceuses  Classes, sdGridDBA, ZhAPI;type  TColVisible = class  private    FCustom: Boolean;    // Defualt CaptionAcrossCols    FDefaultCAC: Integer;    FDBACol: TsdGridColumn;  public    constructor Create(ACol: TsdGridColumn); virtual;    procedure RefreshVisible; virtual;    property DBACol: TsdGridColumn read FDBACol;    property DefaultCAC: Integer read FDefaultCAC;    property Custom: Boolean read FCustom write FCustom;  end;  TBM_ColVisible = class(TColVisible)  private    FPriceChange: Boolean;    FBGLCode: Boolean;    FAlias: Boolean;    FDesign: Boolean;  public    constructor Create(ACol: TsdGridColumn); override;    procedure RefreshVisible; override;    property PriceChange: Boolean read FPriceChange write FPriceChange;    property BGLCode: Boolean read FBGLCode write FBGLCode;    property Design: Boolean read FDesign write FDesign;    property Alias: Boolean read FAlias write FAlias;  end;  TColVisibleManager = class  private    FColVisibles: TList;  protected    function CreateColVisible(ACol: TsdGridColumn): TColVisible; virtual;  public    constructor Create(ACols: TsdGridColumnList);    destructor Destroy; override;    procedure RefreshVisible;    procedure ShowGridCol(AShow: Boolean; ABeginCol, AEndCol: Integer);  end;  TBM_ColVisibleManager = class(TColVisibleManager)  protected    function CreateColVisible(ACol: TsdGridColumn): TColVisible; override;  public    procedure ShowPriceChange(AShow: Boolean);    procedure ShowBGLCode(AShow: Boolean);    procedure ShowDesign(AShow: Boolean);    procedure ShowAlias(AShow: Boolean);  end;implementationuses SysUtils;{ TColVisible }constructor TColVisible.Create(ACol: TsdGridColumn);begin  FDBACol := ACol;  FDefaultCAC := StrToIntDef(FDBACol.Title.CaptionAcrossCols, 1);  FCustom := FDBACol.Visible;end;procedure TColVisible.RefreshVisible;begin  FDBACol.Visible := FCustom;end;{ TBM_ColVisible }constructor TBM_ColVisible.Create(ACol: TsdGridColumn);begin  inherited;  FPriceChange := True;  FBGLCode := True;  FDesign := True;  FAlias := True;end;procedure TBM_ColVisible.RefreshVisible;begin  FDBACol.Visible := FCustom and FPriceChange and FBGLCode and FDesign and FAlias;end;{ TColVisibleManager }constructor TColVisibleManager.Create(ACols: TsdGridColumnList);var  iCol: Integer;  ColVisible: TColVisible;begin  FColVisibles := TList.Create;  for iCol := 0 to ACols.Count - 1 do  begin    ColVisible := CreateColVisible(ACols.Items[iCol]);    FColVisibles.Add(ColVisible);  end;end;function TColVisibleManager.CreateColVisible(  ACol: TsdGridColumn): TColVisible;begin  Result := TColVisible.Create(ACol);end;destructor TColVisibleManager.Destroy;begin  ClearObjects(FColVisibles);  FColVisibles.Free;  inherited;end;procedure TColVisibleManager.RefreshVisible;var  iCol: Integer;begin  for iCol := 0 to FColVisibles.Count - 1 do    TColVisible(FColVisibles.Items[iCol]).RefreshVisible;end;procedure TColVisibleManager.ShowGridCol(AShow: Boolean; ABeginCol,  AEndCol: Integer);var  iCol, iRelaCol: Integer;  vCol, vRelaCol: TColVisible;begin  for iCol := ABeginCol to AEndCol do  begin    vCol := TColVisible(FColVisibles.Items[iCol]);    if Pos('|', vCol.DBACol.Title.Caption) <> 1 then    begin      vCol.Custom := AShow;      if vCol.DefaultCAC > 1 then      begin        for iRelaCol := 1 to vCol.DefaultCAC - 1 do        begin          vRelaCol := TColVisible(FColVisibles.Items[iCol+iRelaCol]);          vRelaCol.Custom := AShow;        end;      end;    end;  end;  RefreshVisible;end;{ TBM_ColVisibleManager }function TBM_ColVisibleManager.CreateColVisible(  ACol: TsdGridColumn): TColVisible;begin  Result := TBM_ColVisible.Create(ACol);end;procedure TBM_ColVisibleManager.ShowAlias(AShow: Boolean);var  iCol: Integer;  vCol: TBM_ColVisible;begin  for iCol := 0 to FColVisibles.Count - 1 do  begin    vCol := TBM_ColVisible(FColVisibles.Items[iCol]);    if SameText('Alias', vCol.DBACol.FieldName) then      vCol.FAlias := AShow;  end;  RefreshVisible;end;procedure TBM_ColVisibleManager.ShowBGLCode(AShow: Boolean);var  iCol: Integer;  vCol: TBM_ColVisible;begin  for iCol := 0 to FColVisibles.Count - 1 do  begin    vCol := TBM_ColVisible(FColVisibles.Items[iCol]);    if SameText('CurQcQuantity', vCol.DBACol.FieldName) or        SameText('CurPcQuantity', vCol.DBACol.FieldName) then    begin      if AShow then        vCol.DBACol.Title.CaptionAcrossCols := '3'      else        vCol.DBACol.Title.CaptionAcrossCols := '2';    end    else if Pos('BGLCode', vCol.DBACol.FieldName) > 1 then      vCol.FBGLCode := AShow;  end;  RefreshVisible;end;procedure TBM_ColVisibleManager.ShowDesign(AShow: Boolean);var  iCol: Integer;  vCol: TBM_ColVisible;begin  for iCol := 0 to FColVisibles.Count - 1 do  begin    vCol := TBM_ColVisible(FColVisibles.Items[iCol]);    if Pos('Dgn', vCol.DBACol.FieldName) > 1 then      vCol.FDesign := AShow;  end;  RefreshVisible;end;procedure TBM_ColVisibleManager.ShowPriceChange(AShow: Boolean);var  iCol: Integer;  vCol: TBM_ColVisible;begin  for iCol := 0 to FColVisibles.Count - 1 do  begin    vCol := TBM_ColVisible(FColVisibles.Items[iCol]);    if SameText(vCol.DBACol.FieldName, 'NewPrice') or        (Pos('CurPc', vCol.DBACol.FieldName) = 1) or        (Pos('EndPc', vCol.DBACol.FieldName) = 1) or        (Pos('AddPc', vCol.DBACol.FieldName) = 1) then      vCol.PriceChange := AShow;  end;  RefreshVisible;end;end.
 |