0

Nsis では、次のものを使用しています。

 ...
 nsDialogs::Create 1018
 Pop $0

 nsDialogs::Show
 ...

しかし、ダイアログ ボックスのサイズが私のニーズに合いません。このダイアログに x と y の長さを指定するにはどうすればよいですか?

4

2 に答える 2

0

ダイアログの高さが、配置しようとしているすべてのコントロールに対して十分ではありません。

2 つの Windows API を試してみましたが、それらが機能している間に、インストールのクライアント領域が重なり、[OK]/[キャンセル] ボタンが隠れてしまいました。

私は最終的に「リソースハッカーとChangeUIを使用する」ことを考え出しました。思ったよりずっと大変でした。というわけで、詳しい作り方はこちら。私は、ModernUI ではなく nsDialogs に深く関わっていました。これは、例と同じように作成されたウィンドウの nsDialogs サイズ変更のハウツーです。ModernUI については上記で説明しています。

nsDialogs::Create 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. ダイアログの下端に沿って 4 つのコントロールがあります。ボタン、非表示のボックス、およびその他の 2 つのボタンです。これらすべてをウィンドウの下部近くにドラッグします。それぞれを選択すると、コード ウィンドウでどのコントロールが変更されているかを示す赤い * マークが表示されます。必要な場所に近づけるだけです。
  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
        ...
    

それは私のためにそれをしました。試行錯誤を繰り返し、常にコンパイルして 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
于 2014-12-19T00:18:30.223 に答える