Вкомпилировать содержимое текстового файла (во время сборки проекта)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
sunjob
постоялец
Сообщения: 189
Зарегистрирован: 12.01.2011 14:19:54

Вкомпилировать содержимое текстового файла (во время сборки проекта)

Сообщение sunjob »

день добрый, колдуны!

как на этапе сборки "вкомпилировать" содержимое текстового файла в приложение?
(что бы потом отобразить в TMemo "About")
именно "вкомпилировать" а не загрузить из файла во время работы.

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

спасибо

- linux
- fpc-3.2.2
- lazarus-3.8.0
- bash
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3072
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

В делфи и винде я это делал с легкостью - засовывая любые тексты и изображения в ресурсы. В лазаре и линуксе не интересовался, но краем глаза видел, что и там есть что-то подобное. Сам разбираться не стану - есть задачи и интереснее.
Аватара пользователя
Alexx2000
постоялец
Сообщения: 491
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

Добавить в ресурсы в параметрах проекта, потом загрузить в TMemo можно так:

Код: Выделить всё

var
  AStream: TStream;
begin
  AStream:= TResourceStream.Create(HInstance, 'HIGHLIGHTERS', RT_RCDATA);
  try
    Memo1.Lines.LoadFromStream(AStream);
  finally
    AStream.Free;
  end;
end;  
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Либо через ресурсы, либо как в MSEide+MSEgui в утилите form2pas.
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Не совсем понятно. TMemo.Lines может хранить строки в самой форме lfm. В дизайне можно вставить текст. Если при сборке скриптами нужно что-то менять в тексте, можно вставить какие-нибудь теги, типа __Today__, и подменять башем

Код: Выделить всё

TEXT="$(cat umain.lfm)"
TEXT="${TEXT//__Today__/$(date +'%d.%m.%Y')}"
echo "${TEXT}" > umain.lfm.tmp
mv -f umain.lfm.tmp umain.lfm
или седом

Код: Выделить всё

sed -i "s|__Today__|$(date +'%d.%m.%Y')|g"
Хотя там есть https://www.freepascal.org/docs-html/3. ... gsu41.html и можно теги подменять на константы времени компиляции в рантайме.

Код: Выделить всё

procedure TForm1.FormCreate(Sender: TObject);
begin
  MemoAbout.Text:=ReplaceStr(MemoAbout.Text,'__Today__',{$I %DATE%});
end;
Alex2013
долгожитель
Сообщения: 3239
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

sunjob писал(а): 20.02.2026 04:44:11 день добрый, колдуны!

как на этапе сборки "вкомпилировать" содержимое текстового файла в приложение?
(что бы потом отобразить в TMemo "About")
именно "вкомпилировать" а не загрузить из файла во время работы.
А просто константу с текстом вставить в исходник и добавить в FormCreate Memo1.Lines.Text:=MyText; не вариант ?

Код: Выделить всё

Const
  MyText:String=
    '1------------'+#13+#10+
    '2------------'+#13+#10+
    '3------------';
procedure TForm1.FormCreate(Sender: TObject);
begin
 Memo1.Lines.Text:=MyText;
end;
Но вообще то что вписано в дизайнере формы в поле Lines прекрасно "вкомпилируется" в код автоматически . (Размер почти ничем неограничен )
Ответить