Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Flix

Пользователь


Сообщения: 98
Благодарности: 55

Профиль | Отправить PM | Цитировать


Цитата 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.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:06, 29-01-2018 | #2176