cxshelltreeview.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,164 行 · 第 1/3 页

PAS
1,164
字号
    end;
    inherited DoExit;
  finally
    FIsExitProcessing := False;
  end;
end;

procedure TcxCustomShellTreeView.Loaded;
begin
  inherited Loaded;
  InnerTreeView.Loaded;
  SetScrollBarsParameters;
end;

function TcxCustomShellTreeView.NeedsScrollBars: Boolean;
begin
  Result := True;
end;

procedure TcxCustomShellTreeView.Scroll(AScrollBarKind: TScrollBarKind;
  AScrollCode: TScrollCode; var AScrollPos: Integer);
var
  AScrollInfo: TScrollInfo;
begin
  inherited Scroll(AScrollBarKind, AScrollCode, AScrollPos);
  if not Enabled then
    Exit;
  with FInnerTreeView do
    if AScrollBarKind = sbHorizontal then
    begin
      CallWindowProc(DefWndProc, Handle, WM_HSCROLL, Word(AScrollCode) +
        Word(AScrollPos) shl 16, HScrollBar.Handle);
      AScrollPos := GetScrollPos(Handle, SB_HORZ);
    end
    else
    begin
      if (AScrollCode = scTrack) and (Win32MajorVersion >= 6) then
      begin
        AScrollInfo.cbSize := SizeOf(AScrollInfo);
        AScrollInfo.fMask := SIF_POS;
        AScrollInfo.nPos := AScrollPos;
        SetScrollInfo(Handle, SB_VERT, AScrollInfo, True);
      end;
      CallWindowProc(DefWndProc, Handle, WM_VSCROLL, Word(AScrollCode) +
        Word(AScrollPos) shl 16, VScrollBar.Handle);
      AScrollPos := GetScrollPos(Handle, SB_VERT);
    end;
  SetScrollBarsParameters(True);
end;

procedure TcxCustomShellTreeView.CurrentFolderChangedHandler(Sender: TObject;
  Root: TcxCustomShellRoot);
begin
  SetScrollBarsParameters;
end;

function TcxCustomShellTreeView.GetDataBindingClass: TcxCustomDataBindingClass;
begin
  Result := TcxDataBinding;
end;

function TcxCustomShellTreeView.GetViewOptions(AForNavigation: Boolean = False): TcxShellViewOptions;
begin
  with InnerTreeView do
    begin
      Result := [];
      if Options.ShowNonFolders then
        Include(Result, svoShowFiles);
      if Options.ShowFolders then
        Include(Result, svoShowFolders);
      if AForNavigation or Options.ShowHidden then
        Include(Result, svoShowHidden);
    end;
end;

procedure TcxCustomShellTreeView.AddFolderHandler(Sender: TObject;
  AFolder: TcxShellFolder; var ACanAdd: Boolean);
begin
  if Assigned(FOnAddFolder) then
    FOnAddFolder(Self, AFolder, ACanAdd);
end;

procedure TcxCustomShellTreeView.ChangeHandler(Sender: TObject; Node: TTreeNode);
begin
  try
    if Assigned(FOnChange) then
      FOnChange(Self, Node);
  finally
    SetScrollBarsParameters;
  end;
end;

procedure TcxCustomShellTreeView.ChangingHandler(Sender: TObject; Node: TTreeNode;
  var AllowChange: Boolean);
begin
  if Assigned(FOnChanging) then
    FOnChanging(Self, Node, AllowChange);
end;

procedure TcxCustomShellTreeView.CollapsedHandler(Sender: TObject;
  Node: TTreeNode);
begin
  try
    if Assigned(FOnCollapsed) then
      FOnCollapsed(Self, Node);
  finally
    SetScrollBarsParameters;
  end;
end;

procedure TcxCustomShellTreeView.CollapsingHandler(Sender: TObject;
  Node: TTreeNode; var AllowCollapse: Boolean);
begin
  if Assigned(FOnCollapsing) then
    FOnCollapsing(Self, Node, AllowCollapse);
end;

procedure TcxCustomShellTreeView.EditedHandler(Sender: TObject;
  Node: TTreeNode; var S: string);
begin
  try
    if Assigned(FOnEdited) then
      FOnEdited(Self, Node, S);
  finally
    SetScrollBarsParameters;
  end;
end;

procedure TcxCustomShellTreeView.EditingHandler(Sender: TObject; Node: TTreeNode;
  var AllowEdit: Boolean);
begin
  if Assigned(FOnEditing) then
    FOnEditing(Self, Node, AllowEdit);
end;

procedure TcxCustomShellTreeView.ExpandedHandler(Sender: TObject;
  Node: TTreeNode);
begin
  try
    if Assigned(FOnExpanded) then
      FOnExpanded(Self, Node);
  finally
    SetScrollBarsParameters;
  end;
end;

procedure TcxCustomShellTreeView.ExpandingHandler(Sender: TObject;
  Node: TTreeNode; var AllowExpansion: Boolean);
begin
  if Assigned(FOnExpanding) then
    FOnExpanding(Self, Node, AllowExpansion);
end;

procedure TcxCustomShellTreeView.ShellChangeHandler(Sender: TObject;
  AEventID: DWORD; APIDL1, APIDL2: PItemIDList);
begin
  if Assigned(FOnShellChange) then
    FOnShellChange(Self, AEventID, APIDL1, APIDL2);
end;

function TcxCustomShellTreeView.GetAbsolutePIDL: PItemIDList;
begin
  Result := nil;
  if FInnerTreeView <> nil then
    with FInnerTreeView do
      if Selected <> nil then
        Result := GetNodeAbsolutePIDL(Selected);
end;

function TcxCustomShellTreeView.GetAutoExpand: Boolean;
begin
  Result := FInnerTreeView.AutoExpand;
end;

function TcxCustomShellTreeView.GetChangeDelay: Integer;
begin
  Result := FInnerTreeView.ChangeDelay;
end;

function TcxCustomShellTreeView.GetDragDropSettings: TcxDragDropSettings;
begin
  Result := TcxDragDropSettings(FInnerTreeView.DragDropSettings);
end;

function TcxCustomShellTreeView.GetFolder(AIndex: Integer): TcxShellFolder;
begin
  Result := FInnerTreeView.Folders[AIndex];
end;

function TcxCustomShellTreeView.GetFolderCount: Integer;
begin
  Result := FInnerTreeView.FolderCount;
end;

function TcxCustomShellTreeView.GetHideSelection: Boolean;
begin
  Result := FInnerTreeView.HideSelection;
end;

function TcxCustomShellTreeView.GetIndent: Integer;
begin
  Result := FInnerTreeView.Indent;
end;

function TcxCustomShellTreeView.GetOptions: TcxShellTreeViewOptions;
begin
  Result := TcxShellTreeViewOptions(FInnerTreeView.Options);
end;

function TcxCustomShellTreeView.GetPath: string;
var
  ATempPIDL: PItemIDList;
begin
  Result := '';
  if FInnerTreeView <> nil then
    with FInnerTreeView do
      if Selected <> nil then
      begin
        ATempPIDL := GetNodeAbsolutePIDL(Selected);
        try
          Result := GetPidlName(ATempPIDL);
        finally
          DisposePidl(ATempPIDL);
        end;
      end;
end;

function TcxCustomShellTreeView.GetRightClickSelect: Boolean;
begin
  Result := FInnerTreeView.RightClickSelect;
end;

function TcxCustomShellTreeView.GetRoot: TcxShellTreeRoot;
begin
  Result := TcxShellTreeRoot(FInnerTreeView.Root)
end;

function TcxCustomShellTreeView.GetShellListView: TcxCustomShellListView;
begin
  if FInnerTreeView.ListView is TcxInnerShellListView then
    Result := TcxInnerShellListViewAccess(FInnerTreeView.ListView).Container
  else
    Result := nil;
end;

function TcxCustomShellTreeView.GetShowButtons: Boolean;
begin
  Result := FInnerTreeView.ShowButtons;
end;

function TcxCustomShellTreeView.GetShowInfoTips: Boolean;
begin
  Result := FInnerTreeView.ShowInfoTips;
end;

function TcxCustomShellTreeView.GetShowLines: Boolean;
begin
  Result := FInnerTreeView.ShowLines;
end;

function TcxCustomShellTreeView.GetShowRoot: Boolean;
begin
  Result := FInnerTreeView.ShowRoot;
end;

function TcxCustomShellTreeView.GetStateImages: TCustomImageList;
begin
  Result := FInnerTreeView.StateImages;
end;

function TcxCustomShellTreeView.GetTreeHotTrack: Boolean;
begin
  Result := FInnerTreeView.HotTrack;
end;

procedure TcxCustomShellTreeView.SetAbsolutePIDL(Value: PItemIDList);
begin
  if (FInnerTreeView <> nil) and FInnerTreeView.HandleAllocated then
  begin
    if not CheckAbsolutePIDL(Value, Root, True) then
      Exit;
    SendMessage(FInnerTreeView.Handle, DSM_DONAVIGATE, WPARAM(Value), 0);
    FInnerTreeView.DoNavigateListView;
  end;
end;

procedure TcxCustomShellTreeView.SetAutoExpand(Value: Boolean);
begin
  FInnerTreeView.AutoExpand := Value;
end;

procedure TcxCustomShellTreeView.SetChangeDelay(Value: Integer);
begin
  FInnerTreeView.ChangeDelay := Value;
end;

procedure TcxCustomShellTreeView.SetDragDropSettings(Value: TcxDragDropSettings);
begin
  FInnerTreeView.DragDropSettings := Value;
end;

procedure TcxCustomShellTreeView.SetHideSelection(Value: Boolean);
begin
  FInnerTreeView.HideSelection := Value;
end;

procedure TcxCustomShellTreeView.SetIndent(Value: Integer);
var
  APrevIndent: Integer;
begin
  APrevIndent := FInnerTreeView.Indent;
  FInnerTreeView.Indent := Value;
  if APrevIndent <> FInnerTreeView.Indent then
    SetScrollBarsParameters;
end;

procedure TcxCustomShellTreeView.SetOptions(Value: TcxShellTreeViewOptions);
begin
  FInnerTreeView.Options.Assign(Value);
end;

procedure TcxCustomShellTreeView.SetPath(const Value: string);
var
  APIDL: PItemIDList;
begin
  if (FInnerTreeView <> nil) and FInnerTreeView.HandleAllocated and (Path <> Value) then
  begin
    APIDL := PathToAbsolutePIDL(Value, Root, GetViewOptions(True));
    if APIDL <> nil then
      try
        SendMessage(FInnerTreeView.Handle, DSM_DONAVIGATE, WPARAM(APIDL), 0);
        FInnerTreeView.DoNavigateListView;
      finally
        DisposePidl(APIDL);
      end;
  end;
end;

procedure TcxCustomShellTreeView.SetRightClickSelect(Value: Boolean);
begin
  FInnerTreeView.RightClickSelect := Value;
end;

procedure TcxCustomShellTreeView.SetRoot(Value: TcxShellTreeRoot);
begin
  FInnerTreeView.Root := Value;
end;

procedure TcxCustomShellTreeView.SetShellListView(Value: TcxCustomShellListView);
begin
  if Value = nil then
    FInnerTreeView.ListView := nil
  else
    FInnerTreeView.ListView := Value.InnerListView;
end;

procedure TcxCustomShellTreeView.SetShowButtons(Value: Boolean);
begin
  FInnerTreeView.ShowButtons := Value;
end;

procedure TcxCustomShellTreeView.SetShowInfoTips(Value: Boolean);
begin
  FInnerTreeView.ShowInfoTips := Value;
end;

procedure TcxCustomShellTreeView.SetShowLines(Value: Boolean);
begin
  FInnerTreeView.ShowLines := Value;
end;

procedure TcxCustomShellTreeView.SetShowRoot(Value: Boolean);
begin
  FInnerTreeView.ShowRoot := Value;
end;

procedure TcxCustomShellTreeView.SetStateImages(Value: TCustomImageList);
begin
  FInnerTreeView.StateImages := Value;
end;

procedure TcxCustomShellTreeView.SetTreeHotTrack(Value: Boolean);
begin
  FInnerTreeView.HotTrack := Value;
end;

end.

⌨️ 快捷键说明

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