Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: CL | DM;

Вниз

Файлы   Найти похожие ветки 

 
ММК   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.027 c
2-1189858384
delphiForever
2007-09-15 16:13
2007.10.14
дата&время>секунды


2-1190240140
Corel
2007-09-20 02:15
2007.10.14
Message


2-1190569290
Bast
2007-09-23 21:41
2007.10.14
Копировать


15-1189725749
delphiForever
2007-09-14 03:22
2007.10.14
и все таки я ее нашел...


1-1185882922
oxffff
2007-07-31 15:55
2007.10.14
Статический вызов виртуального метода.