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

📄 absecedit.pas

📁 1. It is located in the root directory - SecurityBuilderDemo.exe. Leave password box blank and click
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -