![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Файлы
ММК © (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 число картинок, текстов,
> чисел и тд.
А что предполагается делать с этим файлом в будущем?