cxcustomtablevieweditor.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,118 行 · 第 1/3 页
PAS
1,118 行
{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressQuantumGrid }
{ }
{ 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 EXPRESSQUANTUMGRID 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 cxCustomTableViewEditor;
{$I cxVer.inc}
interface
uses
{$IFDEF DELPHI6}
Variants,
{$ENDIF}
Windows, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, Menus,
cxClasses, cxCustomData, cxDBData, cxNavigator, cxGridCustomView, cxGridCustomTableView,
cxGridStructureNavigator, cxViewEditor, cxLookAndFeelPainters, cxButtons,
cxPC, cxControls;
type
TcxCustomTableViewEditor = class(TcxViewEditor)
PageControl1: TcxPageControl;
TSItems: TcxTabSheet;
TSSummary: TcxTabSheet;
Panel1: TPanel;
BColumnAdd: TcxButton;
BColumnDelete: TcxButton;
BColumnAddAll: TcxButton;
BColumnRestore: TcxButton;
PMColumns: TPopupMenu;
MIColumnAdd: TMenuItem;
MIColumnDelete: TMenuItem;
MIColumnRestore: TMenuItem;
MIColumnSelectAll: TMenuItem;
PageControl2: TcxPageControl;
TSFooterSummaryItems: TcxTabSheet;
TSDefaultGroupSummaryItems: TcxTabSheet;
TabSheet3: TcxTabSheet;
Panel2: TPanel;
Panel3: TPanel;
BAddFooterSummaryItem: TcxButton;
BDeleteFooterSummaryItem: TcxButton;
LBFooterSummary: TListBox;
Panel4: TPanel;
Label1: TLabel;
Panel5: TPanel;
Panel6: TPanel;
BDefaultGroupSummaryAdd: TcxButton;
BDefaultGroupSummaryDelete: TcxButton;
LBDefaultGroupsSummary: TListBox;
Panel7: TPanel;
Label2: TLabel;
PSummaryGroups: TPanel;
PLinks: TPanel;
PGroupItems: TPanel;
Panel11: TPanel;
BGroupSummaryItemAdd: TcxButton;
BGroupSummaryItemDelete: TcxButton;
LBGroupSummaryItems: TListBox;
Panel12: TPanel;
Label4: TLabel;
PGroups: TPanel;
Panel14: TPanel;
BSummaryGroupAdd: TcxButton;
BSummaryGroupDelete: TcxButton;
LBSummaryGroups: TListBox;
Panel15: TPanel;
Label5: TLabel;
PUnlinkedColumns: TPanel;
LBUnlinkedColumns: TListBox;
Panel19: TPanel;
Label6: TLabel;
PLinkUnlink: TPanel;
PLinkedColumns: TPanel;
LBLinkedColumns: TListBox;
Panel23: TPanel;
Label7: TLabel;
BColumnLink: TcxButton;
BColumnUnlink: TcxButton;
Splitter2: TSplitter;
PGSeparator: TPanel;
N1: TMenuItem;
BColumnMoveUp: TcxButton;
BColumnMoveDown: TcxButton;
N2: TMenuItem;
MIColumnMoveUp: TMenuItem;
MIColumnMoveDown: TMenuItem;
PMFooterSummary: TPopupMenu;
MIFooterSummaryAdd: TMenuItem;
MIFooterSummaryDelete: TMenuItem;
MenuItem4a: TMenuItem;
MIFooterSummarySelectAll: TMenuItem;
PMDefaultGroupsSummary: TPopupMenu;
MIDefaultGroupSummaryAdd: TMenuItem;
MIDefaultGroupSummaryDelete: TMenuItem;
MenuItem3b: TMenuItem;
MIDefaultGroupSummarySelectAll: TMenuItem;
PMSummaryGroups: TPopupMenu;
MISummaryGroupAdd: TMenuItem;
MISummaryGroupDelete: TMenuItem;
MenuItem5d: TMenuItem;
MISummaryGroupSelectAll: TMenuItem;
PMGroupSummaryItems: TPopupMenu;
MIGroupSummaryItemsAdd: TMenuItem;
MIGroupSummaryItemsDelete: TMenuItem;
MenuItem6c: TMenuItem;
MIGroupSummaryItemsSelectAll: TMenuItem;
Panel8: TPanel;
LBColumns: TListBox;
Panel9: TPanel;
Panel10: TPanel;
Panel13: TPanel;
Panel16: TPanel;
Panel17: TPanel;
Panel18: TPanel;
BColumnAddMissing: TcxButton;
procedure LBColumnsClick(Sender: TObject);
procedure BColumnAddClick(Sender: TObject);
procedure BColumnDeleteClick(Sender: TObject);
procedure BColumnRestoreClick(Sender: TObject);
procedure MIColumnSelectAllClick(Sender: TObject);
procedure LBFooterSummaryClick(Sender: TObject);
procedure BAddFooterSummaryItemClick(Sender: TObject);
procedure BDeleteFooterSummaryItemClick(Sender: TObject);
procedure LBDefaultGroupsSummaryClick(Sender: TObject);
procedure BDefaultGroupSummaryAddClick(Sender: TObject);
procedure BDefaultGroupSummaryDeleteClick(Sender: TObject);
procedure LBSummaryGroupsClick(Sender: TObject);
procedure BSummaryGroupAddClick(Sender: TObject);
procedure BSummaryGroupDeleteClick(Sender: TObject);
procedure LBGroupSummaryItemsClick(Sender: TObject);
procedure BGroupSummaryItemAddClick(Sender: TObject);
procedure BGroupSummaryItemDeleteClick(Sender: TObject);
procedure LBUnlinkedColumnsClick(Sender: TObject);
procedure BColumnLinkClick(Sender: TObject);
procedure BColumnUnlinkClick(Sender: TObject);
procedure BColumnAddAllClick(Sender: TObject);
procedure PLinksResize(Sender: TObject);
procedure PSummaryGroupsResize(Sender: TObject);
procedure LBColumnsDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure LBColumnsEndDrag(Sender, Target: TObject; X, Y: Integer);
procedure LBColumnsStartDrag(Sender: TObject;
var DragObject: TDragObject);
procedure LBColumnsDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure BColumnMoveUpClick(Sender: TObject);
procedure BColumnMoveDownClick(Sender: TObject);
procedure MIFooterSummarySelectAllClick(Sender: TObject);
procedure MIDefaultGroupSummarySelectAllClick(Sender: TObject);
procedure MISummaryGroupSelectAllClick(Sender: TObject);
procedure MIGroupSummaryItemsSelectAllClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure LBColumnsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure BColumnAddMissingClick(Sender: TObject);
private
FColumnsPrevDragIndex: Integer;
FSummaryGroup: TcxDataSummaryGroup;
function GetDefaultGroupSummaryItems: TcxDataGroupSummaryItems;
function GetFooterSummaryItems: TcxDataFooterSummaryItems;
function GetSummaryGroups: TcxDataSummaryGroups;
function GetView: TcxCustomGridTableView;
procedure SetSummaryGroup(Value: TcxDataSummaryGroup);
procedure ReindexColumnsProc(AList: TList; ANewIndex: Integer);
procedure UpdateSummaryGroupLinks;
procedure UpdateSummaryGroups;
protected
procedure CalculateListBoxItemHeight(AListBox: TListBox);
procedure CollectionItemsAdd(AListBox: TListBox; ACollection: TCollection);
procedure CollectionItemsDelete(AListBox: TListBox; ACollection: TCollection);
procedure DoCreateViewItems(AMissingItemsOnly: Boolean);
procedure DrawListBoxItem(AListBox: TWinControl; AIndex: Integer; R: TRect);
function GetCurrentGroup: TcxDataSummaryGroup;
function GetDeleteItemsCaption: string; virtual;
procedure SelectAllColumns;
procedure UpdateButtons; virtual;
procedure UpdateColumnList; virtual;
procedure UpdateEditor; override;
procedure UpdateSelection; override;
procedure UpdateSummary;
procedure UpdateSummarySelection;
property SummaryGroup: TcxDataSummaryGroup read FSummaryGroup write SetSummaryGroup;
public
class function GetViewByObject(APersistent: TPersistent): TcxCustomGridView; override;
property DefaultGroupSummaryItems: TcxDataGroupSummaryItems read GetDefaultGroupSummaryItems;
property FooterSummaryItems: TcxDataFooterSummaryItems read GetFooterSummaryItems;
property SummaryGroups: TcxDataSummaryGroups read GetSummaryGroups;
property View: TcxCustomGridTableView read GetView;
end;
{ TcxCustomGridTableViewStorage }
TcxCustomGridTableViewStorage = class(TcxCustomGridViewStorage)
private
function GetNavigatorButtons: TcxNavigatorControlButtons;
protected
function CustomTableView: TcxCustomGridTableView;
public
class function GetViewClass: TcxCustomGridViewClass; override;
published
property NavigatorButtons: TcxNavigatorControlButtons read GetNavigatorButtons;
end;
{ TcxCustomGridViewMenuProvider }
TcxCustomGridTableViewMenuProvider = class(TcxCustomGridViewMenuProvider)
private
function GetGridView: TcxCustomGridTableView;
function GetViewItemNameValue: string;
protected
function CanDeleteItems: Boolean;
procedure CreateAllItems(Sender: TcxGridViewMenuItem);
procedure CreateItem(Sender: TcxGridViewMenuItem);
procedure CreateMissingItems(Sender: TcxGridViewMenuItem);
procedure DeleteAllItems(Sender: TcxGridViewMenuItem);
procedure InitStructureCreationItems; virtual;
procedure InitStructureItems; override;
property ViewItemName: string read GetViewItemNameValue;
public
property GridView: TcxCustomGridTableView read GetGridView;
end;
implementation
uses
cxDesignWindows;
{$R *.dfm}
function CheckInDataController(APersistent: TPersistent): TcxCustomGridView;
var
ADataController: TcxCustomDataController;
AIDataController: IcxCustomGridDataController;
begin
ADataController := nil;
if APersistent is TcxCustomDataSummaryItem then
ADataController := (APersistent as TcxCustomDataSummaryItem).DataController
else
if APersistent is TcxDataSummaryItems then
ADataController := (APersistent as TcxDataSummaryItems).DataController
else
if APersistent is TcxDataSummaryGroups then
ADataController := (APersistent as TcxDataSummaryGroups).Summary.DataController
else
if APersistent is TcxDataSummaryGroup then
ADataController := (APersistent as TcxDataSummaryGroup).SummaryGroups.Summary.DataController
else
if APersistent is TcxDataSummaryGroupItemLinks then
ADataController :=
(APersistent as TcxDataSummaryGroupItemLinks).SummaryGroup.SummaryGroups.Summary.DataController;
if (ADataController <> nil) and Supports(ADataController, IcxCustomGridDataController) then
begin
Supports(TObject(ADataController), IcxCustomGridDataController, AIDataController);
Result := AIDataController.GridView;
end
else
Result := nil;
end;
function GetViewItemName(AView: TcxCustomGridTableView): string;
var
I: Integer;
begin
Result := TcxCustomGridTableViewAccess.GetItemClass(AView).ClassName;
for I := Length(Result) downto 1 do
if Result[I] in ['A'..'Z'] then
begin
Delete(Result, 1, I - 1);
Break;
end;
end;
function CreateViewItem(AView: TcxCustomGridTableView): TcxCustomGridTableItem;
begin
Result := AView.CreateItem;
Result.Name := GetViewItemUniqueName(AView, Result, GetViewItemName(AView));
end;
procedure CreateViewItems(AView: TcxCustomGridView; AMissingItemsOnly: Boolean);
begin
(AView.DataController as IcxCustomGridDataController).CreateAllItems(AMissingItemsOnly);
end;
{ TcxCustomGridTableViewStorage }
function TcxCustomGridTableViewStorage.GetNavigatorButtons: TcxNavigatorControlButtons;
begin
Result := CustomTableView.NavigatorButtons;
end;
function TcxCustomGridTableViewStorage.CustomTableView: TcxCustomGridTableView;
begin
Result := inherited View as TcxCustomGridTableView;
end;
class function TcxCustomGridTableViewStorage.GetViewClass: TcxCustomGridViewClass;
begin
Result := TcxCustomGridTableView;
end;
{ TcxCustomTableViewEditor }
class function TcxCustomTableViewEditor.GetViewByObject(APersistent: TPersistent): TcxCustomGridView;
begin
// Items
if APersistent is TcxCustomGridTableItem then
Result := (APersistent as TcxCustomGridTableItem).GridView
else
// DataController
Result := CheckInDataController(APersistent);
end;
procedure TcxCustomTableViewEditor.CalculateListBoxItemHeight(AListBox: TListBox);
begin
with AListBox do
begin
Canvas.Font := Font;
ItemHeight := 2 + Canvas.TextHeight('Qq');
end;
end;
procedure TcxCustomTableViewEditor.CollectionItemsAdd(AListBox: TListBox;
ACollection: TCollection);
var
AItem: TCollectionItem;
begin
ListBoxClearSelection(AListBox);
AItem := ACollection.Add;
ListBoxLoadCollection(AListBox, ACollection);
ListBoxSelectByObject(AListBox, AItem);
FormEditor.ListBoxApplySelection(AListBox, nil);
UpdateDesigner;
end;
procedure TcxCustomTableViewEditor.CollectionItemsDelete(AListBox: TListBox;
ACollection: TCollection);
begin
if AListBox.SelCount > 0 then
begin
BeginUpdate;
try
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?