📄 absecedit.pas
字号:
begin
if Sender = ftvSecurityTemplate then
begin
if Assigned(ftvSecurityTemplate.Selected) then
begin
tnSource:= TTreeNode(ftvSecurityTemplate.Selected);
case ftvSecurityTemplate.GetNodeTypeSecurityTemplate(tnSource) of
ntNone, ntPassword, ntUserRegular, ntSupervisor:;
ntUserLeave, ntIntermediate:
begin
fDraggedNode := ftvSecurityTemplate.Selected;
exit;
end;
end;
end
else
;
end;
ftvSecurityTemplate.EndDrag(false);
end;
procedure TevSecurityTemplateEditor.tvDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
tnDest: TTreeNode;
begin
if (Sender = ftvSecurityTemplate) and Assigned(fDraggedNode) then
begin
tnDest:= ftvSecurityTemplate.GetNodeAt(X, Y);
if Assigned(tnDest) then
case ftvSecurityTemplate.GetNodeTypeSecurityTemplate(tnDest) of
ntNone:;
ntPassword:;
ntUserLeave:;
ntIntermediate:
begin
Accept := true;
exit;
end;
end;
end;
Accept := false;
end;
procedure TevSecurityTemplateEditor.tvDragDrop(Sender, Source: TObject; X, Y: Integer);
var
tnDest: TTreeNode;
begin
if (Sender = ftvSecurityTemplate) and Assigned(fDraggedNode) then
begin
tnDest:= ftvSecurityTemplate.GetNodeAt(X, Y);
case ftvSecurityTemplate.GetNodeTypeSecurityTemplate(tnDest) of
ntNone:;
ntPassword:;
ntUserLeave:;
ntIntermediate:
begin
fDraggedNode.MoveTo(tnDest, naAddChild );
fDraggedNode := nil;
end;
end;
end;
end;
procedure TevSecurityTemplateEditor.tvEndDrag(Sender, Target: TObject; X, Y: Integer);
begin
fDraggedNode := nil;
end;
procedure TevSecurityTemplateEditor.actNewHierarchicalNodeUpdate(Sender: TObject);
var
nodeType: TNodeType;
begin
nodeType := ftvSecurityTemplate.GetNodeTypeSecurityTemplate(ftvSecurityTemplate.Selected);
actNewHierarchicalNode.Enabled := Assigned(ftvSecurityTemplate.Selected) and (nodeType in [ntUserRegular, ntIntermediate]);
actNewCheckableNode.Enabled := Assigned(ftvSecurityTemplate.Selected) and (nodeType <> ntUserLeave);
actChangeId.Enabled := Assigned(ftvSecurityTemplate.Selected) and (PNodeData(ftvSecurityTemplate.Selected.Data)^.iId > 0);
{$B-}
actDeleteNode.Enabled := Assigned(ftvSecurityTemplate.Selected) and (ftvSecurityTemplate.Selected.Level > 0);
end;
procedure TevSecurityTemplateEditor.actNewCheckableNodeExecute(Sender: TObject);
var
lpNodeData: PNodeData;
begin
with ftvSecurityTemplate.Items.AddChild(ftvSecurityTemplate.Selected, 'New Checkable Node') do
begin
new(lpNodeData);
Data := lpNodeData;
lpNodeData^.iId := 0;//To prevent error in GenerateSecurityId
lpNodeData^.iId := ftvSecurityTemplate.GenerateSecurityId;
lpNodeData^.sCaption := Text;
lpNodeData^.bCheckOK := false;
lpNodeData^.AdditionalInfo.iItemIndex := AbsoluteIndex;//No need because changes???
lpNodeData^.AdditionalInfo.iImageIndex := 0;
ImageIndex := 4;{checkable leave}
SelectedIndex := 4;
end;
ftvSecurityTemplate.Selected.Expand(false);
end;
procedure TevSecurityTemplateEditor.actNewHierarchicalNodeExecute(Sender: TObject);
var
lpNodeData: PNodeData;
begin
with ftvSecurityTemplate.Items.AddChild(ftvSecurityTemplate.Selected, 'New Hierarchical Node') do
begin
new(lpNodeData);
lpNodeData^.iId := 0;
lpNodeData^.sCaption := Text;
lpNodeData^.bCheckOK := false;
lpNodeData^.AdditionalInfo.iItemIndex := AbsoluteIndex;//No need because changes???
lpNodeData^.AdditionalInfo.iImageIndex := 0;
Data := lpNodeData;
ImageIndex := 2;{structural}
SelectedIndex := 2;
end;
ftvSecurityTemplate.Selected.Expand(false);
end;
procedure TevSecurityTemplateEditor.actDeleteNodeExecute(Sender: TObject);
begin
ftvSecurityTemplate.OnChanging := nil;
try
ftvSecurityTemplate.DeleteNode(ftvSecurityTemplate.Selected);
finally
ftvSecurityTemplate.OnChanging := ftvSecurityTemplateChanging;
end;
end;
procedure TevSecurityTemplateEditor.ftvSecurityTemplateEditing(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean);
begin
AllowEdit := Node.Level <> 0;
end;
procedure TevSecurityTemplateEditor.ftvSecurityTemplateEdited(Sender: TObject; Node: TTreeNode; var S: String);
begin
S := TString34(S);
if Assigned(Node.Data) then //and (Integer(Node.Data) > C_MAX_ID) then
PNodeData(Node.Data)^.sCaption := TString34(S);
end;
procedure TevSecurityTemplateEditor.ftvSecurityTemplateChange(Sender: TObject; Node: TTreeNode);
begin
if PNodeData(Node.Data)^.iId = 0 then
begin
edtSecurityId.Visible := false;
pnlId.Visible := false;//Caption := ' Security ID: None';
end
else
begin
edtSecurityId.Visible := true;
pnlId.Visible := true;
edtSecurityId.Text := intToStr(PNodeData(Node.Data)^.iId);
//pnlId.Caption := ' Security ID: ' + intToStr(PNodeData(Node.Data)^.iId);
end;
end;
procedure TevSecurityTemplateEditor.ftvSecurityTemplateKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Assigned(ftvSecurityTemplate.Selected) then
if key = VK_F2 then
ftvSecurityTemplate.Selected.EditText;
end;
procedure TevSecurityTemplateEditor.ftvSecurityTemplateChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
var
Key: Word;
begin
if edtSecurityId.Visible then
begin
try
if PNodeData(ftvSecurityTemplate.Selected.Data)^.iId = strToInt(edtSecurityId.Text) then
exit
else
case MessageDlg('You have changed the security Id for the item selected. Do you want to apply the change.', mtWarning, [mbYes, mbNo, mbCancel], 0) of
mrYes:
begin
Key := VK_RETURN;
try
edtSecurityIdKeyDown(Sender, Key, []);
except
AllowChange := false;
end;
end;
mrNo:;
mrCancel: AllowChange := false;
end;
except
edtSecurityId.Text := IntToStr(PNodeData(ftvSecurityTemplate.Selected.Data)^.iId);
ShowMessage('Security ID must be a positive integer. Reverted to the initial value.');
AllowChange := false;
edtSecurityId.SetFocus;
end;
end;
end;
procedure TevSecurityTemplateEditor.edtSecurityIdKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
abAction: TabAction;
begin
if Assigned(ftvSecurityTemplate.Selected) then
if key = VK_RETURN then
try
if PNodeData(ftvSecurityTemplate.Selected.Data)^.iId = strToInt(edtSecurityId.Text) then
exit;
if strToInt(edtSecurityId.Text) < 0 then
raise Exception.Create('Security ID must be a positive integer');
if ftvSecurityTemplate.IsValidSecurityId(strToInt(edtSecurityId.Text)) then
begin
abAction := TabAction(fSecurityObject.GetActionClientById(PNodeData(ftvSecurityTemplate.Selected.Data)^.iId));
if Assigned(abAction) then
begin
case MessageDlg('Security Template item has a corresponding TabSecurity item. Do you want to modify its security id as well?', mtConfirmation, [mbYes, mbNo, mbCancel], 0) of
mrYes: abAction.SecurityId := strToInt(edtSecurityId.Text);
mrNo:;
mrCancel:
begin
edtSecurityId.Text := IntToStr(PNodeData(ftvSecurityTemplate.Selected.Data)^.iId);
exit;
end;
end;
end;
PNodeData(ftvSecurityTemplate.Selected.Data)^.iId := strToInt(edtSecurityId.Text);
end
else
ShowMessage('Security ID already exist');
except
on E:Exception do
begin
edtSecurityId.Text := intToStr(PNodeData(ftvSecurityTemplate.Selected.Data)^.iId);
raise;//ShowMessage('Security ID must be a positive integer');
end;
end;
end;
procedure TevSecurityTemplateEditor.btnOKClick(Sender: TObject);
var
AllowChange: Boolean;
begin
AllowChange := true;
ftvSecurityTemplateChanging(Sender, nil, AllowChange);
if not AllowChange then
ModalResult := mrNone;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -