Цитата Alex S:
Возник ряд проблем, при чтении из текстового файла (FileOpen-FileRead) текст отображается с крякозябликами и считывается только первая строка. »
|
Почитайте в справке информацию по команде
FileRead, а также ограничения её использования. Кратко укажу основные моменты, которые важно знать. Первое, текст должен быть в кодировке ANSI. Второе, длина строки не должна превышать 1024 символов. Третье, команда считывает только строку, а не весь документ.
Теперь по вашему сценарию. С учетом того, что команда считывает только строку, то необходимо организовать цикл с поочередным чтением всех строк до конца файла. После чтения каждой строки, её необходимо передавать элементу управления. Таким образом, в простейшем варианте эту задачу можно выполнить так (на базе вашего сценария):
Вариант решения
Код:

!define PRODUCT_NAME "MyProg"
Var InfoPage
Var InfoBeforePage_Control_EDIT
!include "MUI2.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
;--------------------------------
;General
Name "${PRODUCT_NAME}"
OutFile "InfoBeforePage.exe"
;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
;Show all languages, despite user's codepage
!define MUI_LANGDLL_ALLLANGUAGES
;--------------------------------
;Pages
Page custom InfoBeforePage
!insertmacro MUI_PAGE_INSTFILES
;--------------------------------
;Languages
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
;--------------------------------
;Installer Sections
Section "MainSection" SEC01
SectionEnd
;--------------------------------
;Installer Functions
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
InitPluginsDir
SetOutPath $PLUGINSDIR
${If} $LANGUAGE = ${LANG_RUSSIAN}
; Документ должен быть в кодировке ANSI !!!
File /oname=$PLUGINSDIR\info.txt info_ru.txt
${Else}
; Документ должен быть в кодировке ANSI !!!
File /oname=$PLUGINSDIR\info.txt" info_en.txt
${EndIf}
FunctionEnd
Function InfoBeforePage
nsDialogs::Create 1018
Pop $InfoPage
${If} $InfoPage == error
Abort
${EndIf}
!insertmacro MUI_HEADER_TEXT "Dialog title..." "Dialog subtitle..."
; === RichText1 (type: RichText) ===
!define MYMULTILINEEDIT_STYLE ${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN}
nsDialogs::CreateControl "RichEdit20A" ${MYMULTILINEEDIT_STYLE} ${WS_EX_STATICEDGE} 0u 0u 300u 140u ""
Pop $InfoBeforePage_Control_EDIT
; === Чтение файла ===
Call ReadTxtFile
nsDialogs::Show
FunctionEnd
; Функция чтения и вывода содержимого файла в элемент "RichEdit20A"
Function ReadTxtFile
; Открываем файл для чтения
FileOpen $4 "$PLUGINSDIR\info.txt" r
loop:
; Считываем строку в переменную $1
FileRead $4 $1
; Передаем строку в элемент "RichEdit20A"
; Флаг ${EM_REPLACESEL} указывает на вставку текста с новой строки
SendMessage $InfoBeforePage_Control_EDIT ${EM_REPLACESEL} 0 "STR:$1"
; Если нет ошибок, переходим к следующей строке
IfErrors +1 loop
; Если ошибка или конец файла, закрываем файл.
FileClose $4
FunctionEnd
Если необходимо чтение документов в кодировке
Unicode, то посмотрите в сторону команды
FileReadUTF16LE.