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

📄 choosefolder_frm.pas

📁 自己写的一个 RSS 阅读器
💻 PAS
字号:
unit ChooseFolder_Frm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,cxtl, ImgList;

type
  TFmChooseFolder = class(TForm)
    Label1: TLabel;
    TreeView1: TTreeView;
    BtnOK: TButton;
    BtnCannel: TButton;
    Button3: TButton;
    ImageList1: TImageList;
    procedure BtnCannelClick(Sender: TObject);
    procedure BtnOKClick(Sender: TObject);
    procedure TreeView1Collapsed(Sender: TObject; Node: TTreeNode);
    procedure TreeView1Expanded(Sender: TObject; Node: TTreeNode);
    procedure Button3Click(Sender: TObject);
    procedure TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
      Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
      var PaintImages, DefaultDraw: Boolean);
  private
    ResultVaule:Boolean;
    MainRoot,CParentNode,CurNode:TcxTreeListNode;
    procedure Show(Sender:TObject);
    procedure Show2(Sender:TObject);
    procedure Show3(Sender:TObject);
    procedure LoadFromTree(snode:TcxTreeListNode;node:TTreeNode);
    procedure LoadFromTree2(snode:TcxTreeListNode;node:TTreeNode);
    procedure LoadFromTree3(snode:TcxTreeListNode;node:TTreeNode);
    procedure TreeViewChange2(Sender: TObject;
  Node: TTreeNode);
    procedure TreeViewChange3(Sender: TObject;
  Node: TTreeNode);
    { Private declarations }
  public
    ResultNode:TcxTreeListNode;
    { Public declarations }
  end;

var
  FmChooseFolder: TFmChooseFolder;
function ExecChooseFolder(RootNode,CurrentNode:TcxTreeListNode):Boolean;
function ExecChooseFolder2:Boolean;
function ExecChooseFav:Boolean;
implementation

{$R *.dfm}

uses uMain,uFeed,newFolder_Frm,uFavorite;

function ExecChooseFolder(RootNode,CurrentNode:TcxTreeListNode):Boolean;
begin
  with FmChooseFolder do
  begin
   OnShow := Show;
   Button3.Visible := True ;
   TreeView1.OnChange :=TreeViewChange2;
   MainRoot := RootNode;
   CParentNode := CurrentNode.Parent;
   CurNode := CurrentNode;
   ShowModal;
  end;    // with
  Result:=FmChooseFolder.ResultVaule;
end;

function ExecChooseFolder2:Boolean;
begin
  with FmChooseFolder do
    begin
      OnShow := Show2;
      Button3.Visible := True ;
      TreeView1.OnChange :=TreeViewChange2;
      ShowModal;
    end;    // with
  Result:=FmChooseFolder.ResultVaule;
end;

function ExecChooseFav:Boolean;
begin
  with FmChooseFolder do
    begin
      OnShow := Show3;
      Button3.Visible := False ;
      TreeView1.OnChange :=TreeViewChange3;
      ShowModal;
    end;    // with
  Result:=FmChooseFolder.ResultVaule;
end;

procedure TFmChooseFolder.LoadFromTree(snode:TcxTreeListNode;node:TTreeNode);
var i:Integer;
  cnode:TTreeNode;
begin
  for  i:= 0 to snode.Count - 1 do    // Iterate
  if (TFeedItem(snode.Items[i].Data).Outline.Type_='folder')and (snode.Items[i]<>CurNode) then
  begin
    cnode := TreeView1.Items.AddChildObject(node,snode.Items[i].Texts[0],snode.Items[i]);
    if snode.Items[i]=CParentNode then
    begin
      cnode.ImageIndex :=2;
      cnode.SelectedIndex := 2;
    end;

    if snode.HasChildren then
      LoadFromTree(snode.Items[i],cnode);
  end;    // for
end;

procedure TFmChooseFolder.LoadFromTree2(snode:TcxTreeListNode;node:TTreeNode);
var i:Integer;
  cnode:TTreeNode;
begin
  for  i:= 0 to snode.Count - 1 do    // Iterate
  if (TFeedItem(snode.Items[i].Data).Outline.Type_='folder')then
  begin
    cnode := TreeView1.Items.AddChildObject(node,snode.Items[i].Texts[0],snode.Items[i]);

    if snode.HasChildren then
      LoadFromTree2(snode.Items[i],cnode);
  end;    // for
end;

procedure TFmChooseFolder.LoadFromTree3(snode:TcxTreeListNode;node:TTreeNode);
var i:Integer;
  cnode:TTreeNode;
begin
  for  i:= 0 to snode.Count - 1 do
  begin
    cnode := TreeView1.Items.AddChildObject(node,snode.Items[i].Texts[0],snode.Items[i]);
    if TFavItem(snode.Items[i].Data).Outline.Type_<>'folder' then
    begin
      cnode.ImageIndex :=6;
      cnode.SelectedIndex := 6;
    end
    else
    begin
      cnode.ImageIndex :=4;
      cnode.SelectedIndex := 5;
    end;
  if snode.HasChildren then
    LoadFromTree3(snode.Items[i],cnode);
  end;
end;

procedure TFmChooseFolder.Show(Sender:TObject);
var i:Integer;
  snode:TcxTreeListNode;
  root,cnode:TTreeNode;
begin
  TreeView1.Items.Clear;
  ResultVaule:=False;
  snode := MainRoot;
  root:=TreeView1.Items.AddObject(nil,snode.Texts[0],snode);
  if CParentNode.Level=0 then
  begin
    root.ImageIndex :=2;
    root.SelectedIndex :=2;
  end;

  for  i:= 0 to snode.Count - 1 do    // Iterate
  begin
    if (TFeedItem(snode.Items[i].Data).Outline.Type_='folder') and (snode.Items[i]<>CurNode)then
    begin
      cnode := TreeView1.Items.AddChildObject(root,snode.Items[i].Texts[0],snode.Items[i]);
      if snode.Items[i]=CParentNode then
      begin
        cnode.ImageIndex :=2;
        cnode.SelectedIndex := 2;
      end;
      if snode.HasChildren then
        LoadFromTree(snode.Items[i],cnode);
    end;
  end;    // for
  root.Expand(false);
end;

procedure TFmChooseFolder.Show2(Sender: TObject);
var i:Integer;
  snode:TcxTreeListNode;
  root,cnode:TTreeNode;
begin
  TreeView1.Items.Clear;
  ResultVaule:=False;
  snode := MainWindow.ChannelNode;
  root:=TreeView1.Items.AddObject(nil,snode.Texts[0],snode);
    
  for  i:= 0 to snode.Count - 1 do    // Iterate
  begin
    if (TFeedItem(snode.Items[i].Data).Outline.Type_='folder') then
    begin
      cnode := TreeView1.Items.AddChildObject(root,snode.Items[i].Texts[0],snode.Items[i]);
      if snode.HasChildren then
        LoadFromTree2(snode.Items[i],cnode);
    end;
  end;    // for
  root.Expand(false);
end;

procedure TFmChooseFolder.Show3(Sender: TObject);
var i:Integer;
  snode:TcxTreeListNode;
  root,cnode:TTreeNode;
begin
  TreeView1.Items.Clear;
  ResultVaule:=False;
  snode := MainWindow.FavoritesNode;
  root:=TreeView1.Items.AddObject(nil,snode.Texts[0],snode);
    
  for  i:= 0 to snode.Count - 1 do    // Iterate
  begin
    cnode := TreeView1.Items.AddChildObject(root,snode.Items[i].Texts[0],snode.Items[i]);
    if TFavItem(snode.Items[i].Data).Outline.Type_<>'folder' then
    begin
      cnode.ImageIndex :=6;
      cnode.SelectedIndex := 6;
    end
    else
    begin
      cnode.ImageIndex :=4;
      cnode.SelectedIndex := 4;
    end;
    if snode.HasChildren then
      LoadFromTree3(snode.Items[i],cnode);
  end;    // for
  root.Expand(false);
end;

procedure TFmChooseFolder.BtnCannelClick(Sender: TObject);
begin
  ResultVaule:=False;
  ResultNode := nil;
  Close;
end;

procedure TFmChooseFolder.BtnOKClick(Sender: TObject);
begin
  ResultVaule:=True;
  ResultNode := TcxTreeListNode(TreeView1.Selected.Data);
  Close;
end;

procedure TFmChooseFolder.TreeView1Collapsed(Sender: TObject;
  Node: TTreeNode);
begin
  Node.ImageIndex:=Node.ImageIndex -1;
  Node.SelectedIndex:=Node.SelectedIndex -1;

end;

procedure TFmChooseFolder.TreeView1Expanded(Sender: TObject;
  Node: TTreeNode);
begin
  Node.ImageIndex:=Node.ImageIndex + 1;
  Node.SelectedIndex:=Node.SelectedIndex + 1;

end;

procedure TFmChooseFolder.TreeViewChange2(Sender: TObject;
  Node: TTreeNode);
begin
  if Node=nil then
    Exit;
  if Node.ImageIndex in [2,3] then
    BtnOK.Enabled:=False
  else
    BtnOK.Enabled:=True;
end;

procedure TFmChooseFolder.TreeViewChange3(Sender: TObject;
  Node: TTreeNode);
begin
  if Node=nil then
    Exit;

  BtnOK.Enabled := Node.ImageIndex = 6;
end;

procedure TFmChooseFolder.Button3Click(Sender: TObject);
var
  Text:string;
  NewNode:TcxTreeListNode;
  NewTreeViewNode:TTreeNode;
begin
  if fmNewFolder.Execute('New folder','Type the new folder name:','New Folder') then
  begin
    Text := fmNewFolder.FolderName;
    NewNode:=MainWindow.NewFolder(TcxTreeListNode(TreeView1.Selected.Data),Text);
    NewTreeViewNode:=TreeView1.Items.AddChildObject(TreeView1.Selected,Text,NewNode);
    NewTreeViewNode.Selected := True;
  end;
end;

procedure TFmChooseFolder.TreeView1AdvancedCustomDrawItem(
  Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
  Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean);
begin
  if Node.Selected then
  begin
    Sender.Canvas.Brush.Color := clHighlight;
    Sender.Canvas.Font.Color := clHighlightText;
  end;
end;

end.

⌨️ 快捷键说明

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