簡體   English   中英

在NSIS中,如何在使用nsDialogs :: Create 1018時設置對話框的大小?

[英]In NSIS, How to set the size of the dialog box when using nsDialogs::Create 1018?

在Nsis,我正在使用:

 ...
 nsDialogs::Create 1018
 Pop $0

 nsDialogs::Show
 ...

但是對話框的大小不符合我的需要。 如何為此對話框指定x和y的長度?

如果你想調整所有內容,最好使用Resource Hacker和ChangeUI但你可以在運行時完成:

!include nsDialogs.nsh

Function mypage
System::Call 'user32::SetWindowPos(i$hwndparent,i,i,i,i 640,i 480,i 0x16)' ; Resize outer dialog
nsDialogs::Create 1018
Pop $0
System::Call 'user32::MoveWindow(i$0,i0,i0,i 600,i 200,i0)' ; Resize inner (nsDialogs) page

${NSD_CreateLabel} 0 10u 100% 10u "Hello, welcome to nsDialogs!"
Pop $0
SetCtlColors $0 0xffffff 0xff2255

nsDialogs::Show
FunctionEnd

page custom mypage

我的對話框不夠高,不適合我投入的所有控件。

我嘗試了兩個Windows API,當它們工作時,安裝的客戶區重疊並覆蓋了確定/取消按鈕。

我最終制定了“使用資源黑客和ChangeUI”。 這比我想象的要困難得多。 所以,這里有一個更詳細的操作方法。 我完全沒有使用nsDialogs而不是ModernUI。 因此,這是nsDialogs調整窗口大小的方法,其創建方式與示例相同。 上面介紹了ModernUI。

nsDialogs ::創建1018

  1. 從Angus獲取ResourceHacker: http//www.angusj.com/resourcehacker/
  2. 轉到NSIS Contrib文件夾。 C:\\ Program Files(x86)\\ NSIS \\ Contrib \\ UIs並將default.exe復制到與NSI腳本文件相同的文件夾中。
  3. 將default.exe的本地副本重命名為tall_UI.exe。
  4. 打開ResourceHacker,將tall_UI.exe拖到窗口中。
  5. 使用treeView深入查看資源105並單擊1033.當您單擊1033時,它會顯示預覽。
  6. 你有一個是代碼和預覽。 記下第一行代碼......

     105 DIALOGEX 0, 0, 280, 162 
  7. 現在單擊預覽窗口的頂部邊緣並將其拉伸以使其更高。 請注意,該行中的最終數字變得更大。 注意現在窗口底部是否有空白區域。
  8. 對話框底部邊緣有四個控件:一個按鈕,一個不可見的框和另外兩個按鈕。 將所有這些拖到窗口底部附近。 當您選擇每個時,您會注意到紅色*標記在代碼窗口中正在修改哪個控件。 讓他們靠近你想要的地方。
  9. 移動水平分隔線。 它很瘦,很難移動。
  10. 你會希望你的按鈕都是直的。 為了使它們准確,請轉到代碼窗口並從每行控件的行尾編輯第3個數字。 要將這些更改應用於代碼窗口,請單擊“編譯腳本”。
  11. 單擊灰色大框以選擇然后使用其底部邊緣點將其拉伸到所需高度。
  12. 調整代碼或預覽。 命中編譯很多。
  13. 它很完美,你喜歡它。 命中編譯最后一次。
  14. 單擊“文件”和“保存”。 它將保存您的Tall_UI.exe以及制作名為Tall_UI_original.exe的副本。
  15. 在NSIS腳本中,您需要盡早添加對ChangeAll的調用。

     ChangeUI all tall_UI.exe Page custom nsDialogsPage Function nsDialogsPage nsDialogs::Create 1018 Pop $Dialog ... 

這樣做對我來說。 您將進行一些試驗和錯誤,總是打開commpile並保存在ResourceHacker中,然后重建您的NSI。 您可能會注意到您的對話框大於或小於ResourceHacker中顯示的預覽。 那是因為NSIS會根據字體大小,DPI ......這樣的東西來縮放對話框。 嘗試重試直到看起來不錯。

您會注意到nsDialogs :: Create 1018匹配資源黑客第5行中的數字:

CONTROL "", 1018, STATIC, SS_BLACKRECT | WS_CHILD | WS_GROUP, 7, 7, 266, 160  

我把這個演示放在一起后做了一些測試,1018資源的定位和大小確實有效,但我不能告訴你為什么它不是黑色的。

我的演示的完整代碼如下所示。

#Created with NSIS version 2.46 downloaded from SourceForge.net
#Based on "Adding Controls" section of user docs
# http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html#step-add

!include nsDialogs.nsh

Name "Launchpad"
OutFile "Master Installer.exe"
BrandingText " "
Caption "Launchpad"
RequestExecutionLevel admin
SetFont "Arial" 10
VIProductVersion "2.5.0.0"

Var Dialog
Var Button

ChangeUI all tall_UI.exe
Page custom nsDialogsPage

Function nsDialogsPage
    nsDialogs::Create 1018 
    Pop $Dialog

    # It will create a new dialog in the page and return its HWND on the stack. The result must be popped from the stack to prevent stack corruption. If the result is error, the dialog couldn't be created.
    ${If} $Dialog == error
    Abort
    ${EndIf}

    # ${NSD_Create*} x y width height text

    ## Going to use $0 for y of each new control.
    StrCpy $0 "29"

    ${NSD_CreateButton} 50% "$1u" 25% 12u "Product Manual"
    Pop $Button
    ${NSD_OnClick} $Button Manual_Install_Clicked
    IntOp $0 $0 + 18
    IntOp $1 $0 - 2

    ${NSD_CreateButton} 50% "$1u" 25% 12u "Product 1 Installer"
    Pop $Button
    ${NSD_OnClick} $Button Product1_Install_Clicked
    IntOp $0 $0 + 18
    IntOp $1 $0 - 2

    ${NSD_CreateButton} 50% "$1u" 25% 12u "Product 2 Installer"
    Pop $Button
    ## ${NSD_OnClick} ...
    IntOp $0 $0 + 18
    IntOp $1 $0 - 2

    ${NSD_CreateButton} 50% "$1u" 25% 12u "Product 3 Installer"
    Pop $Button
    ## ${NSD_OnClick} ...
    IntOp $0 $0 + 18
    IntOp $1 $0 - 2

    ${NSD_CreateButton} 50% "$1u" 25% 12u "Product 4 Installer"
    Pop $Button
    ## ${NSD_OnClick} ...
    IntOp $0 $0 + 18
    IntOp $1 $0 - 2

    ${NSD_CreateButton} 50% "$1u" 25% 12u "Product 1 Installer"
    Pop $Button
    ## ${NSD_OnClick} ...
    IntOp $0 $0 + 18
    IntOp $1 $0 - 2

    ${NSD_CreateButton} 50% "$1u" 25% 12u "Product 1 Installer"
    Pop $Button
    ## ${NSD_OnClick} ...
    IntOp $0 $0 + 18
    IntOp $1 $0 - 2

    nsDialogs::Show
FunctionEnd

Function ExecInstall
    pop $0
    ExecWait $0 $1
    IfErrors 0 ExecDone
    MessageBox MB_OK|MB_IconExclamation "$1 $0 not found"
    ExecDone:
    ##Call Update_Install_Statuses
FunctionEnd

Function Manual_Install_Clicked
    ExecShell "open" "$EXEDIR\Manual\Manual.PDF"
FunctionEnd

Function Product1_Install_Clicked
    Exec "Explorer.exe $EXEDIR\Support Files"
FunctionEnd

Function Product2_Install_Clicked
    Push "$EXEDIR\Product2 Folder\Product2 Installer.exe"
    Call ExecInstall
FunctionEnd

Section

SectionEnd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM