📄 propstorageediteh.pas
字号:
{$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 + -