Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.24;
Скачать: CL | DM;

Вниз

Помогите составить алгоритм!   Найти похожие ветки 

 
adminwik   (2010-08-04 09:43) [0]

Здравствуйте! Вопрос на счет компонента treeview!
Создал дерево каталогов с графическим изображением папок и файлов.
есть изображение двух видов папок(пустая(0), непустая(1)) в imageliste.

как составить алгоритм дерева каталогов, чтоб если папка была пустой: imageindex=7, а если непустая то imageindex=8.



unit Tf;

interface

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

type
 TForm1 = class(TForm)
   TreeView1: TTreeView;
   procedure TreeView1Expanding(Sender: TObject; Node: TTreeNode;
     var AllowExpansion: Boolean);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
{$R FileCtrl}

procedure NextLevel(ParentNode: TTreeNode);
function DirectoryName(name: string): boolean;
 begin
  result:=(name<>".") and (name<>"..");
 end;
var
sr, srChild: TSearchRec;
node: TTreeNode;
path: string;
begin
node:=ParentNode;
path:="";
repeat
 path:=node.Text+"\"+path;
 node:=node.Parent;
until node=nil;
if FindFirst(path+"*.*", faDirectory, sr)=0 then
 begin
  repeat
   if (sr.Attr and faDirectory <> 0) and DirectoryName(sr.Name)
    then
     begin
      node:=Form1.TreeView1.Items.AddChild(ParentNode, sr.Name);
      node.ImageIndex:=0;
      node.SelectedIndex:=1;
      node.HasChildren:=false;
      if FindFirst(path+sr.Name+"\*.*", faDirectory, srChild)=0
       then
        begin
         repeat
          if (srChild.Attr and faDirectory<>0)
                            and DirectoryName(srChild.Name)
          then node.HasChildren := true;
         until (FindNext(srChild) <> 0) or node.HasChildren;
       end;
      FindClose(srChild);
     end;
  until FindNext(sr) <> 0;
 end
else ParentNode.HasChildren:=false;
FindClose(sr);
end;

procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
 var AllowExpansion: Boolean);
begin
TreeView1.Items.BeginUpdate;
Node.DeleteChildren;
NextLevel(Node);
TreeView1.Items.EndUpdate;
end;

procedure TForm1.FormCreate(Sender: TObject);
const
IconNames: array [0..6] of string = ("CLOSEDFOLDER", "OPENFOLDER",
   "FLOPPY", "HARD", "NETWORK", "CDROM", "RAM");
var
c: char;
s: string;
Node: TTreeNode;
DriveType: integer;
bm, mask: TBitmap;
i: integer;
begin
TreeView1.Items.BeginUpdate;
TreeView1.Images:=TImageList.CreateSize(16, 16);
bm:=TBitmap.Create;
mask:=TBitmap.Create;
for i:=low(IconNames) to high(IconNames) do
 begin
  bm.Handle:=LoadBitmap(HInstance, PChar(IconNames[i]));
  bm.Width:=16;
  bm.Height:=16;
  mask.Assign(bm);
  mask.Mask(clBlue);
  TreeView1.Images.Add(bm, mask);
 end;
for c:="A" to "Z" do
 begin
  s:=c+":";
  DriveType:=GetDriveType(PChar(s));
  if DriveType=1 then continue;
  node:=Form1.TreeView1.Items.AddChild(nil, s);
  case DriveType of
   DRIVE_REMOVABLE: node.ImageIndex:=2;
   DRIVE_FIXED: node.ImageIndex:=3;
   DRIVE_REMOTE: node.ImageIndex:=4;
   DRIVE_CDROM: node.ImageIndex:=5;
   else node.ImageIndex:=6;
  end;
  node.SelectedIndex:=node.ImageIndex;
  node.HasChildren:=true;
 end;
TreeView1.Items.EndUpdate;
end;

end.


 
12 ©   (2010-08-04 09:47) [1]


> как составить алгоритм дерева каталогов, чтоб если папка
> была пустой: imageindex=7

if Node.HasChildren them node.ImageIndex:=7;



Страницы: 1 вся ветка

Текущий архив: 2010.10.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.008 c
6-1228000045
Pall
2008-11-30 02:07
2010.10.24
tcp сервер


15-1279609592
abun
2010-07-20 11:06
2010.10.24
Кто-нибудь работал из Delphi с Autocad?


2-1280872599
Германн
2010-08-04 01:56
2010.10.24
Fast Report. редактирование


15-1279632976
Galera
2010-07-20 17:36
2010.10.24
NT AUTHORITY SYSTEM перегрузит ваш компьютер


2-1280816013
harsik
2010-08-03 10:13
2010.10.24
При пустом значении для поля вида Lookup