NSIS消息框自定义按钮

时间:2017-10-14 05:24:21

标签: button nsis

我知道之前已经问过这个问题,发现有几个帖子他们说没有,但是我看到的最新帖子是2014年的,所以我想我会查看是否有任何我缺少的新功能。

有没有办法将消息框按钮更改为自定义文本?因此,我可以使用var labelHorMargin = titleLabel.Margin.Left + titleLabel.Margin.Right; var blockHorMargin = titleBlock.Margin.Left + titleBlock.Margin.Right; titleBlock.Width = canvas.Width - labelHorMargin - blockHorMargin; 代替YesNoCancel

我需要有几个消息框才能具备此功能。

如果该选项是写一些自定义插件,有人可以为我这样做,它会超出我的想法吗?

1 个答案:

答案 0 :(得分:1)

NSIS只使用MessageBox Windows功能,但不允许您设置按钮文字。

最好的选择是自定义插件,但我怀疑是否有人愿意为你写一个,因为你问得很好。您可以在NSIS论坛上询问是否有人愿意支付少量费用。

作为一种解决方法,您可以使用内置页面上的DlgHost plug-in创建一个使用您自己的自定义设计的嵌套对话框:

!include nsDialogs.nsh
!include DlgHost.nsh

Page InstFiles

Function CloseDlgHostDialog
Pop $0
DlgHost::Close
FunctionEnd

Function DoSomethingElse
Pop $0
MessageBox mb_ok "Hello"
FunctionEnd

Function MyDlgBoxCallback
${Select} $0
${Case} ${DLGHOST_DLGBOXMSG_INITDLG}
    nsDialogs::Create 1018
    Pop $1
    DlgHost::SetClient $1

    ${NSD_CreateLabel} 25% 20% 45% 15u "Hello from nsDialogs..."
    Pop $1
    ${NSD_CreateButton} 10u 60% 50u 15u "&Close"
    Pop $1
    ${NSD_OnClick} $1 CloseDlgHostDialog

    ${NSD_CreateButton} 70u 60% 80u 15u "&Do something else"
    Pop $1
    ${NSD_OnClick} $1 DoSomethingElse

${Case} ${DLGHOST_DLGBOXMSG_SHOWDLG}
    nsDialogs::Show
${EndSelect}
FunctionEnd

Function ShowNSDChildDlg
GetFunctionAddress $0 MyDlgBoxCallback
DlgHost::DlgBox "* $0 p 200u 120u Test Dialog"
FunctionEnd

Section
Call ShowNSDChildDlg
SectionEnd