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


Автор: tar13 6.4.2007, 12:52
В моей программе, компонент memo грузил текст из блокнота. Появилась необходимость поместить содержимое блокнота в exe файл, т.е. создать ресурс, я создал ресурс TEXT1.res, вопрос: каким образом теперь использовать этот ресурс, как его загрузить в memo.

Ещё раз:
есть memo
есть TEXT1.RES, созданный из блокнота с текстом

КАК загрузить ресурс?
подскажите пожалуйста код

С уважением tar

P.S.
шутки, высказывания прорицателей пожалуйста не присылайте, дайте дельный совет, желательно код или хотя бы ссылку с примером загрузки текста в memo из ресурса, хотя я думаю быстрее и проще сказать код.
Спасибо

Автор: Alexeis 6.4.2007, 13:13
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  res : TResourceStream;
begin
  res := TResourceStream.Create(hInstance, 'MEMOTEXT1', RT_RCDATA);
  memo1.Lines.LoadFromStream(res);
  res.Free;
end;



Автор: tar13 6.4.2007, 13:25
Хм, первоначально я сам использовал такой код, но выходит ошибка несоотвтствия типов:

incompatible types: 'string' & 'TResourceStream' 

Автор: Snowy 6.4.2007, 13:43
Это потому что у тебя был неправильный код.
А правильный - этот  smile 

Автор: tar13 6.4.2007, 14:27
Думаю что у меня проблема с созданием ресурса, у меня Delphi7, пользуюсь WorkShop 4.5

Я создаю блокнот с любым текстом с именем memotext
Создаю блокнот text.rc, в котором пишу: memotext text memotext.txt
Открываю его через WorkShop и сохраняю как text.res

Далее создаю проект, на форму помещаю memo,
далее пишу ключ {$R text.res}
Далее в событие создание формы пишу

...
var
res: TresourceStream
Begin

res:= Tresourcestream.create(hInstance, 'text', RT_RCDATA);
memo.lines.loadfromstream(res);
res.free;
...

При попытке запуска проекта пишется 
error rlink32: unsupported 16-bit resource data
Может проблема с WorkShop,
кстати я создавал ресурс из bitmap файлов, выходила та же ошибка,
но потом я открывал созданный ресурс в борландовском image editor
и снова сохранял без изменений в том же формате с тем же именем
Запускал проект и всё нормально работало
???
Delphi 7 английская, WorkShop 4.5 тоже английский - подскажите пожалуйста




Автор: aktuba 6.4.2007, 14:39
Замени RT_RCDATA на 'memotext'...

Автор: Snowy 6.4.2007, 15:02
В комплект дельфи входит brcc32 - это стандартный инструмент для создания ресурсов для своей программы.

Автор: Alexeis 6.4.2007, 15:55
tar13, я пользовался Restoratorом

Автор: BLACK_KOT 15.10.2007, 23:09
подскажите, как связать текстовую переменную с текстовым файлом, находящимся в ресурсе для изалечения из него энной строки?

Код

var f:TextFile; 
hr:THandle;
p:Pointer;

begin

hr:=LoadResource(HInstance,FindResource(HInstance,'mytext',RT_RCDATA));
 p:=LockResource(hr);
AssignFile(f,?);
reset(f);
...
UnlockResource(hr);
end;


Автор: MetalFan 15.10.2007, 23:13
BLACK_KOT, а зачем такой изврат?

Автор: Alexeis 15.10.2007, 23:50
BLACK_KOT, после извлечения из ресурса он сразу же будет блоком в памяти, который не сложно загрузить в TStringList.

Автор: BLACK_KOT 16.10.2007, 00:46
покажи на примере, как загрузить текстовый файл из ресурса в Tstringlist и как достать к примеру 5ую строку.

Автор: aktuba 16.10.2007, 01:42
Цитата

покажи на примере, как загрузить текстовый файл из ресурса в Tstringlist и как достать к примеру 5ую строку. 


Вот кусок из моей старой программы:
Код

  FHash := TStringList.Create;
  rStream := TResourceStream.Create(HInstance, 'HS', RT_RCDATA);
  lStream := TMemoryStream.Create;
  try
    lStream.CopyFrom(rStream, rStream.Size);
    lStream.Position := 0;
    DecryptStream(lStream);
    lStream.Position := 0;
    FHash.LoadFromStream(lStream);
  finally
    lStream.Free;
    rStream.Free;
  end;

Автор: BLACK_KOT 25.10.2007, 17:03
допустим в exe файле есть ресурс с двумя, одинаковыми по размеру иконками.  отображаться, разумеется будет тока одна.  а как сделать чтобы при определённых условиях иконка exeшника менялась на вторую? вообще, можно ли программно сменить иконку у файла?

Автор: Alexeis 25.10.2007, 17:20
Цитата(BLACK_KOT @  25.10.2007,  17:03 Найти цитируемый пост)
вообще, можно ли программно сменить иконку у файла? 

  Файл файлу рознь. Для обычных типов ассоциации устанавливаются в реестре, а для экзешников берутся из ресурса самого MainIcon.

  Вопрос не досточно конкретизирован.

Автор: BLACK_KOT 25.10.2007, 20:47
я создал свой ресурс. подключил к проекту.  в нём 2 разные иконки, одинакового размера. главной иконкой станет первая, - она и будет отображаться на ехешнике. 

как програмно  сменить иконку на вторую?чтобы та стала главной и отображалась??

Автор: Alexeis 25.10.2007, 21:07
Из программы никак. Это можно сделать если закрыть текущую программу и при помощи другой программы заменить основную иконку на другую.

Автор: BLACK_KOT 25.10.2007, 21:19
пусть так! какие функции мне позволят сменить иконку на чужом ехешнике? как реализовать то??

Автор: Alexeis 25.10.2007, 22:17
http://forum.vingrad.ru/index.php?show_type=forum&showtopic=21183&st=0&hl=updateresource

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