2017-08-09 2 views
0

私は自分のプロジェクトをインストールするためにNsisを使用しています。私はrichEditの背景色を変更する必要があります。 SetCtlColorsメソッドを試してみましたが、何も変更はありません。ここに私のコードは次のとおりです。NSIS:RichEditの背景色を変更するには

; handle variables 
Var hCtl_FirstDialog 
Var hCtl_FirstDialog_RichText1 
Var hCtl_FirstDialog_Button1 


; dialog create function 
Function fnc_FirstDialog_Create 

    ; === FirstDialog (type: Dialog) === 
    nsDialogs::Create 1018 
    Pop $hCtl_FirstDialog 
    ${If} $hCtl_FirstDialog == error 
    Abort 
    ${EndIf} 
    !insertmacro MUI_HEADER_TEXT "Dialog title..." "Dialog subtitle..." 

    ; === RichText1 (type: RichText) === 
    nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 12.51u 14.77u 261.32u 92.92u "" 
    Pop $hCtl_FirstDialog_RichText1 
    ; RichText1 ControlCustomScript 
    nsRichEdit::Load $hCtl_FirstDialog_RichText1 D:\temp\NsisProject\EULA.rtf 
    SetCtlColors $hCtl_FirstDialog_RichText1 ccff00 ccff00 

    ; === Button1 (type: Button) === 
    ${NSD_CreateButton} 225.11u 118.77u 49.37u 14.15u "Button1" 
    Pop $hCtl_FirstDialog_Button1 
    ${NSD_OnClick} $hCtl_FirstDialog_Button1 FillText 

FunctionEnd 

; dialog show function 
Function fnc_FirstDialog_Show 
    Call fnc_FirstDialog_Create 
    nsDialogs::Show 
FunctionEnd 
+0

Windowsがヘクス-色を受け入れた場合、私はわからないんだけどこの形式。 'SetCtlColors $ hCtl_FirstDialog_RichText1 0xccff00 0xccff00'を試してください – idleberg

+0

@idlebergだから私も試しました。同じ振る舞い – user2455111

答えて

1

リッチエディットコントロールがSetCtlColorsをサポートしていない、あなたはテキスト形式を設定するために、その文書化されたメッセージを使用する必要があります。

!include nsDialogs.nsh 
!include WinMessages.nsh 
!define /ifndef /math EM_SETBKGNDCOLOR ${WM_USER} + 67 
!define /ifndef /math EM_SETCHARFORMAT ${WM_USER} + 68 
!define /ifndef /math EM_SETTEXTEX ${WM_USER} + 97 
!define /ifndef ST_SELECTION 2 
!define /ifndef CFM_COLOR 0x40000000 
!define /ifndef SCF_DEFAULT 0x0000 
!define /ifndef SCF_ALL  0x0004 

Var hRichEd 


Function MyPageCreate 
nsDialogs::Create 1018 
Pop $0 

nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 12.51u 14.77u 261.32u 92.92u "" 
Pop $hRichEd 
SendMessage $hRichEd ${EM_SETBKGNDCOLOR} 0 0x00ffcc 

!if 1 ; Set default 
    System::Call '*(i 60, i ${CFM_COLOR}, i0,i0,i0, i 0xcc00ff, i, &m32)p.r0' ; Note: 60 is the ANSI size 
    SendMessage $hRichEd ${EM_SETCHARFORMAT} ${SCF_ALL} $0 
    System::Free $0 
    ${nsD_SetText} $hRichEd "Text goes here" 
!else ; Import RTF 
    System::Call '*(i${ST_SELECTION},i0)p.r0' 
    SendMessage $hRichEd ${EM_SETTEXTEX} $0 "STR:{\rtf1\ansi\deff0{\colortbl;\red115\green0\blue25;}\cf1 Text goes here}" ; www.pindari.com/rtf1.html 
    System::Free $0 
    SendMessage $hRichEd ${EM_REPLACESEL} 0 "STR: and more text here" 
!endif 

nsDialogs::Show 
FunctionEnd 

Page Custom MyPageCreate 
+0

thx、パス 'D:\ temp \ NsisProject \ EULA.rtf'でブロック 'Import RTF'でrtfパスを設定する方法 – user2455111

+1

パスを取らず、実際のrtfコードが必要です。 .rtfファイルをロードするには、streaminメッセージまたはプラグインを使用します。 – Anders