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

📄 propstorageediteh.pas

📁 最新的 DBGRIDEH4.0
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{$ENDIF}
  end;
  ChildList.Free;
end;

procedure TPropStorageEditEhForm.AddCollectionProperties(N: TTreeNode; O: TCollection; Path: String);
var
  I: Integer;
  NC: TTreeNode;
begin
  if O.Count = 0 then Exit;
  NC := AddSortedChildObject(N, '<ForAllItems>',
    CreateNodeInfo(nil, '<ForAllItems>', Path + '<ForAllItems>', nthProperty, False));
  NC.ImageIndex := 0;
  NC.SelectedIndex := 0;
  AddProperties(NC, O.Items[0], Path + '<ForAllItems>', False);
  if O.Count > 0 then
  begin
    for I := 0 to O.Count - 1 do
    begin
      NC := AddSortedChildObject(N, '<Item' + IntToStr(I) + '>',
        CreateNodeInfo(nil, '<Item' + IntToStr(I) + '>', Path + '<Item' + IntToStr(I) + '>',  nthProperty, False));
      NC.ImageIndex := 0;
      NC.SelectedIndex := 0;
      AddProperties(NC, O.Items[I], Path + '<Item' + IntToStr(I) + '>', False);
    end;
  end;
end;

procedure TPropStorageEditEhForm.GetStoringPorps(PropList: TStrings);
var
  i: Integer;
begin
  PropList.Clear;
  for i := 0 to TreeView2.Items.Count-1 do
    if TreeView2.Items[i].Count = 0 then
      PropList.Add(TNodeInfoEh(TTreeNode(TreeView2.Items[i].Data).Data).Path);
end;

procedure TPropStorageEditEhForm.TreeView1GetSelectedIndex(Sender: TObject;
  Node: TTreeNode);
begin
  Node.SelectedIndex := Node.ImageIndex;
end;

procedure TPropStorageEditEhForm.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
  if Node.Data <> nil then
//    Dispose(TNodeInfoEh(Node.Data));
    TNodeInfoEh(Node.Data).Free;
end;

procedure TPropStorageEditEhForm.FormCreate(Sender: TObject);
begin
  LeftBorderWidth := TreeView1.Left;
  RightBorderWidth := ClientWidth div 2 - TreeView1.Width - TreeView1.Left;
  ButtonSize := spAddProp.Width;
  VBottomMargin := ClientHeight - Bevel1.Top;
{$IFDEF EH_LIB_9}
// To prevent RecreateWnd and Nodes
  PopupMode := pmAuto;
{$ENDIF}
end;

procedure TPropStorageEditEhForm.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to cbPredifinedProps.Items.Count - 1 do
    cbPredifinedProps.Items.Objects[i].Free;
end;

procedure TPropStorageEditEhForm.FormResize(Sender: TObject);
begin
  TreeView1.Width := ClientWidth div 2 - LeftBorderWidth - RightBorderWidth;
  spAddProp.Left := ClientWidth div 2 - 11;
  spAddProp.Top := (ClientHeight - VBottomMargin) div 2 - ButtonSize - 5 - ButtonSize div 2;
  sbRemoveProp.Left := ClientWidth div 2 - 11;
  sbRemoveProp.Top := (ClientHeight - VBottomMargin) div 2 - ButtonSize div 2;
  sbRemoveAllProps.Left := ClientWidth div 2 - 11;
  sbRemoveAllProps.Top := (ClientHeight - VBottomMargin) div 2 + ButtonSize div 2 + 5;
  spSynchTrees.Left := ClientWidth div 2 - 11;
  spSynchTrees.Top := (ClientHeight - VBottomMargin) div 2 + ButtonSize div 2 + ButtonSize + 10;
  TreeView2.Left := ClientWidth div 2 + RightBorderWidth;
  lStoredProps.Left := TreeView2.Left;
  TreeView2.Width := TreeView1.Width;
end;

procedure TPropStorageEditEhForm.spAddPropClick(Sender: TObject);
begin
  MainAddPropertyNode(TreeView1.Selected);
end;

procedure TPropStorageEditEhForm.sbRemovePropClick(Sender: TObject);
begin
  if TreeView2.Selected <> nil then
    SlaveDeleteNode(TreeView2.Selected);
end;

procedure TPropStorageEditEhForm.sbRemoveAllPropsClick(Sender: TObject);
var
  i: Integer;
begin
//  TreeView1.Items.BeginUpdate;
//  TreeView2.Items.BeginUpdate;
  try
    while TreeView2.Items.Count > 0 do
      for i := TreeView2.Items.Count-1 downto 0 do
        if TreeView2.Items[i].Parent = nil then
        begin
          SlaveDeleteNode(TreeView2.Items[i]);
          Break;
        end;
  finally
//    TreeView1.Items.EndUpdate;
//    TreeView2.Items.EndUpdate;
  end;
end;

procedure TPropStorageEditEhForm.spSynchTreesClick(Sender: TObject);
{$IFDEF EH_LIB_CLX}
var
  tn: TTreeNode;
{$ENDIF}
begin
  if TreeView2.Selected = nil then Exit;
  TTreeNode(TreeView2.Selected.Data).Selected := True;
{$IFDEF EH_LIB_CLX}
  tn := TTreeNode(TreeView2.Selected.Data).Parent;
  while tn.Parent <> nil do
  begin
    tn.Expand(False);
    tn := tn.Parent;
  end;
  TreeView1.TopItem := TTreeNode(TreeView2.Selected.Data);
{$ENDIF}
end;

procedure TPropStorageEditEhForm.SlaveDeleteNode(SN: TTreeNode);
var
  i: Integer;
begin
//  TreeView1.Items.BeginUpdate;
//  TreeView2.Items.BeginUpdate;
  try
    if SN.Count = 0 then
      MainDeletePropertyNode(TTreeNode((SN).Data))
    else
      for i := SN.Count-1 downto 0 do
        SlaveDeleteNode(SN.Item[i]);
  finally
//    TreeView1.Items.EndUpdate;
//    TreeView2.Items.EndUpdate;
  end;
end;

procedure TPropStorageEditEhForm.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  UpdateButtonState;
  if (TreeView1.Selected <> nil) and (TreeView1.Selected.Data <> nil) then
    Edit2.Text :=  TNodeInfoEh(TreeView1.Selected.Data).Path;
end;

procedure TPropStorageEditEhForm.UpdateButtonState;
begin
  spAddProp.Enabled := (TreeView1.Selected <> nil) and
                       (TreeView1.Selected.Data <> nil) and
                       (TNodeInfoEh(TreeView1.Selected.Data).NodeType = nthProperty) and
                       (TNodeInfoEh(TreeView1.Selected.Data).Checked <> 1);
  sbRemoveProp.Enabled := (TreeView2.Selected <> nil) and
                       (TreeView2.Selected.Data <> nil);
  spSynchTrees.Enabled := sbRemoveProp.Enabled;
  sbRemoveAllProps.Enabled := (TreeView2.Items.Count > 0);
end;

procedure TPropStorageEditEhForm.TreeView2MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  DownNode: TTreeNode;
begin
  if ssDouble in Shift then
  begin
    DownNode := TreeView2.GetNodeAt(X, Y);
    if (DownNode <> nil) and (TNodeInfoEh(TTreeNode(DownNode.Data).Data).NodeType = nthProperty) then
      MainDeletePropertyNode(TTreeNode(DownNode.Data));
  end;
end;

procedure TPropStorageEditEhForm.cbPredifinedPropsClickCheck(Sender: TObject);
var
  i: Integer;
  OldCursor: TCursor;
begin
  OldCursor := Screen.Cursor;
  try
    for i := 0 to cbPredifinedProps.Items.Count-1 do
      if cbPredifinedProps.Items.Objects[i] <> nil then
        TPredifinedPropsEh(cbPredifinedProps.Items.Objects[i]).
          SetCkecked(cbPredifinedProps.Checked[i]);
  finally
    Screen.Cursor := OldCursor;
  end;
end;

procedure TPropStorageEditEhForm.TreeView1Compare(Sender: TObject; Node1,
  Node2: TTreeNode; Data: Integer; var Compare: Integer);
begin
  if TNodeInfoEh(Node1.Data).NodeType = TNodeInfoEh(Node2.Data).NodeType then
    Compare := CompareText(TNodeInfoEh(Node1.Data).Name, TNodeInfoEh(Node2.Data).Name)
  else if TNodeInfoEh(Node1.Data).NodeType = nthProperty then
    Compare := -1
  else
    Compare := 1;
end;

function TPropStorageEditEhForm.GetChildNodeByText(ParentNode: TTreeNode; Text: String): TTreeNode;
var
  i: Integer;
begin
  Result := nil;
  for i := 0 to ParentNode.Count-1 do
    if NlsCompareText(ParentNode.Item[i].Text, Text) = 0 then
    begin
      Result := ParentNode.Item[i];
      Exit;
    end;
end;

procedure TPropStorageEditEhForm.TreeView1Expanding(Sender: TObject;
  Node: TTreeNode; var AllowExpansion: Boolean);
var
  OldCursor: TCursor;
  TopNode: TTreeNode;
  PTerm: String;
begin
  TopNode := TreeView1.TopItem;
  if (Node.Count > 0) and TNodeInfoEh(Node.Item[0].Data).IsVoidProperty then
  begin
    Node.Item[0].Free;
{$IFNDEF EH_LIB_CLX}
    StartBuildTicks := GetTickCount;
{$ENDIF}
    OldCursor := Screen.Cursor;
    try
      PTerm := '';

      AddProperties(Node, TNodeInfoEh(Node.Data).Instance,
        TNodeInfoEh(Node.Data).Path + PTerm,
        not (TNodeInfoEh(Node.Data).NodeType = nthProperty));
      if not (TNodeInfoEh(Node.Data).NodeType = nthProperty) then
        AddComponents(Node, TComponent(TNodeInfoEh(Node.Data).Instance), TNodeInfoEh(Node.Data).Path + PTerm);
//      TreeView1.AlphaSort;
    finally
      Screen.Cursor := OldCursor;
    end;
  end;
  if Node.Count = 1 then
    Node[0].Expanded := True;
  TreeView1.TopItem := TopNode;
end;

procedure TPropStorageEditEhForm.BuildPredifinedProps;
var
  i: Integer;
  PreProp: TPredifinedPropsEh;
begin
  for i := 0 to PredifinedPropsClassList.Count-1 do
  begin
    PreProp :=  TPredifinedPropsEhClass(PredifinedPropsClassList[i]).Create(Self);
    cbPredifinedProps.Items.AddObject(PreProp.Caption, PreProp);
  end;
end;

{ TPredifinedPropsEh }

function TPredifinedPropsEh.Caption: String;
begin
end;

constructor TPredifinedPropsEh.Create(EditForm: TPropStorageEditEhForm);
begin
  inherited Create;
  FEditForm := EditForm;
end;

function TPredifinedPropsEh.PropertyAdded(Component: TComponent; PropPath: String): Boolean;
begin
  Result := False;
end;

function TPredifinedPropsEh.PropertyDeleted(Component: TComponent; PropPath: String): Boolean;
begin
  Result := False;
end;

procedure TPredifinedPropsEh.SetCkecked(AChecked: Boolean);
begin
  FCkecked := AChecked;
end;

{ TPredifinedActiveControlEh }

function TPredifinedActiveControlEh.Caption: String;
begin
  Result := 'Form ActiveControl';
end;

function TPredifinedActiveControlEh.PropertyAdded(Component: TComponent; PropPath: String): Boolean;
begin
  if PropPath = '<P>.ActiveControl'
    then FActiveControlAdded := True;
  FCkecked := FActiveControlAdded;
  Result := FCkecked;
end;

function TPredifinedActiveControlEh.PropertyDeleted(Component: TComponent; PropPath: String): Boolean;
begin
  if PropPath = '<P>.ActiveControl'
    then FActiveControlAdded := False;
  FCkecked := FActiveControlAdded;
  Result := FCkecked;
end;

procedure TPropStorageEditEhForm.PropertyAdded(DN: TTreeNode);
var
  i: Integer;
begin
  for i := 0 to cbPredifinedProps.Items.Count-1 do
    if cbPredifinedProps.Items.Objects[i] <> nil then
      cbPredifinedProps.Checked[i] :=
        TPredifinedPropsEh(cbPredifinedProps.Items.Objects[i]).
          PropertyAdded(nil, TNodeInfoEh(TTreeNode(DN.Data).Data).Path )
end;

procedure TPropStorageEditEhForm.PropertyDeleting(DN: TTreeNode);
var
  i: Integer;
begin
  for i := 0 to cbPredifinedProps.Items.Count-1 do
    if cbPredifinedProps.Items.Objects[i] <> nil then
      cbPredifinedProps.Checked[i] :=
        TPredifinedPropsEh(cbPredifinedProps.Items.Objects[i]).
          PropertyDeleted(nil, TNodeInfoEh(TTreeNode(DN.Data).Data).Path)
end;

procedure TPredifinedActiveControlEh.SetCkecked(AChecked: Boolean);
begin
  if AChecked <> FCkecked then
  begin
    if AChecked
      then FEditForm.MainAddPropertyNode('<P>.ActiveControl')
      else FEditForm.MainDeletePropertyNode('<P>.ActiveControl');
    inherited SetCkecked(AChecked);
  end;
end;

{ TPredifinedPosPropertiesEh }

function TPredifinedPosPropertiesEh.Caption: String;
begin
  Result := 'Form Pos';
end;

function TPredifinedPosPropertiesEh.PropertyAdded(Component: TComponent; PropPath: String): Boolean;
begin
  if PropPath = '<P>.Top'
    then FTopAdded := True;
  if PropPath = '<P>.Left'
    then FLeftAdded := True;
  FCkecked := FTopAdded and FLeftAdded;
  Result := FCkecked;
end;

function TPredifinedPosPropertiesEh.PropertyDeleted(Component: TComponent; PropPath: String): Boolean;
begin
  if PropPath = '<P>.Top'
    then FTopAdded := False;
  if PropPath = '<P>.Left'
    then FLeftAdded := False;
  FCkecked := FTopAdded and FLeftAdded;
  Result := FCkecked;
end;

procedure TPredifinedPosPropertiesEh.SetCkecked(AChecked: Boolean);
begin
  if AChecked <> FCkecked then
  begin
    if AChecked then
    begin
      FEditForm.MainAddPropertyNode('<P>.Top');
      FEditForm.MainAddPropertyNode('<P>.Left');
    end else
    begin
      FEditForm.MainDeletePropertyNode('<P>.Top');
      FEditForm.MainDeletePropertyNode('<P>.Left');
    end;
    inherited SetCkecked(AChecked);
  end;
end;

{ TPredifinedSizePropertiesEh }

function TPredifinedSizePropertiesEh.Caption: String;
begin
  Result := 'Form Size';
end;

function TPredifinedSizePropertiesEh.PropertyAdded(Component: TComponent;
  PropPath: String): Boolean;
begin
  if PropPath = '<P>.Height'
    then FHeightAdded := True;
  if PropPath = '<P>.Width'
    then FWidthAdded := True;
  if PropPath = '<P>.PixelsPerInch'
    then FPixelsPerInchAdded := True;
  FCkecked := FHeightAdded and FWidthAdded and FPixelsPerInchAdded;
  Result := FCkecked;
end;

function TPredifinedSizePropertiesEh.PropertyDeleted(Component: TComponent;
  PropPath: String): Boolean;
begin
  if PropPath = '<P>.Height'
    then FHeightAdded := False;
  if PropPath = '<P>.Width'
    then FWidthAdded := False;
  if PropPath = '<P>.PixelsPerInch'
    then FPixelsPerInchAdded := False;
  FCkecked := FHeightAdded and FWidthAdded and FPixelsPerInchAdded;
  Result := FCkecked;
end;

procedure TPredifinedSizePropertiesEh.SetCkecked(AChecked: Boolean);
begin
  if AChecked <> FCkecked then
  begin
    if AChecked then
    begin
      FEditForm.MainAddPropertyNode('<P>.Height');
      FEditForm.MainAddPropertyNode('<P>.Width');
      FEditForm.MainAddPropertyNode('<P>.PixelsPerInch');
    end else
    begin
      FEditForm.MainDeletePropertyNode('<P>.Height');
      FEditForm.MainDeletePropertyNode('<P>.Width');
      FEditForm.MainDeletePropertyNode('<P>.PixelsPerInch');
    end;
    inherited SetCkecked(AChecked);
  end;
end;

{ TPredifinedStatePropertiesEh }

function TPredifinedStatePropertiesEh.Caption: String;
begin
  Result := 'Form State';
end;

function TPredifinedStatePropertiesEh.PropertyAdded(Component: TComponent;
  PropPath: String): Boolean;
begin
  if PropPath = '<P>.WindowState'
    then FStateAdded := True;
  FCkecked := FStateAdded;
  Result := FCkecked;
end;

function TPredifinedStatePropertiesEh.PropertyDeleted(
  Component: TComponent; PropPath: String): Boolean;
begin
  if PropPath = '<P>.WindowState'
    then FStateAdded := False;
  FCkecked := FStateAdded;
  Result := FCkecked;
end;

procedure TPredifinedStatePropertiesEh.SetCkecked(AChecked: Boolean);
begin
  if AChecked <> FCkecked then
  begin
    if AChecked
      then FEditForm.MainAddPropertyNode('<P>.WindowState')
      else FEditForm.MainDeletePropertyNode('<P>.WindowState');
    inherited SetCkecked(AChecked);
  end;
end;

initialization
  PredifinedPropsClassList := TList.Create;
  RegisterPredifinedPropsClass(TPredifinedActiveControlEh);
  RegisterPredifinedPropsClass(TPredifinedPosPropertiesEh);
  RegisterPredifinedPropsClass(TPredifinedSizePropertiesEh);
  RegisterPredifinedPropsClass(TPredifinedStatePropertiesEh);
finalization
  FreeAndNil(PredifinedPropsClassList);
end.

⌨️ 快捷键说明

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