Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.51 MB
Время: 0.076 c
2-1190221258
Jimmy
2007-09-19 21:00
2007.10.14
Имплонтация мультимедийного таймера в свой компонент


3-1181129119
Megabyte
2007-06-06 15:25
2007.10.14
Передача строки кода в качестве параметра для ХП


15-1189701129
vasIZmax
2007-09-13 20:32
2007.10.14
DMClient


2-1189697851
Ezorcist
2007-09-13 19:37
2007.10.14
Проверить является ли строка числом?


3-1181030273
alex_***
2007-06-05 11:57
2007.10.14
Как на оракле будет выглядеть этот запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский