Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2009, 18:06   #1
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию Сохранить картинку и текст в одном файле

Как такое реализовать (хотя б алгоритм)?
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 30.08.2009, 18:09   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

можно задачу раскрыть?
просто картинка и текст в файле(открываете потом вы своей прогой) или нужно чтоб в файл текст добавить(можно открыть картинку спокойно как обычно)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.08.2009, 18:11   #3
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Текст и картинку открывать своей прогой.
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 30.08.2009, 18:13   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

TFileStream.
пишете в том порядке в каком хотите(сначало например текст...затем файл картинки)в один файл...можно вообще zlib подключить
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.08.2009, 18:16   #5
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

А пример можно? (с TFileStream не доводилось работать)
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 30.08.2009, 18:50   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

чуть позже скину
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.08.2009, 18:51   #7
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Хорошо, спасибо!!!
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 31.08.2009, 01:10   #8
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Народ, новую тему создавать не стал, решил написать тут.
Та же самая проблема. Есть структура типа
Код:
Type
TMyStruct = record
  Name: String[30];
  BM : TBitmap;
end;
Мене надо эту структуру записать в файл *.dat
Пробовал вот так:
Код:
var
  Pic : TMyStruct;
  Stream: TFileStream;

procedure TForm1.Button1Click(Sender: TObject);
begin
Stream := TFileStream.Create('myfile.dat', fmOpenWrite);
Pic.BM := TBitmap.Create;

Pic.BM.LoadFromFile('123.bmp');
Pic.Name := 'Имя';

Stream.WriteBuffer(Pic, SIZEOF(TMyStruct));
//Pic.BM.SaveToStream(Stream);
Stream.Free;
Pic.BM.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Stream := TFileStream.Create('myfile.dat', fmOpenRead);
Pic.BM := TBitmap.Create;

Stream.ReadBuffer(Pic, sizeof(TMyStruct));

Image1.Canvas.Draw(0,0,Pic.BM);
Caption :=  Pic.Name;
Stream.Free;
Pic.BM.Free;
end;
Так вот, читаю я только вот это Caption := Pic.Name; , а картинка не выводится. Кто знает как это можно переделать?
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 31.08.2009 в 01:33.
spamer вне форума Ответить с цитированием
Старый 31.08.2009, 01:33   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

эхх...такую структуру просто так не пишут...вот код...держи:
Код:
Type
TMyStruct = record
  Name: String;
  BM : TBitmap;
end;

------------------

var
  Pic : TMyStruct;
  Stream: TFileStream;

procedure TForm1.FormCreate(Sender: TObject);
begin
Stream := TFileStream.Create('myfile.dat', fmOpenReadWrite);
Pic.BM := TBitmap.Create
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Pic.BM.LoadFromFile('pic10.bmp');
Pic.Name:='Имя';
i:=Length(Pic.Name);
Stream.WriteBuffer(i,4);
Stream.WriteBuffer(Pic.Name[1],i);
Pic.BM.SaveToStream(Stream);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
Stream.ReadBuffer(i,4);
SetLength(Pic.Name,i);
Stream.ReadBuffer(Pic.Name[1],i);
Pic.BM.LoadFromStream(Stream);
Image1.Picture.Bitmap.Assign(Pic.BM);
Caption:= Pic.Name;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Stream.Free;
Pic.BM.Free;
end;
вроде так...исправлял тут...если что не так то скажи только=)
кстат теперь длинна имени картинки не ограниченна
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 31.08.2009 в 01:40.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.08.2009, 01:42   #10
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Код:
var
  Pic : TMyStruct;
  Stream: TFileStream;

procedure TForm1.FormCreate(Sender: TObject);
begin
Stream := TFileStream.Create('myfile.dat', fmOpenReadWrite);
Pic.BM := TBitmap.Create
end;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Pic.BM.LoadFromFile('pic10.bmp');
Pic.Name:='Имя';
i:=Length(Pic.Name);
Stream.WriteBuffer(i,4);
Stream.WriteBuffer(Pic.Name[1],i);
Pic.BM.SaveToStream(Stream);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
Stream.ReadBuffer(i,4);
SetLength(Pic.Name,i);
Stream.ReadBuffer(Pic.Name[1],i);
Pic.BM.LoadFromStream(Stream);
Image1.Picture.Bitmap.Assign(Pic.BM);
Caption:= Pic.Name;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Stream.Free;
Pic.BM.Free;
end;
Спасибо. Все работает. Только можешь объяснить выделенные красным строки?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохоанить, Сохранить как, Открыть несколько элементов в одном файле Polotenchik Общие вопросы Delphi 9 01.08.2009 13:37
Хранение БД в одном файле D_E_N БД в Delphi 3 18.07.2009 14:01
JPG и TXT в одном файле prizrak1390 Общие вопросы Delphi 9 19.04.2009 18:45
TWebBrowser - сохранить картинку Air Компоненты Delphi 7 16.01.2009 02:31