📄 absecedit.pas
字号:
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 + -