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

📄 wwinspectorprop.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  if ParentNode=nil then Node := TreeView.Items.GetFirstNode
  else Node := ParentNode.GetFirstChild;

  while Node <> nil do
  begin
      Node.Text:= TObjTreeNode(Node).objItem.GetDisplayName;
      Node := Node.GetNextSibling;
  end;
end;

procedure TInspectorPropEdit.AddChildrenToTree(ParentNode: TTreeNode;
    Items: TwwInspectorCollection);
var i: integer;
    Node: TObjTreeNode;
    tempNode: TTreeNode;
begin
  with Items do begin
     for i:= 0 to Count-1 do begin
//        ShowMessage('i:' + inttostr(i));
        Node:= TObjTreeNode(TreeView.Items.AddChild(ParentNode, Items[i].Caption));
        Node.Text:= Items[i].GetDisplayName;
        Node.Caption:= Items[i].Caption;
        Node.ObjItem:= Items[i];
        AddChildrenToTree(Node, Items[i].Items);
     end
  end;
//  ShowMessage('i:' + 'done');
  if ParentNode=nil then
  begin
     tempNode:= TreeView.Items.GetFirstNode;
     while tempNode<>nil do begin
//       ShowMessage('tempnode:' + tempnode.text);
       if TObjTreeNode(tempNode).objItem.expanded then
         tempNode.expanded:= True;
       tempNode:= tempNode.GetNext;
     end;
  end;
end;

procedure TInspectorPropEdit.AddChildrenToInspector(ParentNode: TTreeNode; ParentItem: TwwInspectorItem);
var Node: TObjTreeNode;
    Item: TwwInspectorItem;
begin
   Node:= TObjTreeNode(ParentNode);
   ParentItem.Caption:= Node.Caption;

   Node := TObjTreeNode(ParentNode.GetFirstChild);
   while Node <> nil do
   begin
      Item:= TwwInspectorItem.create(ParentItem.Items);
      AddChildrenToInspector(Node, Item);
      Node := TObjTreeNode(Node.GetNextSibling);
   end;
end;

{Function wwGetOwnerForm(component: TComponent):TCustomForm;
var temp: TComponent;
begin
   temp:= component;
   while (temp<>Nil) and (temp.Owner<>Nil) and not (temp is TCustomForm) do temp:= temp.Owner;
   result:= TCustomForm(temp);
end;
}
procedure TInspectorPropEdit.NewItemButtonClick(Sender: TObject);
var ParentOfSelected: TObjTreeNode;
    Node: TObjTreeNode;
begin
   if TreeView.Selected=Nil then ParentOfSelected:= Nil
   else ParentOfSelected:= TObjTreeNode(TreeView.Selected.parent);

   Node := TObjTreeNode(TreeView.Items.AddChild(ParentOfSelected, ''));

   if ParentOfSelected=nil then
      Node.ObjItem:= TwwInspectorItem.create(Inspector.Items)
   else
      Node.ObjItem:= TwwInspectorItem.create(ParentOfSelected.ObjItem.Items);
   TreeView.Selected:= Node;

   RefreshNodeText(TreeView.Selected.parent);
   Inspector.invalidate;

end;

procedure TInspectorPropEdit.NewSubitemButtonClick(Sender: TObject);
var Node: TObjTreeNode;
begin
   if TreeView.selected<>Nil then
   begin
      Node:= TObjTreeNode(TreeView.Items.AddChild(TreeView.Selected, ''));
      Node.ObjItem:= TwwInspectorItem.create(
                       TObjTreeNode(TreeView.Selected).ObjItem.Items);
      TreeView.selected:= Node;
      RefreshNodeText(TreeView.Selected.parent);
      Inspector.invalidate;
   end;
end;

procedure TInspectorPropEdit.TreeViewDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var HitTest : THitTests;
    KeyState: TKeyboardState;
    TempNode, XYNode: TTreeNode;
begin
  with (Sender as TTreeView) do begin
    HitTest := GetHitTestInfoAt(X,Y);
    if (Selected <> nil) and
       ([htOnItem, htOnButton, htOnIndent, htOnLabel, htOnRight] * HitTest <> []) then
    begin
       if ([htOnItem, htOnButton, htOnIndent, htOnLabel, htOnRight] * HitTest <> []) then
       begin
          GetKeyboardState(KeyState);
          XYNode:= GetNodeAt(X,Y);
          Items.BeginUpdate;

          if KeyState[vk_Shift]>=128 then begin
             TempNode:= XYNode.Owner.AddChild(XYNode, '');
             Selected.MoveTo(TempNode, naInsert);
             TempNode.Free;
             TObjTreeNode(Selected).objitem.collection:= TObjTreeNode(XYNode).Objitem.Items;
             TObjTreeNode(Selected).objitem.index:= Selected.index; //XYNode.count-1;
             TObjTreeNode(Selected).objitem.parentItem:= TObjTreeNode(XYNode).Objitem;

             RefreshNodeText(selected.parent);
             Inspector.ApplySettings;
          end
          else begin
             if (XYNode<>Nil) and (Selected<>XYNode.GetPrevSibling) then
             begin
               Selected.MoveTo(XYNode, naInsert);

               TObjTreeNode(Selected).objitem.collection:= TObjTreeNode(XYNode).Objitem.collection;
               TObjTreeNode(Selected).objitem.index:= Selected.index;
               TObjTreeNode(Selected).objitem.parentItem:= TObjTreeNode(XYNode).Objitem.parentItem;

               RefreshNodeText(selected.parent);
               Inspector.ApplySettings;
             end;
          end;
          Items.EndUpdate;
       end
    end
    else if htNowhere in HitTest then
    begin
       Items.BeginUpdate;
       Selected.MoveTo(DropTarget, naAdd);

       TObjTreeNode(Selected).objitem.collection:= Inspector.Items;
       TObjTreeNode(Selected).objitem.index:= Selected.index; //TObjTreeView(TreeView).NumChildren-1;
       TObjTreeNode(Selected).objitem.parentItem:= nil;

       RefreshNodeText(selected.parent);
       Inspector.ApplySettings;
       Items.EndUpdate;
    end;

    DropTarget := nil;
    Screen.Cursor := crDefault;
  end
end;

procedure TInspectorPropEdit.TreeViewDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept:= True;
end;

procedure TInspectorPropEdit.TreeViewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var obj: TwwInspectorItem;
    NewRow: integer;
begin
  if (ssAlt in Shift) and (Designer<>nil) and (TreeView.selected<>nil) then
  begin
      obj:= TObjTreeNode(TreeView.Selected).ObjItem;
      if (obj.CustomControl<>nil) then
      begin
         NewRow:= Inspector.GetRowByItem(obj);
         if NewRow>=0 then
         begin
            if NewRow>0 then
               Inspector.row:= NewRow-1
            else if Inspector.RowCount>1 then
               Inspector.row:= NewRow+1;
           (Inspector as TwwDataInspector).row:= NewRow;
         end;
         Designer.SelectComponent(obj.CustomControl);
      end
  end
  else if htOnLabel in TreeView.GetHitTestInfoAt(X,Y) then
     TreeView.BeginDrag(False);
end;

procedure TInspectorPropEdit.MoveButtonClick(Sender: TObject);
var NextSibling: TTreeNode;
    Mode: TNodeAttachMode;
begin
  Mode := naInsert;
  if (TreeView.Selected = nil) then Exit;
  if (Sender as TSpeedButton).Tag < 0 then
  begin
    NextSibling := TreeView.Selected.GetNextSibling;
    if NextSibling = nil then Exit;
    NextSibling := NextSibling.GetNextSibling;
    if NextSibling = nil then
    begin
      NextSibling := TreeView.Selected.GetNextSibling;
      Mode := naAdd;
    end;
  end else NextSibling := TreeView.Selected.GetPrevSibling;
  if NextSibling = nil then Exit;
  TreeView.Items.BeginUpdate;
  TreeView.Selected.MoveTo(NextSibling, Mode);
  TreeView.Items.EndUpdate;


  if Designer<>nil then Designer.SelectComponent(Inspector);
  TObjTreeNode(TreeView.Selected).ObjItem.Index:=
     TObjTreeNode(TreeView.Selected).ObjItem.Index - (Sender as TSpeedButton).Tag;
  if Designer<>nil then Designer.SelectComponent(TObjTreeNode(TreeView.Selected).ObjItem);

  RefreshNodeText(TreeView.Selected.Parent);
  Inspector.ApplySettings; { 2/8/2000 - Repaint }

end;

procedure TInspectorPropEdit.FormCreate(Sender: TObject);
begin
  TreeView:= TObjTreeView.create(self);
  with TreeView do begin
    Left := 2;
    Top := 15;
    Width := 161;
    Height := 269;
    parent:= self; //FieldListGroupBox;
    HideSelection:= False;
    Indent := 19;
    Align := alClient;
    TabOrder := 1;
    OnDragDrop := TreeViewDragDrop;
    OnDragOver := TreeViewDragOver;
    OnMouseDown := TreeViewMouseDown;
    OnChange:= TreeViewChange;
    OnCollapsed:= TreeViewCollapsed;
    OnExpanded:= TreeViewExpanded;
    OnCustomDrawItem:= TreeViewCustomDrawItem;
    ShowLines:= False;
//    RowSelect:= True;
    visible:= true;
    ReadOnly:= True;
  end
end;

procedure TInspectorPropEdit.DeleteButtonClick(Sender: TObject);
var SelectedNode, OldNode, Node: TTreeNode;
    obj: TwwInspectorItem;
begin
   Node:= TreeView.Items.GetFirstNode;
   SelectedNode:= TreeView.Selected;
   OldNode:= nil;
   while True do begin
      if (Node<>nil) and
         ((Node as TObjTreeNode).MultiSelected or (SelectedNode=Node)) then
      begin
        obj:= TObjTreeNode(Node).ObjItem;
//        TObjTreeNode(Node).ObjItem.Free;
        TreeView.Items.Delete(Node);
        obj.Free; // 5/5/01 - Free after treeview node deleted 
        Node:= OldNode;
      end
      else begin
         OldNode:= Node;
         if Node=nil then
           Node:= TreeView.Items.GetFirstNode
         else
           Node:= Node.GetNext;
         if Node=nil then break;
      end
   end;
   RefreshNodeText(nil);
   inspector.ApplySettings;

end;

procedure TInspectorPropEdit.TreeViewChange(Sender: TObject;
  Node: TTreeNode);

  function wwGetShiftState: TShiftState;
  begin
    Result := [];
    if GetKeyState(VK_SHIFT) < 0 then Include(Result, ssShift);
    if GetKeyState(VK_CONTROL) < 0 then Include(Result, ssCtrl);
    if GetKeyState(VK_MENU) < 0 then Include(Result, ssAlt);
  end;

begin
   if SkipChange then exit;
   if [ssShift, ssCtrl] * wwGetShiftState = [] then
   begin
      (TreeView as TObjTreeView).UnselectAllNodes(nil);
      (TreeView as TObjTreeView).MultiSelectActive:= False;
      if Designer<>nil then
         Designer.SelectComponent(TObjTreeNode(TreeView.Selected).ObjItem);
   end
end;

procedure TInspectorPropEdit.Update;
begin
  if SkipUpdate then exit;

  inherited Update;
  if TreeView.Selected<>nil then begin
    TreeView.Selected.Text:= TObjTreeNode(TreeView.Selected).ObjItem.GetDisplayName;
    TObjTreeNode(TreeView.Selected).Caption:=
       TObjTreeNode(TreeView.Selected).ObjItem.Caption;
  end
end;

procedure TInspectorPropEdit.TreeViewExpanded(Sender: TObject;
  Node: TTreeNode);
begin
  TObjTreeNode(Node).ObjItem.Expanded:= True;
  if Designer<>nil then Designer.modified;
  Inspector.ApplySettings;
end;

procedure TInspectorPropEdit.TreeViewCollapsed(Sender: TObject;
  Node: TTreeNode);
begin
  TObjTreeNode(Node).ObjItem.Expanded:= False;
  if Designer<>nil then Designer.modified;
  Inspector.ApplySettings;
end;

procedure TInspectorPropEdit.Button5Click(Sender: TObject);
var currentList,selectedList: TStrings;
    i: integer;
    Node: TObjTreeNode;
    curField: TField;
begin
   if (Inspector.Datasource=nil) or
      (Inspector.Datasource=nil) then
   begin
      MessageDlg('DataInspector does not reference a dataset.', mtError, [mbok], 0);
      exit;
   end;

   selectedList:= TStringList.create;
   currentList:= TStringList.create;
   with TreeView do begin
      Node:= Items.GetFirstNode as TObjTreeNode;
      while Node<>nil do begin
         if Node.ObjItem.DataSource=Inspector.DataSource then
            currentList.Add(Node.ObjItem.DataField);
         Node:= Node.GetNext as TObjTreeNode;
      end;
   end;

   try
      if wwDlgSelectFields(Inspector.Datasource.DataSet,
                 currentList, selectedList) then
      begin
         for i:= 0 to selectedList.count-1 do begin
            Node := TObjTreeNode(TreeView.Items.AddChild(nil, SelectedList[i]));
            Node.ObjItem:= TwwInspectorItem.create(Inspector.Items);
            curField:= Inspector.DataSource.DataSet.FindField(SelectedList[i]);
            with Node.ObjItem do begin
               if curfield=nil then
                 Caption:= SelectedList[i]
               else
                 Caption:= curField.DisplayLabel;
               DataField:= SelectedList[i];
            end
         end;
         RefreshNodeText(nil);
      end
   finally
      selectedList.free;
      currentList.Free;
   end

end;

initialization
finalization
  InspectorPropEdit.Free;
  InspectorPropEdit:= nil;
end.

⌨️ 快捷键说明

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