Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Файлы


ММК ©   (2007-09-13 20:12:00) 

Уважаемые Мастера, помогите пожалуйста!!! Мне нужно загнать в один файл n число картинок, текстов, чисел и тд.
Как это сделать?

ЗЫ не ругайте токо за тупость


ММК   (2007-09-14 12:06:00) [1]

> [19] Palladin ©   (14.09.07 12:01)

Спасибо Вам!!!


Palladin   (2007-09-14 12:01:00) [2]

это я проглючил вчера... не StgCreateOleStorage, а StgCreateDocfile
говорю же.. здесь писал...


ММК   (2007-09-14 11:39:00) [3]

Ну где оно находится?


ММК   (2007-09-14 11:14:00) [4]


> Зато не молчит меню Search -> Find In Files .. (Where: Search
> in directories = True)

Ничего не находит.


Сергей М.   (2007-09-14 10:51:00) [5]


> Справка по этому поводу молчит


Зато не молчит меню Search -> Find In Files .. (Where: Search in directories = True)


ММК   (2007-09-14 10:47:00) [6]

Отредактировал код Palladin'а. Подключил ещё два требуемых компилятором юнита. Все ошибки устранил. Но единственное что Делфи не находит это - StgCreateOleStorage. Где оно ноходитсё-то? Справка по этому поводу молчит.


evvcom   (2007-09-14 09:30:00) [7]


> Сергей М. ©   (14.09.07 09:16) [13]

Если ограничиваться только информацией из [0], то можно посоветовать архиватор :)


Сергей М.   (2007-09-14 09:16:00) [8]


> Мне нужно загнать в один файл n число картинок, текстов,
>  чисел и тд.
> Как это сделать?


Например, средствами компилятора ресурсов и линкера в составе Delphi


Плохиш   (2007-09-13 22:37:00) [9]


> ММК   (13.09.07 20:35) [4]
> БД не подходит. Нужен именно такой файл. Тоесь допустим
> туда сначала
> число картинок, потом картинки. Потом длина текста, потом
> текст.
> Должна быть некая структура.

Ну вот, сам же структуру и описал :-) Только перед каждой картинкой/текстом нужно записывать размер. Осталось только реализовать :-)


Palladin   (2007-09-13 21:11:00) [10]

хм,стопудово... завтра зайду почитать ветку и подумаю "надо меньше пить"


ММК   (2007-09-13 21:08:00) [11]

Спасибо! Буду пробовать.


Palladin   (2007-09-13 21:02:00) [12]

хм... а прикольно написал... надо юнит забабахать...


Palladin   (2007-09-13 20:59:00) [13]

ну емае... и в Procedure LoadFromISFile(Const p_strISFileName,p_strInnerStmName:String;p_theStream:TStream);

нужно делать не CreateStream а OpenStream


Palladin   (2007-09-13 20:58:00) [14]

ай ай...
в Procedure GetISStream(Const p_strISFileName,p_strInnerName:String):TStream;

во первых она функция, во вторых забыл проверить существование потока и сразу делаю его Create, а нуна Open если есть :)

ну раз такие смелые запросы, пусть разбирается...


Palladin   (2007-09-13 20:56:00) [15]

хм...

Uses
ActiveX;

Procedure SaveToISFile(Const p_strISFileName,p_strInnerStmName:String;p_theStream:TStream);
Var
theStg:IStorage;
theStm:IStream;
ws:WideString;
hc:HResult;
theOStm:TOleStream;
Begin
ws:=p_strISFileName;
If Not FileExists(p_strISFileName)
 Then hc:=StgCreateOleStorage(@ws,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,theStg)
 Else hc:=StgOpenStorage(@ws,nil,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,theStg);
OleCheck(hc);
ws:=p_strInnerStmName;
OleCheck(theStg.CreateStream(@ws,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,0,theStm));
theOStm:=TOleStream.Create(theStm);
Try
 theOStm.CopyFrom(p_theStm,0);
Finally
 theOStm.Free;
End;
End;

Procedure LoadFromISFile(Const p_strISFileName,p_strInnerStmName:String;p_theStream:TStream);
Var
theStg:IStorage;
theStm:IStream;
ws:WideString;
hc:HResult;
theOStm:TOleStream;
Begin
ws:=p_strISFileName;
If Not FileExists(p_strISFileName)
 Then hc:=StgCreateOleStorage(@ws,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,theStg)
 Else hc:=StgOpenStorage(@ws,nil,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,theStg);
OleCheck(hc);
ws:=p_strInnerStmName;
OleCheck(theStg.CreateStream(@ws,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,0,theStm));
theOStm:=TOleStream.Create(theStm);
Try
 p_theStm.CopyFrom(theOStm,0);
Finally
 theOStm.Free;
End;
End;

Procedure SaveFileToIS(Const p_strISFileName,p_strInnerName,p_strSourceName:String);
Var
theFile:TFileStream;
Begin
theFile:=TFileStream.Create(p_strSourceName,fmOpenRead or fmOpenShareExlusive);
Try
  SaveToISFile(p_strISFileName,p_strInnerName,theFile);
Finally
 theFile.Free;
End;
End;

Procedure LoadFileFromIS(Const p_strISFileName,p_strInnerName,p_strDestName:String);
Var
theFile:TFileStream;
Begin
theFile:=TFileStream.Create(p_strDestName,fmCreate);
Try
  LoadFromISFile(p_strISFileName,p_strInnerName,theFile);
Finally
 theFile.Free;
End;
End;

Procedure GetISStream(Const p_strISFileName,p_strInnerName:String):TStream;
Var
theStg:IStorage;
theStm:IStream;
ws:WideString;
hc:HResult;
Begin
ws:=p_strISFileName;
If Not FileExists(p_strISFileName)
 Then hc:=StgCreateOleStorage(@ws,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,theStg)
 Else hc:=StgOpenStorage(@ws,nil,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,theStg);
OleCheck(hc);
ws:=p_strInnerStmName;
OleCheck(theStg.CreateStream(@ws,STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,0,theStm));
Result:=TOleStream.Create(theStm);
End;

Procedure SaveKartinko(Const p_strISFileName,p_strKartinkoName:String;p_theKartinko:TBitmap);
Var
theStm:TStream;
Begin
theStm:=GetISStream(p_strISFileName,p_strKartinkoName);
Try
 p_theKaritnko.SaveToStream(theStm);
Finally
 theStm.Free;
End;
End;

Procedure LoadKartinko(Const p_strISFileName,p_strKartinkoName:String;p_theKartinko:TBitmap);
Var
theStm:TStream;
Begin
theStm:=GetISStream(p_strISFileName,p_strKartinkoName);
Try
 p_theKaritnko.LoadFromStream(theStm);
Finally
 theStm.Free;
End;
End;

Procedure SaveBukovko(Const p_strISFileName,p_strBukovkoName,p_strBukovko:String);
Var
theStm:TStream;
n:Integer;
Begin
theStm:=GetISStream(p_strISFileName,p_strBukovkoName);
Try
 n:=Length(p_strBukovko);
 theStm.Write(n,SizeOf(n));
 theStm.Write(p_strBukovko[1],n);
Finally
 theStm.Free;
End;
End;

Functione LoadBukovko(Const p_strISFileName,p_strBukovkoName:String):String;
Var
theStm:TStream;
n:Integer;
Begin
theStm:=GetISStream(p_strISFileName,p_strBukovkoName);
Try
 theStm.Read(n,SizeOf(n));
 SetLength(Result,n);
 theStm.Read(Result[1],n);
Finally
 theStm.Free;
End;
End;

Procedure SaveChiselko(Const p_strISFileName,p_strChiselkoName:String;nChiselko:Integer);
Var
theStm:TStream;
n:Integer;
Begin
theStm:=GetISStream(p_strISFileName,p_strChiselkoName);
Try
 theStm.Seek(0,soFromEnd);
 theStm.Write(nChiselko,SizeOf(nChiselko));
Finally
 theStm.Free;
End;
End;

Function ReadChiselko(Const p_strISFileName,p_strChiselkoName:String;nNomerChiselka:Integer):Integer;
Var
theStm:TStream;
n:Integer;
Begin
theStm:=GetISStream(p_strISFileName,p_strChiselkoName);
Try
 theStm.Seek(nNomerChiselka*SizeOf(Result),soFromBeginning);
 theStm.Read(Result,SizeOf(Result));
Finally
 theStm.Free;
End;
End;

фух... вроде все правильно... писал здесь.. сильно не пинать....


sinus   (2007-09-13 20:47:00) [16]

а чем тебе бд не подходит ?
может подскажем что-то


ММК   (2007-09-13 20:35:00) [17]

БД не подходит. Нужен именно такой файл. Тоесь допустим туда сначала
число картинок, потом картинки. Потом длина текста, потом текст.
Должна быть некая структура.


sinus   (2007-09-13 20:31:00) [18]

загнать может у тебя и получится но как ты собираешься плавать в такой "куче"?
лучше почитай про СУБД и БД и посмотри пример из поставки делфи


ММК   (2007-09-13 20:29:00) [19]

Как раз-то и читать из него информацию в VCL компоненты(текст в RichEdit, картинки в TImage...). Можно конечно использовать обычные РТФ и БМП но тогда файлов будет много, а это не есть хорошо. То есть нужно разработать типа свой тип файла. Как сделать не знаю.


Германн   (2007-09-13 20:26:00) [20]


> Мне нужно загнать в один файл n число картинок, текстов,
>  чисел и тд.

А что предполагается делать с этим файлом в будущем?


Наверх

Титульная страница Поиск, карта сайта Написать письмо