cxvieweditor.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 966 行 · 第 1/2 页
PAS
966 行
procedure TcxViewEditor.SetView(Value: TcxCustomGridView; ARefreshNeeded: Boolean);
begin
FView := Value;
if ARefreshNeeded then
UpdateEditor;
UpdateSelection;
end;
procedure TcxViewEditor.BeginUpdate;
begin
FormEditor.BeginUpdate;
end;
function TcxViewEditor.CanAddComponent: Boolean;
begin
Result := FormEditor.CanAddComponent;
end;
function TcxViewEditor.CanDeleteComponent(AComponent: TComponent): Boolean;
begin
Result := FormEditor.CanDeleteComponent(AComponent);
end;
procedure TcxViewEditor.EndUpdate;
begin
FormEditor.EndUpdate;
end;
procedure TcxViewEditor.GetSelectionList(AList: TList);
begin
FormEditor.GetSelectionList(AList);
end;
procedure TcxViewEditor.SelectComponent(AComponent: TPersistent);
begin
FormEditor.SelectComponent(AComponent);
end;
function TcxViewEditor.UniqueName(AComponent: TComponent;
const ATruncateClassName: string = ScxGridPrefixName): string;
begin
Result := CreateUniqueName(OwnerForm, View, AComponent, ATruncateClassName, '');
end;
procedure TcxViewEditor.UpdateDesigner;
begin
FormEditor.Designer.Modified;
end;
procedure TcxViewEditor.UpdateEditor;
begin
end;
procedure TcxViewEditor.UpdateSelection;
begin
end;
function TcxViewEditor.GetDataController: TcxCustomDataController;
begin
Result := FView.DataController;
end;
function TcxViewEditor.GetOwnerForm: TComponent;
begin
Result := FormEditor.Component.Owner;
end;
procedure TcxViewEditor.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#13, #33..#126:
begin
if Key = #13 then Key := #0;
TcxDesignWindowAccess(FormEditor).ActivateInspector(Key);
Key := #0;
end;
end;
end;
{ TcxGridViewMenuItems }
constructor TcxGridViewMenuItems.Create;
begin
inherited;
FItems := TList.Create;
end;
destructor TcxGridViewMenuItems.Destroy;
begin
ClearItems;
FItems.Free;
inherited;
end;
function TcxGridViewMenuItems.GetCount: Integer;
begin
Result := FItems.Count;
end;
function TcxGridViewMenuItems.GetItem(Index: Integer): TcxGridViewMenuItem;
begin
Result := TcxGridViewMenuItem(FItems[Index]);
end;
procedure TcxGridViewMenuItems.ClearItems;
var
I: Integer;
begin
for I := Count - 1 downto 0 do
Delete(I);
end;
function TcxGridViewMenuItems.AddItem(const ACaption: string;
AOnClick: TcxGridViewMenuItemActionEvent = nil; AEnabled: Boolean = True;
AChecked: Boolean = False; AData: TObject = nil): TcxGridViewMenuItem;
begin
Result := TcxGridViewMenuItem.Create(ACaption, AEnabled, AChecked, AData, AOnClick);
FItems.Add(Result);
end;
function TcxGridViewMenuItems.AddSeparator: TcxGridViewMenuItem;
begin
Result := AddItem(cxGridViewMenuSeparatorCaption);
end;
procedure TcxGridViewMenuItems.Delete(AIndex: Integer);
begin
Items[AIndex].Free;
FItems.Delete(AIndex);
end;
procedure TcxGridViewMenuItems.Prepare(AMenuItem: TMenuItem);
var
I: Integer;
AChildMenuItem: TMenuItem;
begin
for I := 0 to Count - 1 do
begin
AChildMenuItem := CreateMenuItem(AMenuItem.Owner, '');
Items[I].Prepare(AChildMenuItem);
AMenuItem.Add(AChildMenuItem);
end;
end;
{$IFDEF DELPHI6}
procedure TcxGridViewMenuItems.Prepare(const AMenuItem: TDesignMenuItem);
var
I: Integer;
AChildMenuItem: TDesignMenuItem;
begin
for I := 0 to Count - 1 do
begin
AChildMenuItem := AMenuItem.AddItem('', 0, False, True, Items[I].MenuItemClick);
Items[I].Prepare(AChildMenuItem);
end;
end;
{$ENDIF}
procedure TcxGridViewMenuItems.RemoveExcessSeparators;
var
APrevItemIsSeparator: Boolean;
I: Integer;
begin
APrevItemIsSeparator := True;
for I := Count - 1 downto 0 do
if Items[I].IsSeparator then
if APrevItemIsSeparator then
Delete(I)
else
APrevItemIsSeparator := True
else
begin
APrevItemIsSeparator := False;
Items[I].RemoveExcessSeparators;
end;
end;
{ TcxGridViewMenuItem }
constructor TcxGridViewMenuItem.Create(const ACaption: string;
AEnabled, AChecked: Boolean; AData: TObject; AOnAction: TcxGridViewMenuItemActionEvent);
begin
inherited Create;
Caption := ACaption;
Enabled := AEnabled;
Checked := AChecked;
Data := AData;
OnAction := AOnAction;
end;
procedure TcxGridViewMenuItem.MenuItemClick(Sender: TObject);
begin
DoAction;
end;
procedure TcxGridViewMenuItem.DoAction;
begin
if Assigned(OnAction) then OnAction(Self);
end;
function TcxGridViewMenuItem.IsSeparator: Boolean;
begin
Result := Caption = cxGridViewMenuSeparatorCaption;
end;
procedure TcxGridViewMenuItem.Prepare(AMenuItem: TMenuItem);
begin
AMenuItem.Caption := Caption;
AMenuItem.Enabled := Enabled;
AMenuItem.Checked := Checked;
if not Assigned(AMenuItem.OnClick) then
AMenuItem.OnClick := MenuItemClick;
inherited;
end;
{$IFDEF DELPHI6}
procedure TcxGridViewMenuItem.Prepare(const AMenuItem: TDesignMenuItem);
begin
AMenuItem.Caption := Caption;
AMenuItem.Enabled := Enabled;
AMenuItem.Checked := Checked;
inherited;
end;
{$ENDIF}
{ TcxCustomGridViewMenuProvider }
constructor TcxCustomGridViewMenuProvider.Create(AGridView: TcxCustomGridView);
begin
inherited Create;
FGridView := AGridView;
FDesigner := GetObjectDesigner(GridView);
FDesignHelper := TcxDesignHelper.Create(GridView.Control);
FItems := TcxGridViewMenuItems.Create;
InitItems;
Items.RemoveExcessSeparators;
end;
destructor TcxCustomGridViewMenuProvider.Destroy;
begin
FItems.Free;
FDesignHelper.Free;
inherited;
end;
{$IFNDEF NONDB}
procedure TcxCustomGridViewMenuProvider.GetDataSourceName(const S: string);
begin
FDataSourceNames.Add(S);
end;
function TcxCustomGridViewMenuProvider.GetDBGridView: TcxCustomGridView;
begin
Result := GridView;
if not (Result.DataController is TcxDBDataController) then
Result := nil;
end;
function TcxCustomGridViewMenuProvider.GetViewDataSource: TDataSource;
begin
Result := TcxDBDataController(DBGridView.DataController).DataSource;
end;
procedure TcxCustomGridViewMenuProvider.SetViewDataSource(Value: TDataSource);
begin
TcxDBDataController(DBGridView.DataController).DataSource := Value;
end;
{$ENDIF}
procedure TcxCustomGridViewMenuProvider.DesignerModified;
begin
Designer.Modified;
end;
procedure TcxCustomGridViewMenuProvider.ObjectCreated(AObject: TPersistent);
begin
SelectObject(AObject);
DesignerModified;
end;
procedure TcxCustomGridViewMenuProvider.SelectObject(AObject: TPersistent);
begin
DesignHelper.SelectObject(AObject, True, False);
end;
procedure TcxCustomGridViewMenuProvider.InitAdditionalItems;
begin
Items.AddItem('Edit Layout and Data...', EditLayoutAndData);
InitCopySettingsFromViewItem;
Items.AddItem('Set As Default', SetAsDefault);
end;
procedure TcxCustomGridViewMenuProvider.InitCopySettingsFromViewItem;
var
AViewList: TcxGridViewList;
AItem: TcxGridViewMenuItem;
I: Integer;
begin
AViewList := TcxGridViewList.Create(Designer);
try
if AViewList.ViewNames.Count = 1 then Exit;
AItem := Items.AddItem('Copy Settings from View');
for I := 0 to AViewList.ViewNames.Count - 1 do
if AViewList.Views[I] <> GridView then
AItem.AddItem(AViewList.ViewNames[I], CopySettings, True, False, AViewList.Views[I]);
finally
AViewList.Free;
end;
end;
{$IFNDEF NONDB}
procedure TcxCustomGridViewMenuProvider.InitDataBindingItems;
var
I: Integer;
AItem: TcxGridViewMenuItem;
ADataSourceNames: TStringList;
function IsDataSourceLinked(AIndex: Integer): Boolean;
begin
Result := Designer.GetComponent(ADataSourceNames[AIndex]) = ViewDataSource;
end;
begin
ADataSourceNames := GetDataSourceNames;
try
if ADataSourceNames.Count = 0 then Exit;
if ADataSourceNames.Count = 1 then
Items.AddItem('Link to ' + ADataSourceNames[0], LinkToDataSource, True,
IsDataSourceLinked(0), TObject(0))
else
begin
AItem := Items.AddItem('Link to DataSource', nil, True, False);
for I := 0 to ADataSourceNames.Count - 1 do
AItem.AddItem(ADataSourceNames[I], LinkToDataSource, True,
IsDataSourceLinked(I), TObject(I));
end;
finally
ADataSourceNames.Free;
end;
end;
{$ENDIF}
procedure TcxCustomGridViewMenuProvider.InitItems;
begin
{$IFNDEF NONDB}
if DBGridView <> nil then
begin
InitDataBindingItems;
Items.AddSeparator;
end;
{$ENDIF}
InitStructureItems;
Items.AddSeparator;
InitLayoutItems;
Items.AddSeparator;
InitAdditionalItems;
end;
procedure TcxCustomGridViewMenuProvider.InitLayoutItems;
begin
end;
procedure TcxCustomGridViewMenuProvider.InitStructureItems;
begin
Items.AddItem('Delete View', DeleteView, CanDeleteComponent(GridView.Owner, GridView));
end;
procedure TcxCustomGridViewMenuProvider.CopySettings(Sender: TcxGridViewMenuItem);
begin
GridView.AssignSettings(Sender.Data as TcxCustomGridView);
DesignerModified;
end;
procedure TcxCustomGridViewMenuProvider.DeleteView(Sender: TcxGridViewMenuItem);
begin
SelectObject(GridView.Level);
GridView.Free;
DesignerModified;
end;
procedure TcxCustomGridViewMenuProvider.EditLayoutAndData(Sender: TcxGridViewMenuItem);
begin
if ShowGridViewEditor(GridView) then
DesignerModified;
end;
procedure TcxCustomGridViewMenuProvider.SetAsDefault(Sender: TcxGridViewMenuItem);
begin
SaveViewToTemplate(GetViewTemplateRegKey, GridView);
end;
{$IFNDEF NONDB}
function TcxCustomGridViewMenuProvider.GetDataSourceNames: TStringList;
begin
Result := TStringList.Create;
FDataSourceNames := Result;
Designer.GetComponentNames(GetTypeData(TypeInfo(TDataSource)), GetDataSourceName);
FDataSourceNames := nil;
Result.Sort;
end;
procedure TcxCustomGridViewMenuProvider.LinkToDataSource(Sender: TcxGridViewMenuItem);
var
ADataSourceNames: TStringList;
ADataSource: TDataSource;
begin
ADataSourceNames := GetDataSourceNames;
try
ADataSource := TDataSource(Designer.GetComponent(ADataSourceNames[Integer(Sender.Data)]));
(DBGridView.DataController as IcxCustomGridDataController).DeleteAllItems;
ViewDataSource := ADataSource;
(DBGridView.DataController as IcxCustomGridDataController).CreateAllItems(False);
DesignerModified;
finally
ADataSourceNames.Free;
end;
end;
{$ENDIF}
{ TcxGridViewList }
constructor TcxGridViewList.Create(ADesigner: IDesigner);
begin
inherited Create;
FDesigner := ADesigner;
FViewNames := TStringList.Create;
GetViewNames;
FViewNames.Sorted := True;
end;
destructor TcxGridViewList.Destroy;
begin
FViewNames.Free;
inherited;
end;
function TcxGridViewList.GetView(Index: Integer): TcxCustomGridView;
begin
if (0 <= Index) and (Index < ViewNames.Count) then
Result := Designer.GetComponent(ViewNames[Index]) as TcxCustomGridView
else
Result := nil;
end;
procedure TcxGridViewList.AddViewName(const S: string);
begin
FViewNames.Add(S);
end;
procedure TcxGridViewList.GetViewNames;
begin
ViewNames.Clear;
Designer.GetComponentNames(GetTypeData(PTypeInfo(TcxCustomGridView.ClassInfo)), AddViewName);
end;
function TcxGridViewList.GetViewIndex(AView: TcxCustomGridView): Integer;
begin
Result := ViewNames.IndexOf(Designer.GetComponentName(AView));
end;
initialization
ViewEditorClassList := TcxRegisteredClassList.Create;
ViewMenuProviderClassList := TcxRegisteredClassList.Create;
RegisterViewMenuProviderClass(TcxCustomGridView, TcxCustomGridViewMenuProvider);
finalization
UnregisterViewMenuProviderClass(TcxCustomGridView, TcxCustomGridViewMenuProvider);
FreeAndNil(ViewMenuProviderClassList);
FreeAndNil(ViewEditorClassList);
FreeAndNil(DefaultViewStorages);
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?