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

📄 absecedit.pas

📁 1. It is located in the root directory - SecurityBuilderDemo.exe. Leave password box blank and click
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit abSecEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
{$IFDEF DELPHI5}
  dsgnintf,
{$ENDIF}
{$IFDEF CPPB5}
  dsgnintf,
{$ENDIF}
{$IFDEF DELPHI6}
  DesignIntf, DesignEditors,
{$ENDIF}
  ComCtrls, StdCtrls, ImgList, ExtCtrls, ToolWin, abSecurity, Buttons, Menus,
  ActnList, Mask;

type
  TevSecurityTemplateEditor = class(TForm)
    btnOK: TButton;
    btnCancel: TButton;
    ilActions: TImageList;
    img1: TImage;
    img2: TImage;
    ToolBar1: TToolBar;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    pnlParent: TPanel;
    ActionList2: TActionList;
    actNewHierarchicalNode: TAction;
    actDeleteNode: TAction;
    pmnuNode: TPopupMenu;
    mnuNewNode: TMenuItem;
    mnuDeleteNode: TMenuItem;
    actNewCheckableNode: TAction;
    actChangeId: TAction;
    mnuNewCheckableNode: TMenuItem;
    pnlId: TPanel;
    edtSecurityId: TMaskEdit;
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure tvDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure tvDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure tvStartDrag(Sender: TObject; var DragObject: TDragObject);
    procedure tvEndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure actNewHierarchicalNodeUpdate(Sender: TObject);
    procedure actNewHierarchicalNodeExecute(Sender: TObject);
    procedure actDeleteNodeExecute(Sender: TObject);
    procedure ftvSecurityTemplateEditing(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean);
    procedure ftvSecurityTemplateEdited(Sender: TObject; Node: TTreeNode; var S: String);
    procedure ftvSecurityTemplateChange(Sender: TObject; Node: TTreeNode);
    procedure actNewCheckableNodeExecute(Sender: TObject);
    procedure edtSecurityIdKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

    procedure ftvSecurityTemplateKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure ftvSecurityTemplateChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
    procedure btnOKClick(Sender: TObject);
  private
    fDraggedNode: TTreeNode;
    ftvSecurityTemplate: TabSecurityTemplate;
    fSecurityObject: TabSecurity;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

  TevSecurityTemplateProperty = class(TPropertyEditor)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
  end;

  TevSecurityTemplateEdit = class(TComponentEditor)
  public
    procedure Edit; override;
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
  end;

  procedure Register;

implementation

{$R *.DFM}

uses abActnLst;

procedure Register;
begin
  RegisterPropertyEditor(TypeInfo(TabSecurityTemplate), TabSecurity, 'SecurityTemplate', TevSecurityTemplateProperty);
  RegisterComponentEditor(TabSecurity, TevSecurityTemplateEdit);
end;

function SecurityDesign(SecObject: TabSecurity): boolean;
begin
  with TevSecurityTemplateEditor.Create(Application) do
  try
    fSecurityObject := SecObject;
    ftvSecurityTemplate.ClearTemplate;
    CopyEntireUserTemplate(fSecurityObject.SecurityTemplate, ftvSecurityTemplate);
    if soShowIcons in fSecurityObject.Options then
      ftvSecurityTemplate.Images.Assign(fSecurityObject.Images)
    else
      ftvSecurityTemplate.Images := nil;

    if ftvSecurityTemplate.Items.Count > 0 then
      ftvSecurityTemplate.Items[0].Expand(true);
    if mrOK = ShowModal then
    begin
      fSecurityObject.Tag := Succ(fSecurityObject.tag);
      fSecurityObject.SecurityTemplate.ClearTemplate;
      CopyEntireUserTemplate(ftvSecurityTemplate, fSecurityObject.SecurityTemplate);
      fSecurityObject.Images.Assign(ftvSecurityTemplate.Images);
      ftvSecurityTemplate.DeleteKey(fSecurityObject.UserTemplateRegistryKeyName);
      Result := true;
    end
    else
      Result := false;
  finally
    Destroy;
  end;
end;
(*
procedure SecurityDesign(SecObject: TabSecurity);
begin
  with TevSecurityTemplateEditor.Create(Application) do
  try
    fSecurityObject := SecObject;
    ftvSecurityTemplate.ClearTemplate;
    CopyEntireUserTemplate(fSecurityObject.SecurityTemplate, ftvSecurityTemplate);
    if soShowIcons in fSecurityObject.Options then
      ftvSecurityTemplate.Images.Assign(fSecurityObject.Images)
    else
      ftvSecurityTemplate.Images := nil;

    if ftvSecurityTemplate.Items.Count > 0 then
      ftvSecurityTemplate.Items[0].Expand(true);
    if mrOK = ShowModal then
    begin
      fSecurityObject.Tag := Succ(fSecurityObject.tag);
      fSecurityObject.SecurityTemplate.ClearTemplate;
      CopyEntireUserTemplate(ftvSecurityTemplate, fSecurityObject.SecurityTemplate);
      fSecurityObject.Images.Assign(ftvSecurityTemplate.Images);
      ftvSecurityTemplate.DeleteKey(fSecurityObject.UserTemplateRegistryKeyName);//v1.4
      //fSecurityObject.Tag := Pred(fSecurityObject.tag);
      //TControl(fSecurityObject).Update;
      //SendMessage(TWinControl(fSecurityObject.GetParentComponent).Handle, CM_CHANGED, 0, 0);//TControl(fSecurityObject.SecurityTemplate).Changed;
    end;
  finally
    Destroy;
  end;
end;
*)

procedure TevSecurityTemplateProperty.Edit;
begin
  if SecurityDesign(TabSecurity(GetComponent(0))) then
    Modified;
end;

function TevSecurityTemplateProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog];
end;


//TevSecurityTemplateEdit class
procedure TevSecurityTemplateEdit.Edit;
begin
  ExecuteVerb(0);
end;


procedure TevSecurityTemplateEdit.ExecuteVerb(Index: Integer);
begin
  if Index = 0 then
    if SecurityDesign(TabSecurity(Component)) then
      GetDesigner.Modified;
end;

function TevSecurityTemplateEdit.GetVerb(Index: Integer): string;
begin
  Result := 'Security Template Editor';
end;

function TevSecurityTemplateEdit.GetVerbCount: Integer;
begin
  Result := 1;
end;

procedure TevSecurityTemplateEditor.ToolButton1Click(Sender: TObject);
begin
  if (ftvSecurityTemplate.Items.Count <= 2) or
      (mrOK = MessageDlg('By rebuilding Security Template from clients you will lose all your changes.', mtWarning, [mbOK, mbCancel], 0)) then
  begin
    fSecurityObject.DoBuildSecurityTemplateFromClients(ftvSecurityTemplate, ilActions);
    if ftvSecurityTemplate.Items.Count > 0 then
      ftvSecurityTemplate.Items[0].Expand(true);
  end;
end;

procedure TevSecurityTemplateEditor.ToolButton2Click(Sender: TObject);
begin
  if (ftvSecurityTemplate.Items.Count <= 2) or
      (mrOK = MessageDlg('Do you really want to clear the Security Template?', mtConfirmation, [mbOK, mbCancel], 0)) then
  begin
    ftvSecurityTemplate.ClearTemplate;//Leaks was Items.Clear;
    ilActions.Clear;
    edtSecurityId.Visible := false;
  end;
end;


constructor TevSecurityTemplateEditor.Create(AOwner: TComponent);
begin
  inherited ;
  ftvSecurityTemplate := TabSecurityTemplate.Create(self);
  ftvSecurityTemplate.Parent := pnlParent;
  ftvSecurityTemplate.align := alClient;
  ftvSecurityTemplate.Images := ilActions;

  fDraggedNode := nil;
  ftvSecurityTemplate.DragMode := dmAutomatic;
  ftvSecurityTemplate.OnDragOver := tvDragOver;
  ftvSecurityTemplate.OnDragDrop := tvDragDrop;
  ftvSecurityTemplate.OnStartDrag := tvStartDrag;
  ftvSecurityTemplate.OnEndDrag := tvEndDrag;
  ftvSecurityTemplate.ReadOnly := false;
  ftvSecurityTemplate.ParentShowHint := false;
  ftvSecurityTemplate.ShowHint := true;
  ftvSecurityTemplate.Hint := 'Right click to add/delete or drag/drop to re-structure';
  ftvSecurityTemplate.PopupMenu := pmnuNode;

  ftvSecurityTemplate.OnEditing := ftvSecurityTemplateEditing;
  ftvSecurityTemplate.OnEdited := ftvSecurityTemplateEdited;
  ftvSecurityTemplate.OnChange := ftvSecurityTemplateChange;
  ftvSecurityTemplate.OnKeyDown := ftvSecurityTemplateKeyDown;
  ftvSecurityTemplate.OnChanging := ftvSecurityTemplateChanging;
end;

destructor TevSecurityTemplateEditor.Destroy;
begin
  ftvSecurityTemplate.Destroy;
  inherited;
end;

procedure TevSecurityTemplateEditor.tvStartDrag(Sender: TObject; var DragObject: TDragObject);
var
  tnSource: TTreeNode;

⌨️ 快捷键说明

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