当从文件中获取数据时,如何在单击后退/下一个按钮时保留自定义页面上的数据?

时间:2016-07-19 06:52:23

标签: nsis

我编写了一个自定义组件页面,其中包含一个富文本框,该文本框显示了从“component.rtf”文件中读取的信息。当我第一次进入自定义页面时,它会向我显示填充数据的富文本框,但是当我单击下一个或后退按钮并再次返回自定义页面时,它会将富文本框显示为空白。它没有任何表现。 我为自定义页面编写了以下代码 -

;-------Custom page variables---------
Var Dialog
Var CustomHeaderText
Var CustomSubText
Var path
Var temp1
Var CONTROL
;-------------------------------------
Page custom nsDialogsPage 
;------Custom page function----------
Function nsDialogsPage

    StrCpy $CustomHeaderText "Components of My Installer"
    StrCpy $CustomSubText "Detail list of components are"
    !insertmacro MUI_HEADER_TEXT $CustomHeaderText  $CustomSubText 
    !define SF_RTF 2
    !define EM_STREAMIN 1097

    nsDialogs::Create /NOUNLOAD 1018
    Pop $Dialog

    ${If} $Dialog == error
        Abort
    ${EndIf}

    nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 0 10u 100% 110u ''
    Pop $CONTROL

    FileOpen $4 "$path\components.rtf" r
    StrCpy $0 $CONTROL

    SendMessage $CONTROL ${EM_EXLIMITTEXT} 0 0x7fffffff
    ; set EM_AUTOURLDETECT to detect URL automatically
    SendMessage $CONTROL 1115 1 0

    System::Get /NoUnload "(i, i .R0, i .R1, i .R2) iss"
    Pop $2
    System::Call /NoUnload "*(i 0, i 0, k r2) i .r3"

    System::Call /NoUnload "user32::SendMessage(i r0, i ${EM_STREAMIN}, i ${SF_RTF}, i r3) i.s"

    loop:
        Pop $0
        StrCmp $0 "callback1" 0 done
        System::Call /NoUnload "kernel32::ReadFile(i $4, i $R0, i $R1, i $R2, i 0)"
        Push 0 # callback's return value
        System::Call /NoUnload "$2"
    goto loop
    done:
        System::Free $2
        System::Free $3
        FileClose $4

    nsDialogs::Show

FunctionEnd
;--------Custom page function end------------

在上面的代码中,它读取文件“components.rtf”并显示它。当我点击组件页面上的上一页/下一页按钮时,有人能告诉我如何编写将保留此数据的代码。

1 个答案:

答案 0 :(得分:0)

对我来说很好。也许你在另一页上覆盖$ path?在FileOpen之后添加!include MUI2.nsh Var Dialog Var CustomHeaderText Var CustomSubText Var path #Var temp1 Var CONTROL ;------------------------------------- Page custom nsDialogsPage ;------Custom page function---------- Function nsDialogsPage StrCpy $CustomHeaderText "Components of My Installer" StrCpy $CustomSubText "Detail list of components are" !insertmacro MUI_HEADER_TEXT $CustomHeaderText $CustomSubText !define SF_RTF 2 !define EM_STREAMIN 1097 nsDialogs::Create /NOUNLOAD 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 0 10u 100% 110u '' Pop $CONTROL FileOpen $4 "$path\components.rtf" r StrCpy $0 $CONTROL SendMessage $CONTROL ${EM_EXLIMITTEXT} 0 0x7fffffff ; set EM_AUTOURLDETECT to detect URL automatically SendMessage $CONTROL 1115 1 0 System::Get /NoUnload "(i, i .R0, i .R1, i .R2) iss" Pop $2 System::Call /NoUnload "*(i 0, i 0, k r2) i .r3" System::Call /NoUnload "user32::SendMessage(i r0, i ${EM_STREAMIN}, i ${SF_RTF}, i r3) i.s" loop: Pop $0 StrCmp $0 "callback1" 0 done System::Call /NoUnload "kernel32::ReadFile(i $4, i $R0, i $R1, i $R2, i 0)" Push 0 # callback's return value System::Call /NoUnload "$2" goto loop done: System::Free $2 System::Free $3 FileClose $4 nsDialogs::Show FunctionEnd Function .onInit ; Create a RTF file InitPluginsDir StrCpy $path "$PluginsDir" ; Set $path used by the custom page FileOpen $0 "$path\components.rtf" w FileWrite $0 '{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard{Show {\b Me}}\par{http://example.com/#Funny}\par{Goodbye}}' FileClose $0 FunctionEnd !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" Section SectionEnd 以确保您能够打开该文件。

X