Форум: "Потрепаться";
Текущий архив: 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.011 c