Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

ExCode.ru - программирование на высоком уровне - выпуск 18


Информационный Канал Subscribe.Ru

ExCode.ru - программирование на высоком уровне
Выпуск №18 ( 2005.11.26 )
Здравствуйте, уважаемые подписчики!

Спешу сообщить вам приятную новость. С 1 по 31 декабря этого года на сайте ExCode.ru пройдет лотерея-конкурс. В которой будут разыгрываться 6 DVD дисков Все для программиста 1 и Все для программиста 2. Для того чтобы участвовать в конкурсе вам достаточно зарегистрироваться на сайте, и оставить хотя бы один комментарий в статьях или в опросах (чем больше комментариев вы оставите, тем больше ваши шансы на выигрыш). 31 декабря случайным образом будут отобраны 3 победителя, которые и получат по 2 DVD диска каждый. Подробные правила конкурса будут опубликованны на сайте 1-ого декабря.

Если у вас возникли какие-либо вопросы, то не стесняйтесь, пишите мне, с удовольствием всем отвечу.

Вы также можете приобрести эти и многие другие диски прямо сейчас в нашем магазине.


Новости копьютерного мира:
2005-11-19    Личную жизнь россиян защитит спецорган
Данные личного характера о россиянах можно будет собирать и обрабатывать только с их согласия, пишет в пятницу издание "Газета", причем интересоваться сведениями о национальности, религиозных убеждениях, сексуальных наклонностях или судимостях будет запрещено. Такие положения содержатся в правительственном законопроекте "О персональных данных", который поступил на днях в Госдуму.

2005-11-19    На информационном саммите в Тунисе представили работающий заводной компьютер
На проходящем в Тунисе саммите ООН по информационному сообществу WSIS в четверг был представлен прототип портативного "компьютера для бедных" ценой в 100 долларов, работающего от заведенной пружины. Работа над созданием такого компьютера с очень низким энергопотреблением ведется сейчас специалистами Массачусетского технологического института по главе с известным ученым-кибернетиком Николасом Негропонте (Nicholas Negroponte).

2005-11-24    AIM добавляет ботов к контакт-листу пользователей
Сервис мгновенных сообщений от AOL, AIM , недавно "порадовал" пользователей автоматическим добавлением к их контакт-листам набора ботов.

2005-11-24    Google Gmail закрыла критическую уязвимость
Почтовый сервис Gmail компании Google "залатал" уязвимость, теоретически позволявшую потенциальным злоумышленникам красть аккаунты, читать письма и рассылать спам с практически любого адреса, зарегистрированного на сервисе.

2005-11-22    ПК за $100 будет укомплектован ОС Linux
Лаборатория MIT Media Lab, разрабатывающая портативный компьютер "гуманитарной помощи", ориентированный на распространение среди учащихся развивающихся стран, отклонила предложение Apple предоставить свою операционную систему MacOS для этого проекта.

2005-11-22    Bluetooth-наушники маскируются под авторучку
Оригинальную концепцию хранения Bluetooth-наушников разработали дизайнеры компании Movon. Представленная ими модель наушников с одной стороны полностью сохраняет функциональность, с другой, при отсутствии необходимости использовать их может быть легко упрятана в карман. В сложенном виде наушники, выглядывающие из кармана, вполне сойдут за обыкновенную авторучку.

2005-11-24    Transcend представила 80-скоростной flash-чип стандарта miniSD
Тайваньская компания Transcend представила 80-скоростной flash-чип стандарта miniSD, емкость которого достигает 1 Гб.

2005-11-24    Еще один домен на миллион долларов
Компания Afternic сообщила об успешной продаже доменного имени Fish.com, обошедшегося неназванному покупателю в $1 млн.

2005-11-22    Paint.NET - бесплатный PhotoShop для Windows
Разработчики Paint.NET v2.5 пока что выпустили четвертую бета-версию этого графического редактора, который является бесплатной заменой встроенному редактору Paint в ОС Windows.

2005-11-22    Bluetooth-наушники маскируются под авторучку
Оригинальную концепцию хранения Bluetooth-наушников разработали дизайнеры компании Movon. Представленная ими модель наушников с одной стороны полностью сохраняет функциональность, с другой, при отсутствии необходимости использовать их может быть легко упрятана в карман. В сложенном виде наушники, выглядывающие из кармана, вполне сойдут за обыкновенную авторучку.

Статья номера:

Работа с TreeView - создание дерева каталогов


Источник: http://decoding.narod.ru/practic/treeview/treeview.html

Сегодня нам предстоит знакомство с одним очень интересным компонентом Delphi - TreeView. TreeView служит для показа ветвящихся иерархических структур, например - файловой структуры диска. TreeView содержит основные узлы, каждый из которых может содержать пиктограмму, текст и произвольный объект, и в свою очередь может иметь собственный список подузлов.

Для ввода списка в режиме прогона программы можно использовать свойство Item типа TTreeNodes, открывающее индексированный доступ ко всем узлам списка. Ниже приведен простой пример на использование этого свойства.


procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
with TreeView1 do
begin
// Добавляем корневой узел
Items.Add( nil, 'Корень' );
// Добавляем 10 вложенных узлов
for i := 1 to 10 do
Items.AddChild( Items[i-1], IntToStr( i ) );
end;
end;


Рассмотрим некоторые полезные свойства этого компонента:
TreeView1.Items.BeginUpdate - блокирует обновление экрана до тех пор, пока не будет выполнен метод EndUpdate. Используется при одновременной вставке нескольких элементов списка для предотвращения мерцания экрана.
TreeView1.Items.EndUpdate - отменяет действие метода BeginUpdate.
TreeView1.FullExpand - показывает все узлы дерева иерархии.
TreeView1.FullCollapse - прячет все узлы, кроме узлов самого верхнего уровня иерархии.
Вернемся к дереву каталогов. Первое, что мы сделаем при запуске программы, выведем в TreeView список всех дисков, имеющихся на компьютере. На этом этапе мы не станем проверять наличие каталогов на дисках, так как такая проверка на дисководе займет много времени. Проверять наличие каталогов будем в момент раскрытия узла. В свою очередь, в найденный каталогах мы попытаемся найти хоть одну папку. От результата поиска зависит, появится в данном узле знак "+", говорящий о наличии подкаталогов, или нет. Иконки для TreeView будем брать из файла FileCtrl.res, находящемся в каталоге "Delphi6\lib".


implementation

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

procedure TForm1.FormCreate(Sender: TObject);
const
IconNames: array [0..6] of string = ( 'CLOSEDFOLDER',
'OPENFOLDER',
'FLOPPY',
'HARD',
'NETWORK',
'CDROM',
'RAM' );
var
node: TTreeNode;
DriveType: integer;
bm, mask: TBitmap;
i: integer;
begin
// Запрещаем обновление TreeView
TreeView1.Items.BeginUpdate;
// Создаем список иконок
TreeView1.Images := TImageList.CreateSize( 16, 16 );
bm := TBitmap.Create;
mask := TBitmap.Create;
for i := 0 to 6 do
begin
bm.Handle := LoadBitmap( HInstance, PChar( IconNames ) );
bm.Width := 16;
bm.Height := 16;
mask.Assign( bm );
mask.Mask( clBlue );
TreeView1.Images.Add( bm, mask );
end;
bm.Free;
mask.Free;
// Находим диски и выводим их в TreeView
for i := 0 to 25 do
begin
DriveType := GetDriveType( PChar( Chr( i + 65 ) + ':\' ) );
if DriveType = 1 then continue;
node := Form1.TreeView1.Items.AddChild( nil, Chr( i+65 ) + ':' );
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;
// Обновляем TreeView
TreeView1.Items.EndUpdate;
end;


При раскрытии узла возникает событие onExpanding, которое мы и будем обрабатывать. Такой подход лучше, чем загружать всю структуру каталогов сразу. Это связано с тем, что во время работы программы пользователь может изменить структуру каталогов, и чтобы программа адекватно реагировала на подобные изменения, нужно производить поиск каталогов следующего уровня при каждом раскрытии узла.


procedure NextLevel(ParentNode: TTreeNode);
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.Name <> '.' ) and ( sr.Name <> '..' ) then
if ( sr.Attr and faDirectory ) = faDirectory then
begin
// Добавляем найденную папку в TreeView
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.Name <> '.' ) and ( srChild.Name <> '..' ) then
if ( srChild.Attr and faDirectory ) = faDirectory 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.Button1Click(Sender: TObject);
begin
with TreeView1 do
begin
Items.BeginUpdate;
FullExpand;
Items.EndUpdate;
end;
end;


Закрыть его вновь тоже не составит проблемы.


procedure TForm1.Button2Click(Sender: TObject);
begin
with TreeView1 do
begin
Items.BeginUpdate;
FullCollapse;
Items.EndUpdate;
end;
end;


Подведем итог. Задача построения структуры каталогов в виде дерева с использованием TreeView оказалась не сложной. Разберитесь получше с этим примером, и многие вопросы, связанные с использованием TreeView исчезнут. Удачи.
Послесловие:

Нам очень важно знать ваше мнение о нашей работе, если не трудно напишите нам, что вам нравится и что вам не нравится. Mail: ledworm@excode.ru

Ведущий рассылки: LedWorm
ExCode.ru 2005

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.excode
Архив рассылки
Отписаться
Вспомнить пароль

В избранное