Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

CaptionStr:String; begin



CaptionStr:='';

if not InputQuery('Ввод имени',

'Введите заголовок элемента',CaptionStr) then exit;

TreeView1.Selected.Text:=CaptionStr; end;

Здесь снова я вызываю окно InputQuery, чтобы пользователь смог ввести новое имя для выделенного элемента. Теперь, чтобы изменить имя надо изменить свойство Text для выделенного элемента: TreeView1.Selected.Text.

Давай теперь сделаем возможность сохранения и загрузки данных в наше дерево. Для этого создай обработчик события OnClose и напишем в нём следующее:

procedure TTreeViewForm.FormClose(Sender: TObject; var Action: TCloseAction); begin TreeView1.SaveToFile(ExtractFilePath(Application.ExeName)+'tree.dat'); end;

Для сохранения дерева нужно вызвать метод SaveToFile и в качестве единственного параметра указать имя файла. В качестве имени файла можно указывать что угодно, но я предпочитаю использовать полный путь, чтобы файл случайно не создался в каком-нибудь другом месте. Для этого я использую следующую конструкцию:

ExtractFilePath(Application.ExeName)+'tree.dat'

Application.ExeName – указывает на имя запущенного файла.

ExtractFilePath – вытаскивает путь к файлу из указанного в качестве параметра пути к файлу. Получается, что вызов ExtractFilePath(Application.ExeName) вернёт путь к директории, откуда была запущена прога. Остаётся только к этому пути прибавить имя файла (у меня это 'tree.dat') и можно быть уверенным, что файл обязательно будет находиться там же, где и запускной файл.

Теперь нужно загрузить сохранённые данные. Для этого по событию OnShow напишем следующее:

procedure TTreeViewForm.FormShow(Sender: TObject);

begin if FileExists(ExtractFilePath(Application.ExeName)+'tree.dat') then TreeView1.LoadFromFile(ExtractFilePath(Application.ExeName)+'tree.dat'); end;

Здесь я сначала проверяю с помощью вызова функции FileExists существование файла. Этой функции нужно передать полное имя файла и если такой файл существует, то функция вернёт true иначе false.

Если файл существует, то можно его загрузить с помощью вызова метода LoadFromFile.

Обязательно проверяй файл на существование. Если его нет или кто-то его удалил, а ты попытаешься загрузить данные из несуществующего файла, то произойдёт ошибка.

На рисунке 11.19.3 показано окно моего примера. Уже на рисунке ты можешь заметить, что дочерние элементы пункта «Моя почта» имеют другой рисунок, а дочерние элементы «Мои документы» нет. Почему так получилось? Ведь я же всегда меняю рисунок, если это дочерний элемент? Просто после закрытия программы дерево сохраняется в файле, а после загрузки оно загружается без учёта изображений. Состояние картинок не сохраняется и об этом нам нужно заботиться самостоятельно. Но это уже отдельная история, о которой мы поговорим в другой раз.

На компакт диске, в директории \Примеры\Глава 11\TreeView ты можеш ь увидеть приме р это й программы.

11.20 Список элементов (TListView)

ледующий компонент тоже достаточно сильно распространён. Попробуй запустить «Проводник» Windows и оглянись. Слева есть дерево каталогов. Как работает такое дерево мы уже разобрались. А вот справа находиться

список файлов в выделенной директории. Этот список как раз и храниться в компоненте TListView, с которым мы сейчас и познакомимся.

- TListVew

С работой этого компонента мы так же познакомимся на практике. Для этого мы напишем простейший файловый менеджер и заодно закрепим большинство уже пройденного материала. Но всё это в следующей части этой главы, а сейчас я покажу тебе основные свойства компонента TListVew, чтобы нам легче было двигаться дальше.

У списка элементов очень много свойств отвечающих за обрамление (внешний вид рамки) компонента. Я не буду их все перечислять, потому что разных вариантов очень много, я только советую тебе сейчас остановиться, создать новый проект, бросить на форму один компонент ListView и попробуй поиграть со следующими свойствами:

1. 1. BevelEdges – здесь ты указываешь, с какой стороны должна быть оборка. По умолчанию со всех сторон стоит true.

2. 2. BevelInner – вид внутренней оборки.

3. 3. BevelOuter – вид внешней оборки.

4. 4. BevelKind – тип оборки.

5. 5. BorderStyle – стиль обрамления (плоский или трёхмерный).

Теперь остальные интересные свойства:

1. 1. Checkboxes – если здесь true, то каждый элемент списка содержит ещё и компонент CheckBox.

2. 2. ColumnClick – должны ли заголовки колонок выглядеть как кнопки и принимать сообщения от кнопок мыши.

3. 3. Columns – если здесь щёлкнуть дважды мышкой, то появиться маленький редактор колонок списка.

4. 4. FlatScrollBar – должны ли полосы прокрутки выглядеть в стиле Flat (плавающий).

5. 5. FullDrag – полное перетаскивание.

6. 6. GridLines – должны ли быть видна сетка, когда компонент выглядит в стиле vsReport.

7. 7. HotTrack – включение режима Hot, когда при наведении на элемент списка могут происходить какие-то действие.

�.8. HotTrackStyles – Это группа свойств в которой описываются действия происходящие при включённом режиме HotTrack.

�.a. htHandPoint – если равно true, то при наведении на элемент курсором мыши, курсор принимает вид руки (как в IE при наведении на ссылку).

�.b. htUnderlineCold – если равно true, то надо подчёркивать надписи на элементах даже когда не наведена вышка.

�.c. htUnderlineHot – если равно true, то надо подчёркивать надписи на элементах только когда наведена вышка на элемент.

9. IconOptions – группа свойств отвечающих за иконки элементов.

�. a. Arrangement – расположение иконки сверху или слева.

�. b. AutoArrange – автоматическое выравнивание.

�. c. WrapText – переносить надпись под иконкой, когда она не помещается в одну строку.

1. 10. Items – это объект, который хранит все элементы списка. Он очень похож на тот, что мы рассматривали в прошлой части при написании примера к дереву элементов.

2. 11. LargeImage – здесь указывается компонент TImageList, в котором должны храниться большие иконки для элементов (32х32).

3. 12. MultiSelect – есть ли возможность выделять сразу несколько элементов.

4. 13. RowSelect – должна ли выделяться вся строка, когда компонент выглядит в стиле vsReport.

5. 14. ShowColumnHeader – надо ли показывать заголовки, когда компонент выглядит в стиле vsReport.

6. 15. SmallImage – здесь указывается компонент TImageList, в котором должны храниться маленькие иконки для элементов (16х16).

�. 16. ViewStyle -стиль отображения списка. Здесь возможны варианты:

�.a. vsIcon – больше иконки.

�. b. vsSmallIcon – маленькие иконки.

�. c. vsList – список.

�. d. vsReport – отчёт.

На этом пока остановимся и перейдём к рассмотрению компонента в действии.

11.21 Простейший файловый менеджер.

десь я тебе хочу рассказать, как самому написать простейший файловый менеджер. Этим примером мы закрепим наши знания по работе с файлами и научимся работать со списком элементов.

Создай новый проект в Delphi и брось на него следующие компоненты: одну кнопку, одну строку в вода и один список элементов. Всё это расположи примерно так же, как на рисунке 11.21.1.

Рис 11.21.1

Для работы примера нужен модуль shellapi, поэтому давай сразу добавим его в раздел uses.

При рассмотрении примеров, обращай внимание на комментарии, они помогут тебе разобраться с происходящим в проге. А я буду расписывать только наиболее интересные моменты.

Эту программу мы начнём писать с процедуры FormCreate. Создай обработчик события OnCreate для формы и напиши в нём следующее:

procedure TForm1.FormCreate(Sender: TObject);

var SysImageList: uint; SFI: TSHFileInfo;

Begin

// Создаю списки маленьких и больших иконок. ListView1.LargeImages:=TImageList.Create(self); ListView1.SmallImages:=TImageList.Create(self);

// Запрашиваю большие иконки SysImageList:= SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_LARGEICON); if SysImageList <> 0 then

Begin

// Присваиваю системные иконки в ListView1 ListView1.Largeimages.Handle:= SysImageList; ListView1.Largeimages.ShareImages:= TRUE;

end; // Запрашиваю маленькие иконки SysImageList:= SHGetFileInfo('', 0, SFI, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); if SysImageList <> 0 then

begin
ListView1.Smallimages.Handle:= SysImageList;
ListView1.Smallimages.ShareImages:= TRUE;

end; end;

В первых двух строчках я создаю списки маленьких и больших иконок. Свойства LargeImages и SmallImages имеют тип TImageList, но сразу после создания компонента они равны nil. Поэтому я создаю их присваивая результат вызова TImageList.Create(self). После этого они уже проинициализированы и необходимая память выделена.

Тут можно было поступить немного другим способом – поставить на форму два компонента TImageList и просто указать их в соответствующих свойствах. В этом случае не пришлось бы ничего инициализировать, потому что компоненты стоящие на форме инициализируются автоматически. Но я решил не делать этого, а показать тебе, что объектное свойство можно сразу заставить работать без использования дополнительных компонентов.

После этого я запрашиваю у системы список больших иконок. Для этого я использую функцию SHGetFileInfo, которая возвращает информацию о файле, директории или диске. Первый параметр -путь к файлу. Второй -атрибуты. Третий -указатель на ТSHFILEINFO. Четвертый -размер ТSHFILEINFO. Последний -флаги, указывающие на тип информации запрашиваемый у системы.

Теперь о том, как выглядит функция в моём примере. Первые два параметра пустые, это означает, что нам нужны глобальные данные, а не информация о конкретном файле. Если указать здесь реальные значения файла, то мы получим информацию о нём, а если указать нулевые значения, то мы получим системную информацию.

В качестве флагов я указываю SHGFI_SYSICONINDEX и SHGFI_LARGEICON. SHGFI_SYSICONINDEX означает, что я запрашиваю указатель на системный список иконок (ImageList). Второй флаг говорит, что мне нужны большие иконки.

При втором вызове этой функции (чуть ниже в коде) я запрашиваю маленькие иконки (SHGFI_SMALLICON). Функция возвращает мне указатель на соответствующий системе SysImageList, который я в последствии присваиваю в ListView1.LargeImages.Handle. После этого присваивания ListView1.LargeImages содержит все системные иконки размера 32х32.

Системный список иконок (ImageList) содержит все иконки, установленные в системе и ассоциированные с разными типами файлов. Эти иконки ты можешь видеть в Windows Explorer у вайлов doc, txt, ini, zip и др.

Теперь создадим обработчик события OnShow. В ней я вызываю другую процедуру AddFile, которая считывает все файлы из текущей директории.

procedure TForm1.FormShow(Sender: TObject);

begin

AddFile(Edit1.Text+'*.*',faAnyFile)

end;

Процедура AddFile объявлена в разделе private нашей формы Form1 следующим образом:





Дата публикования: 2014-11-04; Прочитано: 496 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...