Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
ВнизФайлы Найти похожие ветки
← →
ММК (2007-09-13 20:12) [0]Уважаемые Мастера, помогите пожалуйста!!! Мне нужно загнать в один файл n число картинок, текстов, чисел и тд.
Как это сделать?
ЗЫ не ругайте токо за тупость
← →
Германн © (2007-09-13 20:26) [1]
> Мне нужно загнать в один файл n число картинок, текстов,
> чисел и тд.
А что предполагается делать с этим файлом в будущем?
← →
ММК (2007-09-13 20:29) [2]Как раз-то и читать из него информацию в VCL компоненты(текст в RichEdit, картинки в TImage...). Можно конечно использовать обычные РТФ и БМП но тогда файлов будет много, а это не есть хорошо. То есть нужно разработать типа свой тип файла. Как сделать не знаю.
← →
sinus © (2007-09-13 20:31) [3]загнать может у тебя и получится но как ты собираешься плавать в такой "куче"?
лучше почитай про СУБД и БД и посмотри пример из поставки делфи
← →
ММК (2007-09-13 20:35) [4]БД не подходит. Нужен именно такой файл. Тоесь допустим туда сначала
число картинок, потом картинки. Потом длина текста, потом текст.
Должна быть некая структура.
← →
sinus © (2007-09-13 20:47) [5]а чем тебе бд не подходит ?
может подскажем что-то
← →
Palladin © (2007-09-13 20:56) [6]хм...
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;
фух... вроде все правильно... писал здесь.. сильно не пинать....
← →
Palladin © (2007-09-13 20:58) [7]ай ай...
в Procedure GetISStream(Const p_strISFileName,p_strInnerName:String):TStream;
во первых она функция, во вторых забыл проверить существование потока и сразу делаю его Create, а нуна Open если есть :)
ну раз такие смелые запросы, пусть разбирается...
← →
Palladin © (2007-09-13 20:59) [8]ну емае... и в Procedure LoadFromISFile(Const p_strISFileName,p_strInnerStmName:String;p_theStream:TStream);
нужно делать не CreateStream а OpenStream
← →
Palladin © (2007-09-13 21:02) [9]хм... а прикольно написал... надо юнит забабахать...
← →
ММК (2007-09-13 21:08) [10]Спасибо! Буду пробовать.
← →
Palladin © (2007-09-13 21:11) [11]хм,стопудово... завтра зайду почитать ветку и подумаю "надо меньше пить"
← →
Плохиш © (2007-09-13 22:37) [12]
> ММК (13.09.07 20:35) [4]
> БД не подходит. Нужен именно такой файл. Тоесь допустим
> туда сначала
> число картинок, потом картинки. Потом длина текста, потом
> текст.
> Должна быть некая структура.
Ну вот, сам же структуру и описал :-) Только перед каждой картинкой/текстом нужно записывать размер. Осталось только реализовать :-)
← →
Сергей М. © (2007-09-14 09:16) [13]
> Мне нужно загнать в один файл n число картинок, текстов,
> чисел и тд.
> Как это сделать?
Например, средствами компилятора ресурсов и линкера в составе Delphi
← →
evvcom © (2007-09-14 09:30) [14]
> Сергей М. © (14.09.07 09:16) [13]
Если ограничиваться только информацией из [0], то можно посоветовать архиватор :)
← →
ММК (2007-09-14 10:47) [15]Отредактировал код Palladin"а. Подключил ещё два требуемых компилятором юнита. Все ошибки устранил. Но единственное что Делфи не находит это - StgCreateOleStorage. Где оно ноходитсё-то? Справка по этому поводу молчит.
← →
Сергей М. © (2007-09-14 10:51) [16]
> Справка по этому поводу молчит
Зато не молчит меню Search -> Find In Files .. (Where: Search in directories = True)
← →
ММК © (2007-09-14 11:14) [17]
> Зато не молчит меню Search -> Find In Files .. (Where: Search
> in directories = True)
Ничего не находит.
← →
ММК © (2007-09-14 11:39) [18]Ну где оно находится?
← →
Palladin © (2007-09-14 12:01) [19]это я проглючил вчера... не StgCreateOleStorage, а StgCreateDocfile
говорю же.. здесь писал...
← →
ММК © (2007-09-14 12:06) [20]> [19] Palladin © (14.09.07 12:01)
Спасибо Вам!!!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c