Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Вытащить текствоый файл


Автор: Budy 1.7.2005, 09:12
:Привет
Вытянул гдето исходничок вот такой, слегка изменил, там вроде JPEG'у вытягивали
Собсно проблема заключается в то, чтоб из ресурса запускаемого EXEника мона было вытянуть текстовый файл. Вроде получается, но только в Memo, а нуна в TStrings. Ну вот чего я натворил:
Код

var 
  ResHandle: THandle; 
  MemHandle: THandle;
  MemStream: TMemoryStream;
  ResPtr: PByte;
  ResSize: Longint;
  S: TStrings;
begin
  ResHandle := FindResource(hInstance, PChar('FONT'), 'TEXT');
  if ResHandle <> 0 then
  MemHandle := LoadResource(hInstance, ResHandle);
  if ResHandle=0 then Exit;
  ResPtr := LockResource(MemHandle);
  MemStream := TMemoryStream.Create;
  ResSize := SizeOfResource(hInstance, ResHandle);
  MemStream.SetSize(ResSize);
  MemStream.Write(ResPtr^, ResSize);
  FreeResource(MemHandle);
  MemStream.Seek(0, 0);
  S:=TStrings.Create;
  S.LoadFromStream(MemStream);
//  Memo1.Lines.LoadFromStream(MemStream);
//  Эта штука с Memo1 работает
//  А вот насчет строчки до этой - ругается
  S.Free;
  MemStream.Free;
end;

Плз, хелп ми

Автор: _hunter 1.7.2005, 10:06
само-собой: TStrings это абстрактный класс его создавать нельзя. используй TStringList

P.S.
а при чем тут сети?

Автор: Quadr0 1.7.2005, 11:27
...

Автор: Poseidon 1.7.2005, 12:50
Цитата(Budy @ 1.7.2005, 09:12)
Код

  S:=TStrings.Create;
  S.LoadFromStream(MemStream);
//  Memo1.Lines.LoadFromStream(MemStream);
//  Эта штука с Memo1 работает
//  А вот насчет строчки до этой - ругается
Вместо S:=TStrings.Create; делай S:= TStringList.Create;

Только помни, освобождая S (S.Free) ты удаляешь ее из памяти, поэтому воспользоваться этой переменной нужно до ее освобождения.


Quadr0,
Цитата(Budy @ 1.7.2005, 09:12)
нуна в TStrings
smile
Код
procedure TForm1.BtnClick(Sender: TObject);
var
  ResStream: TResourceStream;
  Str: TStrings;
begin
  //MyText - имя ресурса, TXT - тип ресурса.
  ResStream := TResourceStream.Create(HInstance, PChar('MyText'), PChar('TXT'));
  Str:= TStringList.Create;
  Str.LoadFromStream(ResStream);
  // че-то делаем с Str, допустим
  // ShowMessage(Str.Text);
  S.Free;
  FreeAndNil(ResStream);
end;


Автор: Budy 1.7.2005, 16:40
Quadr0, Poseidon, сенк.
А вот давайте еще решим одну проблемку, счас надо уже назад ентот текст запихнуть, теперича мона из файла.
Короче как с помощью одной проги заменить ресурс другой проги?

Автор: RA 1.7.2005, 17:22
Цитата(Budy @ 1.7.2005, 16:40)
Короче как с помощью одной проги заменить ресурс другой проги?


Залезь в арсенал форумистов, и посмотри пример работы с ресурсами.
кажется от Alex-а.

Автор: Poseidon 1.7.2005, 17:40
Цитата(RAdmin @ 1.7.2005, 17:22)
Залезь в арсенал форумистов
Млин, а я весь FAQ перерыл в его поиске. smile

http://forum.vingrad.ru/index.php?showtopic=21183

Кстати, Budy, один топик ... smile

Автор: Budy 1.7.2005, 20:22
гы, ща глянем.

Добавлено @ 20:23
угу, счас вот покопаюсь, сенк за линку

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)