aprstped.pas
来自「delphi编程控件」· PAS 代码 · 共 843 行 · 第 1/2 页
PAS
843 行
for j := 0 to List.Count - 1 do
AddProperties(trcnode, List.Objects[j].ClassInfo, AKinds,
'', True, TPersistent(List.Objects[j]));
if trcnode.HasChildren then begin
FList.Clear;
GetTreeNodeStructure(trcnode, FList);
for j := 0 to FList.Count - 1 do
for k := 0 to List.Count - 1 do begin
trnode1 := TreeView.Items.AddChild(TTreeNode(FList[j]), List[k]);
if(IsStoredProperty(TComponent(List.Objects[k]), TTreeNode(FList[j]).Text)) then
trnode1.StateIndex := 1;
end;
end;
if Not trcnode.HasChildren then trcnode.Free
end;
List.Free;
FList.Free;
end;
procedure TfAutoPropertiesStoreEdit.BuildPropertiesTree;
Var
i, j : Integer;
trnode, trnode1 : TTreeNode;
begin
TreeView.Items.Clear;
FillPropNameList(GetTypeKinds);
for i := 0 to PropNameList.Count - 1 do begin
trnode := TreeView.Items.Add(Nil, PropNameList[i]);
for j := 0 to ComponentList.Count - 1 do begin
trnode1 := Nil;
if(GetPropInfo(ComponentList.Objects[j].ClassInfo, PropNameList[i]) <> Nil) then
trnode1 := TreeView.Items.AddChild(trnode, ComponentList[j]);
if (trnode1 <> NIl)
And (IsStoredProperty(TComponent(ComponentList.Objects[j]), PropNameList[i])) then
trnode1.StateIndex := 1;
end;
end;
end;
procedure TfAutoPropertiesStoreEdit.BuildPropertiesClassTree;
Var
i, j, k : Integer;
trnode, trnode1, trcnode : TTreeNode;
List : TStringList;
begin
TreeView.Items.Clear;
FillPropNameList(GetTypeKinds);
List := TStringList.Create;
for i := 0 to PropNameList.Count - 1 do begin
trnode := TreeView.Items.Add(Nil, PropNameList[i]);
for j := 0 to ClassList.Count - 1 do begin
GetComponentByClasses(ClassList[j], List);
if(GetPropInfo(List.Objects[0].ClassInfo, PropNameList[i]) <> Nil) then begin
trcnode := TreeView.Items.AddChild(trnode, ClassList[j]);
for k := 0 to List.Count - 1 do begin
trnode1 := TreeView.Items.AddChild(trcnode, List[k]);
if(IsStoredProperty(TComponent(List.Objects[k]), PropNameList[i])) then
trnode1.StateIndex := 1;
end;
end;
end;
end;
List.Free;
end;
procedure TfAutoPropertiesStoreEdit.ChangeStoredProperty(ATreeNode : TTreeNode);
function GetComponent : TComponent;
begin
if RViewType.ItemIndex < 2 then begin
Result := Form.FindComponent(ATreeNode.Parent.Text);
if(Result = Nil) And (ATreeNode.Parent.Text = Form.Name) then
Result := Form;
end else begin
Result := Form.FindComponent(ATreeNode.Text);
if(Result = Nil) And (ATreeNode.Text = Form.Name) then
Result := Form;
end;
end;
function GetPropName : String;
Var
tr : TTreeNode;
begin
if RViewType.ItemIndex < 2 then
Result := ATreeNode.Text
else
if(RViewType.ItemIndex < 4) then
Result := ATreeNode.Parent.Text
else begin
tr := ATreeNode;
while tr.Parent <> Nil do
tr := tr.Parent;
Result := tr.Text;
end;
end;
var
Component : TComponent;
PropName : String;
Index : Integer;
objstore : TAutoObjectStore;
begin
Component := GetComponent;
PropName := GetPropName;
Index := Store.Items.IndexOfComponent(Component);
if(Index = -1) then
objstore := Store.Items.Add(Component)
else objstore := Store.Items[Index];
if (ATreeNode.StateIndex = -1) then begin
objstore.StoredProp.Add(PropName);
ATreeNode.StateIndex := 1
end else begin
Index := objstore.StoredProp.IndexOf(PropName);
if(Index > -1) then
objstore.StoredProp.Delete(Index);
if(objstore.StoredProp.Count = 0) then
objstore.Free;
ATreeNode.StateIndex := -1;
end;
DeleteDoubleTreeNode(ATreeNode);
CreateDoubleTreeNode(ATreeNode);
TreeView.Invalidate;
end;
function TfAutoPropertiesStoreEdit.IsStoredProperty(Component : TComponent; PropName : String) : Boolean;
Var
i, Index : Integer;
begin
Result := False;
Index := Store.Items.IndexOfComponent(Component);
if(Index > -1) then begin
for i := 0 to Store.Items[Index].StoredProp.Count -1 do begin
if(Propname = Store.Items[Index].StoredProp[i]) then begin
Result := True;
break;
end;
end;
end;
end;
procedure TfAutoPropertiesStoreEdit.GetChildTreeNodes(AList : TList);
Var
tr : TTreeNode;
procedure GetTreeNodeStructure_(ATreeNode : TTreeNode);
Var
tr1 : TTreeNode;
begin
if(ATreeNode.HasChildren) then begin
tr1 := ATreeNode.GetFirstChild;
while tr1 <> Nil do begin
GetTreeNodeStructure_(tr1);
tr1 := ATreeNode.GetNextChild(tr1);
end;
end else AList.Add(ATreeNode);
end;
begin
AList.Clear;
tr := TreeView.Items.GetFirstNode;
while tr <> Nil do begin
GetTreeNodeStructure_(tr);
tr := tr. GetNextSibling;
end;
end;
procedure TfAutoPropertiesStoreEdit.CreateDoubleTreeNode(ATreeNode : TTreeNode);
Var
TV : TTreeView;
List, List1 : TList;
i, j : Integer;
treenode : TTreeNode;
FoundFlag : Boolean;
procedure GetOneLevelTreeNodes(tr : TTreeNode);
Var
tr1 : TTreeNode;
begin
List1.Clear;
if(tr = Nil) then begin
tr1 := TV.Items.GetFirstNode;
while tr1 <> Nil do begin
List1.Add(tr1);
tr1 := tr1. GetNextSibling;
end;
end else begin
tr1 := tr.GetFirstChild;
while tr1 <> Nil do begin
List1.Add(tr1);
tr1 := tr.GetNextChild(tr1);
end;
end;
end;
begin
List := TList.Create;
List1 := TList.Create;
if (AtreeNode.StateIndex = -1) then
TV := TreeView2
else TV := TreeView1;
List.Add(AtreeNode.Parent);
while TTreeNode(List[0]).Parent <> Nil do
List.Insert(0, TTreeNode(List[0]).Parent);
treenode := Nil;
j := 0;
for i := 0 to List.Count - 1 do begin
FoundFlag := False;
GetOneLevelTreeNodes(treenode);
if(List1.Count = 0) then break;
for j := 0 to List1.Count - 1 do
if(CompareText((TTreeNode(List1[j])).Text, TTreeNode(List[i]).Text) >= 0) then begin
if(TTreeNode(List[i]).Text = TTreeNode(List1[j]).Text) then begin
treenode := TTreeNode(List1[j]);
FoundFlag := True;
end;
break;
end;
if(Not FoundFlag) then break;
end;
if(i = List.Count) then begin
GetOneLevelTreeNodes(treenode);
for i := 0 to List1.Count - 1 do begin
if(ATreeNode.Text <= TTreeNode(List1[i]).Text) then
break;
end;
if (i < List1.Count) then
treenode := TV.Items.Insert(TTreeNode(List1[i]), ATreeNode.Text)
else treenode := TV.Items.Add(TTreeNode(List1.Last), ATreeNode.Text);
end else begin
if(i = 0) then begin
if(j < List1.Count) then
treenode := TV.Items.Insert(TTreeNode(List1[j]), TTreeNode(List[i]).Text)
else treenode := TV.Items.Add(Nil, TTreeNode(List[i]).Text);
end else begin
if(j < List1.Count) then
treenode := TV.Items.Insert(TTreeNode(List1[j]), TTreeNode(List[i]).Text)
else treenode := TV.Items.AddChild(treenode, TTreeNode(List[i]).Text);
end;
for i := i + 1 to List.Count - 1 do
treenode := TV.Items.AddChild(treenode, TTreeNode(List[i]).Text);
treenode := TV.Items.AddChild(treenode, ATreeNode.Text)
end;
treenode.Data := ATreeNode;
ATreeNode.Data := treeNode;
treenode.StateIndex := ATreeNode.StateIndex;
List.Free;
List1.Free;
end;
procedure TfAutoPropertiesStoreEdit.DeleteDoubleTreeNode(ATreeNode : TTreeNode);
Var
tr : TTreeNode;
List : TList;
begin
List := TList.Create;
tr := TTreeNode(ATreeNode.Data);
List.Add(tr.Parent);
while TTreeNode(List.Last).Parent <> Nil do
List.Add(TTreeNode(List.Last).Parent);
tr.Free;
while (List.Count > 0) And Not TTreeNode(List[0]).HasChildren do begin
tr := TTreeNode(List[0]);
List.Remove(tr);
tr.Free;
end;
List.Free;
end;
procedure TfAutoPropertiesStoreEdit.TVKeyPress(ATreeView : TTreeView; var Key: Char);
begin
if(ATreeView.Selected <> Nil) And (Key = ' ')
And Not ATreeView.Selected.HasChildren then begin
Key := #0;
if(ATreeView <> TreeView) then
ChangeStoredProperty(TTreeNode(ATreeView.Selected.Data))
else ChangeStoredProperty(TreeView.Selected);
end;
end;
procedure TfAutoPropertiesStoreEdit.TVDblClick(ATreeView : TTreeView);
Var
lpht: TTVHitTestInfo;
begin
if(ATreeView.Selected <> Nil)
And Not (ATreeView.Selected.HasChildren) then begin
GetCursorPos(lpht.pt);
lpht.pt := ATreeView.ScreenToClient(lpht.pt);
lpht.Flags := TVHT_ONITEMLABEL;
TreeView_HitTest(ATreeView.Handle, lpht);
if(lpht.hItem = ATreeView.Selected.ItemId) then begin
if(ATreeView <> TreeView) then
ChangeStoredProperty(TTreeNode(ATreeView.Selected.Data))
else ChangeStoredProperty(TreeView.Selected);
end;
end;
end;
procedure TfAutoPropertiesStoreEdit.FormCreate(Sender: TObject);
Var
i : Integer;
begin
ComponentList := TStringList.Create;
ClassList := TStringList.Create;
PropNameList := TStringList.Create;
BOk.Caption := LoadStr(ACB_OK);
BCancel.Caption := LoadStr(ACB_CANCEL);
BHelp.Caption := LoadStr(ACB_HELP);
TSAll.Caption := LoadStr(AEL_PROPSTORE_ALLP);
TSStoredProp.Caption := LoadStr(AEL_PROPSTORE_STOREDP);
TSNonStoredProp.Caption := LoadStr(AEL_PROPSTORE_NONSTOREDP);
RViewType.Caption := LoadStr(AEL_PROPSTORE_VIETYPE);
RViewType.Items.Clear;
RViewType.Items.Add(LoadStr(AEL_PROPSTORE_VTDEFAULT));
RViewType.Items.Add(LoadStr(AEL_PROPSTORE_VTCLASSES));
RViewType.Items.Add(LoadStr(AEL_PROPSTORE_VTPROPERTIES));
RViewType.Items.Add(LoadStr(AEL_PROPSTORE_VTCLASSESPROPERTIES));
RViewType.Items.Add(LoadStr(AEL_PROPSTORE_VTPROPERTIESCLASSES));
RViewType.ItemIndex := 0;
GTypeKinds.Caption := LoadStr(AEL_PROPSTORE_TYPEKINDS);
CBAllTypeKinds.Caption := LoadStr(AEL_PROPSTORE_ALLTYPEKINDS);
LHelp1.Caption := LoadStr(AEL_PROPSTORE_HELP1);
{$IFDEF DELPHI3_0}
with LBTypeKinds.Items do begin
Clear;
Add('tkArray');
Add('tkChar');
Add('tkClass');
Add('tkEnumeration');
Add('tkFloat');
Add('tkInteger');
Add('tkInterface');
Add('tkLString');
Add('tkRecord');
Add('tkSet');
Add('tkString');
Add('tkVariant');
Add('tkWChar');
end;
{$ENDIF}
for i := 0 to LBTypeKinds.Items.Count - 1 do
LBTypeKinds.Selected[i] := True;
end;
procedure TfAutoPropertiesStoreEdit.FormDestroy(Sender: TObject);
begin
ComponentList.Free;
ClassList.Free;
PropNameList.Free;
end;
procedure TfAutoPropertiesStoreEdit.RViewTypeClick(Sender: TObject);
begin
UpdatePropTrees;
end;
procedure TfAutoPropertiesStoreEdit.CBAllTypeKindsClick(Sender: TObject);
Var
i : Integer;
begin
if(CBAllTypeKinds.Checked) then begin
for i := 0 to LBTypeKinds.Items.Count - 1 do
LBTypeKinds.Selected[i] := True;
UpdatePropTrees;
end;
end;
procedure TfAutoPropertiesStoreEdit.LBTypeKindsClick(Sender: TObject);
begin
CBAllTypeKinds.Checked := False;
UpdatePropTrees;
end;
procedure TfAutoPropertiesStoreEdit.TreeViewKeyPress(Sender: TObject;
var Key: Char);
begin
TVKeyPress(TreeView, Key);
end;
procedure TfAutoPropertiesStoreEdit.TreeViewDblClick(Sender: TObject);
begin
TVDblClick(TreeView);
end;
procedure TfAutoPropertiesStoreEdit.TreeView1KeyPress(Sender: TObject;
var Key: Char);
begin
TVKeyPress(TreeView1, Key);
end;
procedure TfAutoPropertiesStoreEdit.TreeView2KeyPress(Sender: TObject;
var Key: Char);
begin
TVKeyPress(TreeView2, Key);
end;
procedure TfAutoPropertiesStoreEdit.TreeView1DblClick(Sender: TObject);
begin
TVDblClick(TreeView1);
end;
procedure TfAutoPropertiesStoreEdit.TreeView2DblClick(Sender: TObject);
begin
TVDblClick(TreeView2);
end;
procedure TfAutoPropertiesStoreEdit.BHelpClick(Sender: TObject);
begin
Application.HelpFile := 'aob_ps.hlp';
Application.HelpContext(10003);
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?