Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];

Вниз

string+Image=ОДИН файл   Найти похожие ветки 

 
Clift   (2003-12-30 01:41) [0]

Упрощенно задача в следующем:
На форме два Едита и два Имадже;
в первом Едите "Первое фото"
во втором "Второе фото"
-
в первом Имедже "C:\foto1.bmp"
во втором "C:\foto2.bmp"
-
При клике на "Сохранить" всё это добро нужно сохранить в ОДИН файл!
Нужно следующее:
Например файлы *.Smf с помощью регистра преклепленны на открытие с помощью Project.exe если всё предыдущее добро было сохраннено в File.smf то при его открытии на форме появилось два изображения(в Имадже) и два коментария(в Едит) к ним. Основное заключается в том чтобы File.smf был независим от наличия на диске C:\foto1.bmp и C:\foto2.bmp.
Примечание:
Неиспользование BD
-
Примерно также работает Word то есть можно не только набирать текст НО и вставлять различные картинки но создаётся лишь ОДИН "document1.doc"
ЗЫ
Действительно необходимо решение, поэтому буду рад всему что касается вопроса: коментарии, статьи, ссылки, советы.
Чесно, я не "гуру" в программировании поэтому буду признателен если меня направят: с какими методами(обьектами) стоит "познакомится по ближе"
ЗЫ2
За пивом я подумал о смысле жизни и решил что это вполне решимая задача если знать как в ОДНОМ файле сохранить несколько изображений. Но как это зделать-незнаю


 
_none_   (2003-12-30 01:56) [1]

существует замечательная технология от microsoft: структурированное хранилище. при использовании этой технологии строятся все офисные документы (xls, doc, mdb), также всякие корелы и др.
Имеется возможность записи в хранилище потока данных любого формата.
советую почитать в msdn.
keywords: structured storage istream istorage StgOpenStorage
ps.
если нужен код - спрашивай


 
Clift   (2003-12-30 02:01) [2]

Код нужен!
Но лишь для ознакомления( КАК? ГДЕ? КОГДА?)
Нехочу просто использовать чужие решения(компоненты) хочется понять!


 
_none_   (2003-12-30 02:08) [3]

сохранение (tmemo) mText в хранилище (аналогично сохраняются картинки)

uses ..., AxCtrls;

var
Hr : HResult;
Stream : IStream;
OleStream : TOleStream;
RootStorage : IStorage;
begin
StgCreateDocFile("c:\Temp\MyDocFile.ole",
STGM_CREATE or STGM_READWRITE or
STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
0, RootStorage );

RootStorage.CreateStream( "Text",
STGM_CREATE or STGM_READWRITE or
STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
0, 0, Stream );

OleStream := TOleStream.Create( Stream );

mText.Lines.SaveToStream( OleStream );

OleStream.Free;


 
_none_   (2003-12-30 02:13) [4]

//а чтение - как-то так:

var hr: HRESULT;
_Storage: IStorage;
_Enum: IEnumStatStg;
_Stream: IStream;
_StatStg: TStatStg;
_PFileName: array[0..255] of WideChar;
_OleStream: TOleStream;
_OutStr: Widestring;
begin

StringToWideChar(__STGFileName, @_PFileName, 256);
hr := StgOpenStorage(_PFileName, nil, STGM_READ or STGM_SHARE_EXCLUSIVE, nil, 0, _Storage);
if FAILED(hr) then
Exit;
//пытаюсь получить список всех элементов хранилища
_Storage.EnumElements(0, Nil, 0, _Enum); //Get enumerator
if _Enum = nil then
Exit; //нет оглавления
_ItemsList := TStringList.Create;
while True do
begin
//следующий элемент
if _Enum.Next(1, _StatStg, nil) <> S_OK Then
Break;

if _StatStg.dwType = STGTY_STREAM then
begin
if AnsiUpperCase(__HandleName) = AnsiUpperCase(WideCharToString(_StatStg.pwcsName)) then
begin
hr := _Storage.OpenStream(PWideChar(StringToWideStringEx(__HandleName, 1251)), nil, STGM_READ or STGM_SHARE_EXCLUSIVE, 0, _Stream);
if FAILED(hr) then
Exit;
_OleStream := TOleStream.Create(_Stream);
//работа со стримом
_OleStream.Free;
break;
end;
end;
end;


 
Clift   (2003-12-30 02:25) [5]

>_none_ ©
Говорить о полном понятии кода немогу, так как с некоторыми типами незнаком. НО спасибо за "напровление" в котором следует "копать"
Единственный вопрос всё Standard или требует установки дополнительных *.pas


 
kaif   (2003-12-30 02:53) [6]

Рекомендую покопать формат PNG. В инете есть прекрасный бесплатный компонент с исходным текстом, который делает PNG-формат. Посмотри, может что-то придет в голову. Там можно добавить свои секции (множество рисунков?) и сколько хочешь текста. Сжатие zip-алгоритмом.


 
Юрий Зотов   (2003-12-30 05:14) [7]

Запись произвольного количества произвольных данных в один файл:
- пишем длину куска 1
- пишем кусок 1
- пишем длину куска 2
- пишем кусок 2
и так далее. Чтение - в том же порядке.


 
Ega23   (2003-12-30 10:35) [8]

Используй TIFF. Там в один файл даже музыку к картинке запихнуть можно.


 
_none_   (2003-12-30 10:44) [9]

to [kaif] чего-то я про Png не в курсе.. :( где почитать?

to [Ega23] тоже не к курсе насчет музыки... насчет нескольких страниц - да. + альфа-канал

кому интересно - утитилитка конверсии нескольких png в tiff:
http://www.nonexchange.narod.ru/utilities/util001/sources.zip

на сколько я знаю - практически универсальный формат: mpeg4 - туда можно запихнуть все; можно даже программы писать.


 
Vlad Oshin   (2003-12-30 10:46) [10]

в дополнение к 7мому оратору :)
пишем в начало длины кусков, потом куски
наверное так читать будет удобнее


 
MVova   (2003-12-30 10:47) [11]

Можно использовать

MS: TMemoryStream;

MS.WriteComponent
MS.ReadComponent


 
_none_   (2003-12-30 10:47) [12]

to [Юрий Зотов] на мой взгляд, хранилище - универсальнее. не приходится заботиться о длинах и пр. чуть чего собьется...

to [Clift] это родное для windows (с win95) ничего нестандартного не надо


 
Ega23   (2003-12-30 10:49) [13]

В Тифф-е ты можешь собственные тэги завести, а в сам файл подштваешь, ну, допустим, мидишку. Все стандартные вьюеры будут открывать твой файл как обычную картинку, а собственный вьюер - откроет картинку и проиграет файл.


 
Delirium   (2003-12-30 10:51) [14]

Есть ещё одна, более чем распространённая, группа форматов, про которую до сих пор почему-то не упомянули - ZIP, RAR, ARJ и т.п.
Компанент написано - немеряно. Рекомендую ZipForge.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.012 c
14-63375
Ega23
2003-12-29 12:35
2004.01.20
Кстати об играх:


14-63396
Igor_thief
2003-12-28 15:14
2004.01.20
Currency


14-63388
Rouse_
2003-12-24 18:24
2004.01.20
---|Ветка была без названия|---


6-63275
Dysan
2003-11-18 13:06
2004.01.20
Connection Closed Gracefully


4-63450
tim
2003-10-15 12:06
2004.01.20
сеть не видно в сервисе





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский