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

📄 dxbardbnav.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 2 页
字号:

{*******************************************************************}
{                                                                   }
{       Developer Express Visual Component Library                  }
{       ExpressBars DB Navigator                                    }
{                                                                   }
{       Copyright (c) 1998-2008 Developer Express Inc.              }
{       ALL RIGHTS RESERVED                                         }
{                                                                   }
{   The entire contents of this file is protected by U.S. and       }
{   International Copyright Laws. Unauthorized reproduction,        }
{   reverse-engineering, and distribution of all or any portion of  }
{   the code contained in this file is strictly prohibited and may  }
{   result in severe civil and criminal penalties and will be       }
{   prosecuted to the maximum extent possible under the law.        }
{                                                                   }
{   RESTRICTIONS                                                    }
{                                                                   }
{   THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES           }
{   (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE    }
{   SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS   }
{   LICENSED TO DISTRIBUTE THE EXPRESSBARS AND ALL ACCOMPANYING VCL }
{   CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY.                 }
{                                                                   }
{   THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED      }
{   FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE        }
{   COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE       }
{   AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT  }
{   AND PERMISSION FROM DEVELOPER EXPRESS INC.                      }
{                                                                   }
{   CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON       }
{   ADDITIONAL RESTRICTIONS.                                        }
{                                                                   }
{*******************************************************************}

unit dxBarDBNav;

interface

{$I cxVer.inc}

uses
  Classes, Messages, DB, cxClasses, dxBar;

type
  TdxBarDBNavigator = class;
  TdxBarDBNavButton = class;

  TdxBarDBNavDataLink = class(TDataLink)
  private
    FNavigator: TdxBarDBNavigator;
  protected
    procedure ActiveChanged; override;
    procedure DataSetChanged; override;
    procedure EditingChanged; override;
  end;

  TdxBarDBEnableType = (dxdbtCanModify, dxdbtNotEOF, dxdbtNotBOF,
    dxdbtHasRecords, dxdbtIsModified, dxdbtIsNotModified);
  TdxBarDBEnableTypes = set of TdxBarDBEnableType;

  TdxBarDBCheckLink = class(TCollectionItem)
  private
    FEnableTypes: TdxBarDBEnableTypes;
    FFreeNotificator: TcxFreeNotificator;
    FItem: TdxBarItem;
    procedure FreeNotification(Sender: TComponent);
    function GetDBNavigator: TdxBarDBNavigator;
    procedure SetEnableTypes(Value: TdxBarDBEnableTypes);
    procedure SetItem(Value: TdxBarItem);
  public
    constructor Create(Collection: TCollection); override;
    destructor Destroy; override;
    procedure Assign(Value: TPersistent); override;
    property DBNavigator: TdxBarDBNavigator read GetDBNavigator;
  published
    property Item: TdxBarItem read FItem write SetItem;
    property EnableTypes: TdxBarDBEnableTypes read FEnableTypes write SetEnableTypes;
  end;

  TdxBarDBCheckLinks = class(TCollection)
  private
    FDBNavigator: TdxBarDBNavigator;
    function GetItem(Index: Integer): TdxBarDBCheckLink;
  protected
    function GetOwner: TPersistent; override;
  public
    function Add: TdxBarDBCheckLink;
    property Items[Index: Integer]: TdxBarDBCheckLink read GetItem; default;
  end;

  TdxBarDBNavButtonType = (dxbnFirst, dxbnPrior, dxbnNext, dxbnLast,
    dxbnInsert, dxbnDelete, dxbnEdit, dxbnPost, dxbnCancel, dxbnRefresh);
  TdxBarDBNavButtonTypes = set of TdxBarDBNavButtonType;

  TdxBarDBNavButton = class(TdxBarButton)
  private
    FBarDBNavigator: TdxBarDBNavigator;
    FNavButton: TdxBarDBNavButtonType;
    procedure SetNavButton(Value: TdxBarDBNavButtonType);
  protected
    procedure Loaded; override;
  public
    destructor Destroy; override;
    procedure DoClick; override;
  published
    property BarDBNavigator: TdxBarDBNavigator read FBarDBNavigator write FBarDBNavigator;
    property NavButton: TdxBarDBNavButtonType read FNavButton write SetNavButton;
  end;

  TdxBarDBNavigator = class(TComponent)
  private
    FBarManager: TdxBarManager;
    FCategoryName: string;
    FConfirmDelete: Boolean;
    FDataLink: TdxBarDBNavDataLink;
    FDBCheckLinks: TdxBarDBCheckLinks;
    FSetVisFlag: Boolean;
    FVisibleButtons: TdxBarDBNavButtonTypes;

    function GetDataSource: TDataSource;
    procedure SetBarManager(Value: TdxBarManager);
    procedure SetCategoryName(Value: string);
    procedure SetDataSource(Value: TDataSource);
    procedure SetDBNavItems(Value: TdxBarDBCheckLinks);
    procedure SetVisibleButtons(Value: TdxBarDBNavButtonTypes);

    procedure AddButton(AButton: TdxBarDBNavButton);
    procedure RemoveButton(AButton: TdxBarDBNavButton);
    procedure CheckItemsEnable;
  protected
    Buttons: array[TdxBarDBNavButtonType] of TdxBarDBNavButton;
    procedure ActiveChanged;
    procedure DataChanged;
    procedure EditingChanged;
    procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property BarManager: TdxBarManager read FBarManager write SetBarManager;
    property CategoryName: string read FCategoryName write SetCategoryName;
    property ConfirmDelete: Boolean read FConfirmDelete write FConfirmDelete;
    property DataSource: TDataSource read GetDataSource write SetDataSource;
    property DBCheckLinks: TdxBarDBCheckLinks read FDBCheckLinks write SetDBNavItems;
    property VisibleButtons: TdxBarDBNavButtonTypes read FVisibleButtons
      write SetVisibleButtons default [];
  end;

implementation

{$R dxBarDBNav.res}

uses
  Windows, SysUtils, Forms, dxBarDBNavStrs;

const
  BtnResStr = 'DXBARDBNAVBTN_';
  dxBarDBNavBtnName = 'dxBarDBNav';

{ TdxBarDBNavDataLink }

procedure TdxBarDBNavDataLink.ActiveChanged;
begin
  if FNavigator <> nil then FNavigator.ActiveChanged;
end;

procedure TdxBarDBNavDataLink.DataSetChanged;
begin
  if FNavigator <> nil then FNavigator.DataChanged;
end;

procedure TdxBarDBNavDataLink.EditingChanged;
begin
  if FNavigator <> nil then FNavigator.EditingChanged;
end;

{ TdxBarDBCheckLink }

procedure TdxBarDBCheckLink.FreeNotification(Sender: TComponent);
begin
  Free;
end;

function TdxBarDBCheckLink.GetDBNavigator: TdxBarDBNavigator;
begin
  Result := TdxBarDBCheckLinks(Collection).FDBNavigator;
end;

procedure TdxBarDBCheckLink.SetEnableTypes(Value: TdxBarDBEnableTypes);
begin
  if FEnableTypes <> Value then
  begin
    FEnableTypes := Value;
    TdxBarDBCheckLinks(Collection).FDBNavigator.DataChanged;
  end;
end;

procedure TdxBarDBCheckLink.SetItem(Value: TdxBarItem);
begin
  if Value <> FItem then
  begin
    if FItem <> nil then
      FFreeNotificator.RemoveSender(FItem);
    FItem := Value;
    if FItem <> nil then
      FFreeNotificator.AddSender(FItem);
  end;
end;

constructor TdxBarDBCheckLink.Create(Collection: TCollection);
begin
  inherited Create(Collection);
  FFreeNotificator := TcxFreeNotificator.Create(nil);
  FFreeNotificator.OnFreeNotification := FreeNotification;
end;

destructor TdxBarDBCheckLink.Destroy;
begin
  Item := nil;
  FreeAndNil(FFreeNotificator);
  inherited Destroy;
end;

procedure TdxBarDBCheckLink.Assign(Value: TPersistent);
var
  ADBNavItem: TdxBarDBCheckLink;
begin
  if Value is TdxBarDBCheckLink then
  begin
    ADBNavItem := TdxBarDBCheckLink(Value);
    if (ADBNavItem.Item <> nil) and (DBNavigator <> nil) and
      (csUpdating in DBNavigator.ComponentState) and (DBNavigator.BarManager <> nil) then
        Item := DBNavigator.BarManager.GetItemByName(ADBNavItem.Item.Name)
      else
        Item := ADBNavItem.Item;
    FEnableTypes := ADBNavItem.FEnableTypes;
  end
  else
    inherited Assign(Value);
end;

{ TdxBarDBCheckLinks }

function TdxBarDBCheckLinks.GetItem(Index: Integer): TdxBarDBCheckLink;
begin
  if (Index > -1) and (Index < Count) then
    Result := TdxBarDBCheckLink(inherited Items[Index])
  else Result := nil;
end;

function TdxBarDBCheckLinks.GetOwner: TPersistent;
begin
  Result := FDBNavigator;
end;

function TdxBarDBCheckLinks.Add: TdxBarDBCheckLink;
begin
  Result := TdxBarDBCheckLink(inherited Add);
end;

{ dxBarDBNavButton }

destructor TdxBarDBNavButton.Destroy;
begin
  if BarDBNavigator <> nil then
    BarDBNavigator.RemoveButton(Self);
  inherited Destroy;
end;

procedure TdxBarDBNavButton.SetNavButton(Value: TdxBarDBNavButtonType);
const
  dxBarNames: array[TdxBarDBNavButtonType] of string =
    ('First', 'Prev', 'Next', 'Last',
     'Insert', 'Delete', 'Edit', 'Post', 'Cancel', 'Refresh');
  PResStrs: array[TdxBarDBNavButtonType] of Pointer = (@dxSBAR_BTNCAPTION_FIRST,
    @dxSBAR_BTNCAPTION_PRIOR, @dxSBAR_BTNCAPTION_NEXT, @dxSBAR_BTNCAPTION_LAST,
    @dxSBAR_BTNCAPTION_INSERT, @dxSBAR_BTNCAPTION_DELETE, @dxSBAR_BTNCAPTION_EDIT,
    @dxSBAR_BTNCAPTION_POST, @dxSBAR_BTNCAPTION_CANCEL, @dxSBAR_BTNCAPTION_REFRESH);
begin
  if (FNavButton <> Value) or (Name = '') then
    if csLoading in ComponentState then
      FNavButton := Value
    else
    begin
      if (BarDBNavigator <> nil) and not BarDBNavigator.FSetVisFlag and
        (BarDBNavigator.Buttons[Value] <> nil) then
        raise Exception.Create(cxGetResourceString(@dxSBAR_DBNAVERROR1));
      if (BarDBNavigator <> nil) and not BarDBNavigator.FSetVisFlag then
        BarDBNavigator.RemoveButton(Self);
      FNavButton := Value;
      if BarDBNavigator <> nil then
      begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -