Nowa generacja projektowania interfejsu użytkownika
Wtyczka nsDialogs pozwala na tworzenie niestandardowych stron instalatora. Można tworzyć strony z dowolnymi kontrolkami. Kontrolki mogą być tworzone w dowolnej kolejności oraz mogą być dowolnie rozmieszczone. Możesz zatem tworzyć co chcesz, poczynając na prostej stronie, z jedną kontrolką etykiety, kończąc na stronach, które mają możliwość interakcji z użytkownikiem. Interfejs Modern UI 2, na przykład, używa wtyczki nsDialogs do tworzenia strony powitalnej oraz końcowej.
Wtyczka nsDialogs jest nową wtyczką NSIS, dodaną do projektu w wersji 2.29, jako zamiennik wtyczki InstallOptions. Wtyczka nsDialogs nie używa plików INI, zatem jest dużo szybsza od swojej poprzedniczki, wtyczki InstallOptions. Integracja ze skryptem jest ściślejsza, a zarazem bardziej naturalna - tworzenie kontrolek oparte jest na użyciu funkcji, zaś powiadomienia, będące reakcją na akcje użytkownika, wykonywane są poprzez funkcje skryptu. W przeciwieństwie do wtyczki InstallOptions, nie ma predefiniowanego zbioru dostępnych kontrolek. Dzięki niskopoziomowemu dostępowi do funkcji Windows API, utworzony może być każdy typ kontrolki, a strony mogą być dowolnie dostosowywane.
To samo co czyni wtyczkę nsDialogs bardziej elastyczną, może sprawić problemy początkującym użytkownikom, którzy nie znają API Win32. Problem ten rozwiązany jest dzięki stworzeniu biblioteki predefiniowanych funkcji, zdefiniowanych w skrypcie, które pozwalają na utworzenie i obsługę kontrolek. Dzięki temu, nowi użytkownicy mają pełny dostęp do funkcjonalności wtyczki, zaś zaawansowani użytkownicy także mają dostęp do tych funkcjonalności lub po prostu jej nie używają.
Zanim zaczniemy używać wtyczki nsDialogs, utwórzmy wpierw podstawowy skrypt, będący szkieletem naszego instalatora.
Name nsDialogs OutFile nsDialogs.exe XPStyle on Page instfiles Section DetailPrint "Witaj świecie" SectionEnd
Następnym krokiem jest dodanie strony niestandardowej, gdzie możemy użyć wtyczki nsDialogs. Kod nsDialogs nie może być użyty w ramach sekcji lub funkcji innej niż funkcja niestandardowej strony.
Name nsDialogs OutFile nsDialogs.exe XPStyle on Page custom nsDialogsPage Page instfiles Function nsDialogsPage FunctionEnd Section DetailPrint "Witaj świecie" SectionEnd
Mając za sobą podstawy, przyszedł czas na użycie wtyczki nsDialogs. Pierwszym wywołaniem musi być zawsze nsDialogs::Create. Wywołanie to tworzy nowe okno dialogowe na stronie i zwraca jego uchwyt HWND na stos. Wynik musi być zdjęty ze stosu, aby zapobiec uszkodzeniu stosu. Jeśli wynikiem jest błąd error, okno dialogowe nie zostanie utworzone.
Wywołanie nsDialogs::Create akceptuje jeden parametr. Ma on swoje specyficzne przeznaczenie, ale żeby nie komplikować, ustalmy, że zawsze musi to być wartość 1018.
Uchwyt HWND jest liczbą, która identyfikuje okno dialogowe, i może być użyty w poleceniach SendMessage, SetCtlColors oraz API Win32.
!include LogicLib.nsh Name nsDialogs OutFile nsDialogs.exe XPStyle on Var Dialog Page custom nsDialogsPage Page instfiles Function nsDialogsPage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} FunctionEnd Section DetailPrint "Witaj świecie" SectionEnd
Mając utworzoną stronę, warto ją wyświetlić. Można to zrobić używając polecenia nsDialogs::Show. Funkcja ta nie zwraca wartości, póki użytkownik nie wciśnie przycisku 'Dalej', 'Wstecz' lub 'Anuluj'.
!include LogicLib.nsh Name nsDialogs OutFile nsDialogs.exe XPStyle on Var Dialog Page custom nsDialogsPage Page instfiles Function nsDialogsPage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} nsDialogs::Show FunctionEnd Section DetailPrint "Witaj świecie" SectionEnd
Skompilowanie powyższego skryptu i uruchomienie go daje w wyniku pustą stronę, która nie jest zbyt użyteczna. Dodamy teraz do niej kontrolki. Aby to zrobić, użyjemy makra ${NSD_Create*} zdefiniowanego w pliku nagłówkowym nsDialogs.nsh. Każde z tych makr przyjmuje 5 parametrów - x, y, width (szerokość), height (wysokość) oraz text (tekst). Każde makro zwraca na stos wartość - uchwyt HWND kontrolki. Tak jak w przypadku uchwytu okna dialogowego, wartość HWND kontrolki musi być zdjęta ze stosu i zapisana.
Każdy z parametrów wymiaru, które przyjmują makra mogą używać jeden z trzech różnych typów jednostek wymiaru - pikseli, jednostek dialogowych lub wartości procentowej rozmiaru okna dialogowego. Może również przyjmować wartości ujemne, wskazując na wymiar od końca. Aby użyć jednostek dialogowych, wartość wymiaru musi być zakończona literą u. Aby użyć wartości procentowych, wartość wymiaru musi być zakończona znakiem %. Każdy inny znak na końcu lub jego brak oznacza wymiar w pikselach.
Jednostki dialogowe pozwalają na tworzenie okien dialogowych, które skalowane są, gdy używane są różnej wielkości czcionki lub inna wartość DPI. Rozmiar okna w pikselach ustalany jest podczas wykonania na podstawie czcionki oraz wartości DPI. Na przykład, standardowe strony interfejsu NSIS mają rozmiar 266 jednostek dialogowych na szerokości oraz 130 na wysokości. Strony nowoczesnego interfejsu użytkownika mają rozmiar odpowiednio 300 jednostek dialogowych (szerokość) oraz 140 (wysokość). Na różnych rozdzielczościach, przy różnych czcionkach lub ustawieniach DPI, rozmiar okna dialogowego będzie miał zawsze ten sam rozmiar w jednostkach dialogowych, ale inny liczony w pikselach.
!include nsDialogs.nsh !include LogicLib.nsh Name nsDialogs OutFile nsDialogs.exe XPStyle on Var Dialog Var Label Var Text Page custom nsDialogsPage Page instfiles Function nsDialogsPage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateLabel} 0 0 100% 12u "Cześć, witam w nsDialogs!" Pop $Label ${NSD_CreateText} 0 13u 100% -13u "Wpisz tutaj jakiś tekst..." Pop $Text nsDialogs::Show FunctionEnd Section DetailPrint "Witaj świecie" SectionEnd
Dostępne typy kontrolek, które można utworzyć używając makra ${NSD_Create*}:
Mając już kontrolki, może zajść interakcja z użytkownikiem. Aby sprawdzić, jaką akcję wykonał użytkownik dodajmy wpierw do naszej strony funkcję zwrotną wyjścia. W funkcji tej, sprawdzony zostanie stan kontrolki tekstowej, którą utworzyliśmy i wyświetliliśmy użytkownikowi. Aby to zrobić, użyjemy makra ${NSD_GetText}. Dla kontrolek typu RadioButton oraz CheckBox użyjemy makra ${NSD_GetState}.
Zauważcie, że nie wszystkie kontrolki obsługują makro ${NSD_GetText}. Niektóre z nich wymagają użycia specjalnych komunikatów zdefiniowanych w pliku nagłówkowym WinMessages.nsh. Na przykład, kontrolka ListBox wymaga podania LB_GETCURSEL oraz LB_GETTEXT. Wraz z rozwojem wtyczki, biblioteka makr pliku nagłówkowego nsDialogs.nsh zostanie wzbogacona o nowe, które będą obsługiwać więcej przypadków, takich jak powyższe.
!include nsDialogs.nsh !include LogicLib.nsh Name nsDialogs OutFile nsDialogs.exe XPStyle on Var Dialog Var Label Var Text Page custom nsDialogsPage nsDialogsPageLeave Page instfiles Function nsDialogsPage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateLabel} 0 0 100% 12u "Cześć, witam w nsDialogs!" Pop $Label ${NSD_CreateText} 0 13u 100% -13u "Wpisz tutaj jakiś tekst..." Pop $Text nsDialogs::Show FunctionEnd Function nsDialogsPageLeave ${NSD_GetText} $Text $0 MessageBox MB_OK "Wpisałeś:$\n$\n$0" FunctionEnd Section DetailPrint "Witaj świecie" SectionEnd
Jedną z ekscytujących funkcjonalności wtyczki nsDialogs są funkcje zwrotne notyfikacji o zdarzeniach w oknie dialogowym. Wtyczka nsDialogs może wywołać funkcję zdefiniowaną w skrypcie, która wykona kod będący reakcją na akcje użytkownika, takie jak na przykład zmiana tekstu w kontrolce tekstowej lub kliknięcie na przycisk. Aby to zrobić, użyjemy makra ${NSD_OnClick} oraz ${NSD_OnChange}. Nie każda kontrolka obsługuje oba zdarzenia. Na przykład, kontrolka etykiety może jedynie informować o kliknięciu na nią.
Gdy funkcja zwrotna zostaje wywołana, na stosie odłożona zostaje wartość uchwytu HWND, która musi być zdjęta, aby nie dopuścić do uszkodzenia stosu. W poniższym prostym przykładzie, nie jest to zbyt użyteczne. Ale, w bardziej zaawansowanych skryptach, w których kilka kontrolek jest powiązanych z tą samą funkcją zwrotną, wartość uchwytu HWND na stosie jest bardzo przydatna, informując użytkownika o tym, której kontrolki stan się zmienił.
The new example will respond to the user type hello in the text box.
!include nsDialogs.nsh !include LogicLib.nsh Name nsDialogs OutFile nsDialogs.exe XPStyle on Var Dialog Var Label Var Text Page custom nsDialogsPage nsDialogsPageLeave Page instfiles Function nsDialogsPage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateLabel} 0 0 100% 12u "Cześć, witam w nsDialogs!" Pop $Label ${NSD_CreateText} 0 13u 100% -13u "Wpisz tutaj jakiś tekst..." Pop $Text ${NSD_OnChange} $Text nsDialogsPageTextChange nsDialogs::Show FunctionEnd Function nsDialogsPageLeave ${NSD_GetText} $Text $0 MessageBox MB_OK "Wpisałeś:$\n$\n$0" FunctionEnd Function nsDialogsPageTextChange Pop $1 # $1 == $ Text ${NSD_GetText} $Text $0 ${If} $0 == "Cześć" MessageBox MB_OK "Dokładnie za tobą!" ${EndIf} FunctionEnd Section DetailPrint "Witaj świecie" SectionEnd
Jak dotąd, mamy stronę, która posiada klika podstawowych kontrolek. Ale co w przypadku, gdy użytkownik przejdzie do następnej strony i wróci do naszej? Bieżący kod, nie zapamięta danych wpisanych wcześniej przez użytkownika. Aby te dane zapamiętać, użyjemy używanej już funkcji zwrotnej, w której przechowamy wybór użytkownika w zmiennych. Wartości tych zmiennych wykorzystamy przy ponownym tworzeniu kontrolek. Aby lepiej zrozumieć zasadę zapamiętywania danych wprowadzanych przez użytkownika, dodamy również kontrolkę wyboru checkbox i użyjemy makra ${NSD_GetState} oraz ${NSD_SetState}, aby pobrać i ustawić stan tej kontrolki.
Dla większej przejrzystości kodu, usuńmy kilka powiadomień, wprowadzonych w poprzednim kroku poradnika.
!include nsDialogs.nsh !include LogicLib.nsh Name nsDialogs OutFile nsDialogs.exe XPStyle on Var Dialog Var Label Var Text Var Text_State Var Checkbox Var Checkbox_State Page custom nsDialogsPage nsDialogsPageLeave Page license Page instfiles Function .onInit StrCpy $Text_State "Wpisz tutaj jakiś tekst..." FunctionEnd Function nsDialogsPage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateLabel} 0 0 100% 12u "Cześć, witam w nsDialogs!" Pop $Label ${NSD_CreateText} 0 13u 100% 12u $Text_State Pop $Text ${NSD_CreateCheckbox} 0 30u 100% 10u "&Cosik" Pop $Checkbox ${If} $Checkbox_State == ${BST_CHECKED} ${NSD_Check} $Checkbox ${EndIf} # alternatywnie dla powyższego ${If}: #${NSD_SetState} $Checkbox_State nsDialogs::Show FunctionEnd Function nsDialogsPageLeave ${NSD_GetText} $Text $Text_State ${NSD_GetState} $Checkbox $Checkbox_State FunctionEnd Section DetailPrint "Witaj świecie" SectionEnd
nsDialogs::Create rect
Tworzy nowe okno dialogowe. Parametr rect określa identyfikator kontrolki, której lokalizacja zostanie powielona. Zazwyczaj wartością jest 1018, co oznacza wbudowane strony. Nowoczesny interfejs użytkownika posiada również kontrolkę 1040 dla strony powitalnej oraz końcowej.
Zwraca na stos uchwyt HWND nowego okna dialogowego lub błąd error.
nsDialogs::CreateControl class style extended_style x y width height text
Tworzy nową kontrolkę w bieżącym oknie dialogowym. Okno dialogowe musi istnieć, więc funkcja nsDialogs::Create musi być wywołana przed tą funkcją.
Zwraca na stos uchwyt HWND nowego okna dialogowego lub błąd error.
nsDialogs::Show
Wyświetla stronę. Wywołaj tę funkcję po wywołaniu funkcji nsDialogs::Create, nsDialogs::CreateControl oraz całej reszty.
Nie zwracana jest żadna wartość.
nsDialogs::SelectFileDialog mode initial_selection filter
Wyświetla użytkownikowi okno dialogowe wyboru pliku. Jeśli parametr mode ma wartość save, wyświetlane jest okno dialogowe zapisu pliku. Jeśli parametr mode ma wartość open, wyświetlane jest okno dialogowe wyboru pliku. Parametr filter jest listą dostępnych filtrów pliku, rozdzielonych znakiem pionowej kreski. Jeśli przekazana wartość parametru jest pusta, użyta zostanie domyślna wartość - Wszystkie pliki|*.*.
Parametr initial_selection może być użyty do przeglądania domyślnego katalogu z domyślną nazwą pliku. Jeśli parametr initial_selection jest pusty, domyślna nazwa pliku nie będzie ustalona i okno dialogowe wyboru pliku zostanie wyświetlone w bieżącym katalogu roboczym. Jeśli parametr initial_selection określa tylko nazwę pliku, na przykład "test.exe", okno dialogowe będzie ustawione, aby szukać pliku o nazwie test.exe w bieżącym katalogu roboczym. Jeśli parametr initial_selection określa tylko katalog, na przykład "C:\Program Files", okno dialogowe wyświetlane jest z zaznaczeniem tego katalogu, bez nazwy pliku. Jeśli parametr initial_selection określa katalog oraz nazwę pliku, na przykład "C:\Windows\System32\calc.exe", okno dialogowe zostanie ustawione na wyszukanie pliku o nazwie calc.exe w katalogu C:\Windows\System32.
Zwraca na stosie zaznaczony plik lub pusty ciąg znaków, jeśli użytkownik anulował operację.
nsDialogs::SelectFolderDialog title initial_selection
Wyświetla użytkownikowi okno dialogowe wyboru katalogu.
Zwraca na stosie zaznaczony katalog lub błąd "error", w przypadku gdy użytkownik anulował operację lub gdy wystąpił błąd.
nsDialogs::SetRTL rtl_setting
Włącza lub wyłącza tryb 'z prawej do lewej'. Jeśli parametr rtl_setting ma wartość 0, opcja jest wyłączana. Jeśli parametr rtl_setting ma wartość 1, opcja jest włączona. Funkcja ta musi być wywołana przed jakąkolwiek funkcją nsDialogs::CreateControl.
Nie zwracana jest żadna wartość.
nsDialogs::GetUserData control_HWND
Zwraca na stosie dane użytkownika powiązane z kontrolką. Aby ustawić te dane użyj funkcji nsDialogs::SetUserData.
nsDialogs::SetUserData control_HWND data
Wiąże dane data z kontrolką. Użyj funkcji nsDialogs::GetUserData, aby pobrać te dane.
Nie zwracana jest żadna wartość.
nsDialogs::OnBack function_address
Ustawia funkcję zwrotną dla przycisku 'Wstecz'. Funkcja ta zostanie wywołana, jeśli użytkownik kliknie przycisk 'Wstecz'. Aby zapobiec powrotowi użytkownika na ostatnią stronę, wykorzystaj funkcję Abort.
Użyj funkcji GetFunctionAddress, aby pobrać adres wymaganej funkcji zwrotnej.
Nie zwracana jest żadna wartość.
nsDialogs::OnChange control_HWND function_address
Ustawia funkcję zwrotną notyfikacji o zmianie stanu danej kontrolki. Za każdym razem, gdy kontrola zmienia swój stan, funkcja zostanie wywołana, a uchwyt HWND kontrolki zostanie odłożony na stosie.
Użyj funkcji GetFunctionAddress, aby pobrać adres wymaganej funkcji zwrotnej.
Nie zwracana jest żadna wartość.
nsDialogs::OnClick control_HWND function_address
Ustawia funkcję zwrotną notyfikacji o kliknięciu na daną kontrolkę. Za każdym razem, gdy kontrolka zostanie kliknięta, funkcja zostanie wywołana, a uchwyt HWND kontrolki zostanie odłożony na stosie.
Użyj funkcji GetFunctionAddress, aby pobrać adres wymaganej funkcji zwrotnej.
Nie zwracana jest żadna wartość.
nsDialogs::OnNotify control_HWND function_address
Ustawia funkcję zwrotną notyfikacji danej kontrolki. Za każdym razem, gdy kontrolka odbierze komunikat WM_NOTIFY, funkcja zostanie wywołana, a uchwyt HWND kontrolki, kod notyfikacji oraz wskaźnik na strukturę MNHDR zostanie odłożony na stosie.
Użyj funkcji GetFunctionAddress, aby pobrać adres wymaganej funkcji zwrotnej.
Nie zwracana jest żadna wartość.
nsDialogs::CreateTimer function_address timer_interval
Ustawia czasomierz, który wywoła funkcję zwrotną danej kontrolki w ustalonych, stałych odstępach czasu. Czas interwału określony jest w milisekundach.
Użyj funkcji GetFunctionAddress, aby pobrać adres wymaganej funkcji zwrotnej.
Nie zwracana jest żadna wartość.
Plik nagłówkowy nsDialogs.nsh zawiera mnóstwo makr, które sprawiają, że używanie wtyczki nsDialogs jest prostsze. Poniżej wymieniono te makra, wraz z zastosowaniem, składnią, parametrami wejściowymi i zwracanymi wartościami.
${NSD_Create*} x y width height text
Tworzy nową kontrolkę w bieżącym oknie dialogowym. Okno dialogowe musi istnieć, więc makro nsDialogs::Create musi być wywołane przed tą funkcją.
Dostępne warianty:
Zwraca na stosie uchwyt HWND nowego okna dialogowego lub błąd 'error'.
${NSD_OnChange} control_HWND function_address
Więcej szczegółów znajdziesz w opisie funkcji OnChange.
Przykład użycia znajdziesz w opisie Powiadomienia w czasie rzeczywistym.
${NSD_OnClick} control_HWND function_address
Więcej szczegółów znajdziesz w opisie funkcji OnClick.
${NSD_OnNotify} control_HWND function_address
Więcej szczegółów znajdziesz w opisie funkcji OnNotify.
${NSD_CreateTimer} function_address timer_interval
Więcej szczegółów znajdziesz w opisie funkcji CreateTimer.
${NSD_KillTimer} function_address
Więcej szczegółów znajdziesz w opisie funkcji KillTimer.
${NSD_AddStyle} control_HWND style
Dodaje jeden lub więcej styli okna do kontrolki. Poszczególne wartości styli, powinne być rozdzielone znakiem pionowej kreski `|'.
Opis stylu znajdziesz na stronach MSDN.
${NSD_AddExStyle} control_HWND style
Dodaje jeden lub więcej rozszerzonych styli okna do kontrolki. Poszczególne wartości styli, powinne być rozdzielone znakiem pionowej kreski `|'.
Opis stylu znajdziesz na stronach MSDN.
${NSD_GetText} control_HWND output_variable
Pobiera tekst kontrolki i przechowuje go w zmiennej output_variable. Szczególnie przydatne dla kontrolek tekstowych.
Przykład użycia znajdziesz w opisie Stan kontrolek.
${NSD_SetTextLimit} control_HWND limit
Ustala ograniczenie liczby znaków wprowadzanych do kontrolki tekstowej.
${NSD_GetState} control_HWND output_variable
Pobiera stan kontrolki wyboru CheckBox lub RadioButton. Możliwe są dwa stany: ${BST_CHECKED} (opcja zaznaczona) oraz ${BST_UNCHECKED} (opcja odznaczona).
Przykład użycia znajdziesz w opisie Pamięć.
${NSD_SetState} control_HWND state
Ustala stan kontrolki wyboru CheckBox lub RadioButton. Możliwe są dwa stany state: ${BST_CHECKED} (opcja zaznaczona) oraz ${BST_UNCHECKED} (opcja odznaczona).
Przykład użycia znajdziesz w opisie Memory.
${NSD_Check} control_HWND
Zaznacza kontrolkę wyboru CheckBox lub RadioButton. Rezultat jest taki sam, jak użycie makra ${NSD_SetState} z parametrem ${BST_CHECKED}.
${NSD_Uncheck} control_HWND
Odznacza kontrolkę wyboru CheckBox lub RadioButton. Rezultat jest taki sam, jak użycie makra ${NSD_SetState} z parametrem ${BST_UNCHECKED}.
Przykład użycia znajdziesz w opisie Pamięć.
${NSD_CB_AddString} combo_HWND string
Dodaje ciąg znaków do kontrolki pola kombinowanego ComboBox.
${NSD_CB_SelectString} combo_HWND string
Zaznacza ciąg znaków kontrolki pola kombinowanego ComboBox.
${NSD_LB_AddString} listbox_HWND string
Dodaje ciąg znaków do kontrolki listy Listbox.
${NSD_LB_GetCount} listbox_HWND output_variable
Pobiera liczbę ciągów znaków listy Listbox.
${NSD_LB_SelectString} listbox_HWND string
Zaznacza ciąg znaków na liście Listbox.
${NSD_LB_GetSelection} listbox_HWND output_variable
Pobiera zaznaczony ciąg znaków z listy Listbox. Zwraca pusty ciąg znaków, jeśli nie zaznaczono żadnego ciągu znaków.
${NSD_SetImage} control_HWND image_path output_variable
Wczytuje mapę bitową z lokalizacji określonej parametrem image_path i wyświetla ją na kontrolce o uchwycie control_HWND utworzonej przy użyciu makra ${NSD_CreateBitmap}. Uchwyt obrazka przechowywany jest w zmiennej użytkownika output_variable. Zmienna ta powinna być zwolniona przy użyciu makra ${NSD_FreeImage}.
Obrazek musi być wyodrębniony do katalogu na komputerze użytkownika. Dobrym miejscem jest katalog plików tymczasowych NSIS - $PLUGINSDIR.
!include nsDialogs.nsh Name nsDialogs OutFile nsDialogs.exe XPStyle on Page custom nsDialogsImage Page instfiles Var Dialog Var Image Var ImageHandle Function .onInit InitPluginsDir File /oname=$PLUGINSDIR\image.bmp "${NSISDIR}\Contrib\Graphics\Header\nsis-r.bmp" FunctionEnd Function nsDialogsImage nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateBitmap} 0 0 100% 100% "" Pop $Image ${NSD_SetImage} $Image $PLUGINSDIR\image.bmp $ImageHandle nsDialogs::Show ${NSD_FreeImage} $ImageHandle FunctionEnd Section SectionEnd
${NSD_SetStretchedImage} control_HWND image_path output_variable
Wczytuje i wyświetla mapę bitową, tak jak makro ${NSD_SetImage}, ale rozmiar mapy bitowej dopasowywany jest do rozmiaru kontrolki.
${NSD_SetIcon} control_HWND image_path output_variable
Makro to działa tak samo jak makro ${NSD_SetImage}, ale używane jest do wczytywania ikon utworzonych przy użyciu makra ${NSD_CreateIcon}. Uchwyt obrazka przechowywany jest w zmiennej użytkownika output_variable. Zmienna ta powinna być zwolniona przy użyciu makra ${NSD_FreeIcon}.
${NSD_SetIconFromInstaller} control_HWND output_variable
Wczytuje ikonkę używaną w instalatorze i wyświetla ją na kontrolce o uchwycie control_HWND utworzonej przy użyciu makra ${NSD_CreateIcon}. Uchwyt obrazka przechowywany jest w zmiennej użytkownika output_variable. Zmienna ta powinna być zwolniona przy użyciu makra ${NSD_FreeIcon}.
${NSD_FreeImage} image_handle
Zwalnia uchwyt mapy bitowej wczytanej wcześniej przy użyciu makra ${NSD_SetImage} lub ${NSD_SetStretchedImage}.
${NSD_FreeIcon} icon_handle
Zwalnia uchwyt ikonki wczytanej wcześniej przy użyciu makra ${NSD_SetIcon} lub ${NSD_SetIconFromInstaller}.
Czy wtyczka nsDialogs obsługuje pliki INI wtyczki InstallOptions?
Odpowiedź:Plik nagłówkowy nsDialogs.nsh zawiera funkcję CreateDialogFromINI, która pozwala na utworzenie okna dialogowego nsDialogs na podstawie pliku INI. Obsługuje ona wszystkie kontrolki, które obsługiwane są przez wtyczkę InstallOptions, ale nie obsługuje flag oraz notyfikacji. Przykład Examples\nsDialogs\InstallOptions.nsi pokazuje w jaki sposób można użyć tej funkcji.
W przyszłości dostępna będzie funkcja, która także tworzy skrypt.