Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.0.6

Озеров Валентин

Шрифт:

constructor THETreeView.Create(AOwner: TComponent);

begin

 inherited Create(AOwner);

 FSortType:= stNone;

end;

procedure THETreeView.SetItemBold(ANode: TTreeNode; Value: Boolean);

var

 Item: TTVItem; Template: Integer;

begin

 if ANode = nil then Exit;

 if Value then Template:= -1 else Template:= 0;

 with Item do begin

mask:= TVIF_STATE;

hItem:= ANode.ItemId;

stateMask:= TVIS_BOLD;

state:= stateMask and template;

 end;

 TreeView_SetItem(Handle, Item);

end;

function THETreeView.IsItemBold(ANode: TTreeNode): Boolean;

var

 Item: TTVItem;

begin

 Result:= False;

 if ANode = nil then Exit;

 with Item do begin

mask:= TVIF_STATE;

hItem:= ANode.ItemId;

if TreeView_GetItem(Handle, Item) then Result:= (state and TVIS_BOLD) <> 0;

 end;

end;

procedure THETreeView.SetSortType(Value: TSortType);

begin

 if SortType <> Value then begin

FSortType:= Value;

if ((SortType in [stData, stBoth]) and Assigned(OnCompare)) or (SortType in [stText, stBoth]) then AlphaSort;

 end;

end;

procedure THETreeView.LoadFromFile(const AFileName: string);

var

 AList: TStringList;

begin

 AList:= TStringList.Create;

 Items.BeginUpdate;

 try

AList.LoadFromFile(AFileName);

SetItemList(AList);

 finally

Items.EndUpdate;

AList.Free;

 end;

end;

procedure THETreeView.SaveToFile(const AFileName: string);

var

 AList: TStringList;

begin

 AList:= TStringList.Create;

 try

GetItemList(AList);

AList.SaveToFile(AFileName);

 finally

AList.Free;

 end;

end;

procedure THETreeView.SetItemList(AList: TStrings);

var

 ALevel, AOldLevel, i, Cnt: Integer;

 S: string;

 ANewStr: string;

 AParentNode: TTreeNode;

 TmpSort: TSortType;

 function GetBufStart(Buffer: PChar; var ALevel: Integer): PChar;

 begin

ALevel:= 0;

while Buffer^ in [' ', #9] do begin

Inc(Buffer);

Inc(ALevel);

end;

Result:= Buffer;

 end;

begin

 //Удаление
всех элементов – в обычной ситуации подошло бы Items.Clear, но уж очень медленно

 SendMessage(handle, TVM_DELETEITEM, 0, Longint(TVI_ROOT));

 AOldLevel:= 0;

 AParentNode:= nil;

 //Снятие флага сортировки

 TmpSort:= SortType;

 SortType:= stNone;

 try

for Cnt := 0 to AList.Count-1 do begin

S:= AList[Cnt];

if (length(s) = 1) and (s[1] = chr($1a)) then break;

ANewStr:= GetBufStart(PChar(S), ALevel);

if (ALevel > AOldLevel) or (AParentNode = nil) then begin

if ALevel - AOldLevel > 1 then raise Exception.Create('Неверный уровень TreeNode');

end else begin

for i:= AOldLevel downto ALevel do begin

AParentNode:= AParentNode.Parent;

if (AParentNode = nil) and (i - ALevel > 0) then raise Exception.Create('Неверный уровень TreeNode');

end;

end;

AParentNode:= Items.AddChild(AParentNode, ANewStr);

AOldLevel:= ALevel;

end;

 finally

//Возвращаем исходный флаг сортировки…

SortType:= TmpSort;

 end;

end;

procedure THETreeView.GetItemList(AList: TStrings);

var

 i, Cnt: integer;

Поделиться:
Популярные книги

Зубных дел мастер

Дроздов Анатолий Федорович
1. Зубных дел мастер
Фантастика:
научная фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Зубных дел мастер

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Возвышение Меркурия. Книга 3

Кронос Александр
3. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 3

Кодекс Охотника. Книга X

Винокуров Юрий
10. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
6.25
рейтинг книги
Кодекс Охотника. Книга X

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Опасная любовь командора

Муратова Ульяна
1. Проклятые луной
Фантастика:
фэнтези
5.00
рейтинг книги
Опасная любовь командора

Друд, или Человек в черном

Симмонс Дэн
Фантастика:
социально-философская фантастика
6.80
рейтинг книги
Друд, или Человек в черном

Волхв

Земляной Андрей Борисович
3. Волшебник
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волхв

Мастер Разума VII

Кронос Александр
7. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума VII

Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Агеева Елена А.
Документальная литература:
публицистика
5.40
рейтинг книги
Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5

Морской волк. 1-я Трилогия

Савин Владислав
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Морской волк. 1-я Трилогия

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле