Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #5  
Старый 22.08.2009, 22:15
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Как вариант, есть еще и это :

Doc-файлы («DocFiles», «compound file», «составной файл», «хранилища структурированной информации», «structured storage») – средство для хранения структурированной информации в виде единого файла. Структура файла построена в виде дерева по аналогии с файловой системой. При этом, эквивалентом каталога(папки) является хранилище(storage), а эквивалентом файла – поток(stream). Doc-файлы ориентированы на хранение разнородных данных (текст, видео, графика, звук и т.д.).
Этот формат используется в MS Office (Word, Excel, PowerPoint).

Примерно так (открыть файл и отобразить в TTreeView) :

Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
  Node : TTreeNode;
  stgRoot: IStorage;
begin
  OD1.FileName:=fn_1Cv7_md;
  OD1.InitialDir:=ExtractFilePath(fn_1Cv7_md);
  if OD1.Execute then begin
     fn_1Cv7_md:=OD1.FileName;
     Caption:=fn_1Cv7_md;
     if StgIsStorageFile(PWideChar(fn_1Cv7_md))=S_OK then begin
        //ShowMessage(ExtractFileName(fn_1Cv7_md)+' - это Doc-файл');
        OleCheck(StgOpenStorage(PWideChar(fn_1Cv7_md),
                                nil,
                                stgm_read or stgm_share_exclusive,
                                nil,
                                0,
                                stgRoot));
        TreeView1.Items.BeginUpdate;
        try
          TreeView1.Items.Clear;
          Node:=TreeView1.Items.Add(nil,'<Root>');
          GetNextStorage(Node,stgRoot);
          Node.Expand(true);
        finally
          TreeView1.Items.EndUpdate;
          stgRoot:=nil;
        end;
     end
     else begin
        ShowMessage(ExtractFileName(fn_1Cv7_md)+' - это не Doc-файл');
     end;
  end;
end;

procedure TForm1.GetNextStorage(pn : TTreeNode; stg : IStorage);
Var
  ESS : IEnumStatStg;
  StatStg : TStatStg;
  NodeName : string;
  cn : TTreeNode;
  ctgChild : IStorage;
  Sx : string;
begin
  OleCheck(stg.EnumElements(0,nil,0,ESS));
  while ESS.Next(1,StatStg,nil) = S_OK do
   begin
     NodeName:=StatStg.pwcsName;
     Sx:='???';
     if StatStg.dwType = STGTY_STORAGE then Sx:='STORAGE';
     if StatStg.dwType = STGTY_STREAM then Sx:='STREAM';
     if StatStg.dwType = STGTY_PROPERTY then Sx:='PROPERTY';
     if StatStg.dwType = STGTY_LOCKBYTES then Sx:='LOCKBYTES';
     cn:=TreeView1.Items.AddChild(pn,NodeName+'='+Sx+'');
     if (StatStg.dwType = STGTY_STORAGE) then begin
        OleCheck(Stg.OpenStorage(StatStg.pwcsName,
                 nil,
                 stgm_read or stgm_share_exclusive,
                 nil,
                 0,
                 ctgChild));
        GetNextStorage(cn,ctgChild);
     end;
  end;
end;
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:40.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025