« NSIS PL

InstallOptions 2

Ten dokument zgodny jest z NSIS 2.46

Wtyczka InstallOptions nie jest obecnie zalecana. W nowych skryptach zaleca się używać wtyczki nsDialogs.


Wprowadzenie


Wtyczka InstallOptions jest wtyczką NSIS, która pozwala na tworzenie niestandardowych stron dla instalatorów NSIS, umożliwiających komunikację z użytkownikiem oraz wprowadzanie dodatkowych informacji.

Okna dialogowe utworzone przez wtyczkę InstallOptions oparte są na plikach INI, które definiują jego kontrolki oraz ich właściwości. Pliki te mogą być modyfikowane poprzez skrypt w czasie wykonania

Format pliku INI opisany jest w artykule Wikipedii.



Struktura pliku INI


Plik INI posiada jedną wymaganą sekcję. Sekcja ta zawiera liczbę kontrolek, które zostaną utworzone podczas tworzenia okna. Plik INI zawiera również zmienną liczbę sekcji pól (Field), które są używane do tworzenia kontrolek, które zostaną wyświetlone.

Wymagana sekcja nazywa się: "Settings". Może przyjmować następujące wartości:


NumFields

(wymagane)

Liczba kontrolek wyświetlanych w oknie dialogowym.



Title

(opcjonalne)

Jeśli określony, zwraca tekst dla tytułu okna. W przeciwym przypadku, tekst tytułu okna nie jest zmieniany.



CancelEnabled

(opcjonalne)

Jeśli określony, nadpisuje ustawienia NSIS i włącza lub wyłącza przycisk Anuluj. Jeśli wartość ustawiona jest na 1, przycisk Anuluj będzie aktywny. Jeśli wartość ustawiona jest na 0, przycisk Anuluj będzie nieaktywny.



CancelShow

(opcjonalne)

Jeśli określony, nadpisuje ustawienia NSIS i wyświetla lub ukrywa przycisk Anuluj. Jeśli wartość ustawiona jest na 1, przycisk Anuluj będzie widoczny. Jeśli wartość ustawiona jest na 0, przycisk Anuluj będzie ukryty.



BackEnabled

(opcjonalne)

Jeśli określony, nadpisuje ustawienia NSIS i włącza lub wyłącza przycisk Wstecz. Jeśli wartość ustawiona jest na 1, przycisk Wstecz będzie aktywny. Jeśli wartość ustawiona jest na 0, przycisk Wstecz będzie nieaktywny.



CancelButtonText

(opcjonalne)

Nadpisuje tekst na przycisku Anuluj. Jeśli nie określony, tekst na przycisku Anuluj nie zostanie zmieniony.



NextButtonText

(opcjonalne)

Nadpisuje tekst na przycisku Dalej. Jeśli nie określony, tekst na przycisku Dalej nie zostanie zmieniony.



BackButtonText

(opcjonalne)

Nadpisuje tekst na przycisku Wstecz. Jeśli nie określony, tekst na przycisku Wstecz nie zostanie zmieniony.



Rect

(opcjonalne)

Nadpisuje domyślny ID obszaru rect, na którym jest wyświetlany. Pozwala to na zmianę rozmiaru IO na inny.



RTL

(opcjonalne)

Jeśli określono wartość 1 okno dialogowe wyświetlane jest jako lustrzane odbicie, a wszystkie teksty wyrównywane są do prawej. Makro INSTALLOPTIONS_EXTRACT automatycznie ustawia to pole na odpowiednią wartość w zależności od bieżącego języka instalatora dzięki zmiennej $(^RTL).



State

(wyjście)

Pole to ustawiane jest przez wtyczkę InstallOptions, przed wywołaniem funkcji walidacji niestandardowej strony, dla kontrolek, które posiadają flagę Notify (np. przycisk). Pole ustawiane jest, jeśli użytkownik wykona jakąś akcję (np. naciśnie przycisk).




Każde pole sekcji posiada nagłówek "Field #", w którym znak # musi być kolejnymi liczbami z zakresu 1 do NumFields. Każde pole sekcji może zawierać następujące wartości:


Type

(wymagane)

Typ kontrolki, która zostanie utworzona. Poprawnymi wartościami są: "Label", "Text", "Password", "Combobox", "DropList", "Listbox", "CheckBox", "RadioButton", "FileRequest", "DirRequest" "Icon", "Bitmap", "GroupBox", "HLine", "VLine", "Link" or "Button".


Label

Kontrolka Label używana jest do wyświetlania statycznego tekstu (np. etykieta dla kontrolki textbox).


Text

Kontrolka Text przyjmuje tekst wprowadzany przez użytkownika.


Password

Kontrolka Password przyjmuje tekst wprowadzany przez użytkownika oraz maskuje dane wejściowe przy użyciu znaku *.


Combobox

Kontrolka Combobox pozwala użytkownikowi na wpisywanie tekstu nie na liście typu popup.


Droplist

Kontrolka Droplist pozwala tylko na wybór elementów z listy.


Listbox

Kontrolka Listbox wyświetla wiele elementów i opcjonalnie umożliwia użytkownikowi na wybranie więcej niż jednego z nich.


CheckBox

Kontrolka CheckBox wyświetla pole wyboru wraz z etykietą.


RadioButton

Kontrolka RadioButton wyświetla przycisk typu radio z etykietą.


FileRequest

Kontrolka FileRequest wyświetla pole tekstowe i przycisk Przeglądaj. Klikając na ów przycisk, wyświetlone zostanie okno, z którego można wybrać poszukiwany przez użytkownika plik.


DirRequest

Kontrolka DirRequest wyświetla pole tekstowe i przycisk Przeglądaj. Klikając na ów przycisk, wyświetlone zostanie okno, z którego można wybrać poszukiwany przez użytkownika katalog.


Icon

Kontrolka Icon wyświetla ikonę. Jeśli pole Text jest puste, użyta zostanie ikonka instalatora.


Bitmap

Kontrolka Bitmap wyświetla mapę bitową.


GroupBox

Kontrolka GroupBox wyświetla ramkę, w której można zgrupować inne kontrolki.


HLine

Kontrolka HLine wyświetla poziomą linię, która rozdziela kontrolki.


VLine

Kontrolka VLine wyświetla pionową linię, która rozdziela kontrolki.


Link

Kontrolka Link wyświetla statyczny "gorący" tekst. Wyświetla statyczny "gorący" tekst. Gdy użytkownik naciśnie tę kontrolkę zawartość "State" (np http://...) zostanie wykonana przy użyciu polecenia ShellExecute. Alternatywnie, wartość "State" może być pominięta, a flaga NOTIFY użyta do wywołania skryptu NSIS. Więcej informacji znajdziesz poniżej, w opisie flagi "NOTIFY".


Button

Kontrolka Button wyświetla przycisk, którego można użyć tak samo jak kontrolkę "Link".



Text

(opcjonalne)

Określa tekst etykiet, pól wyboru lub przycisku typu radio. Dla kontrolki DirRequest określa tytuł okna dialogowego przeglądania. Dla kontrolek ikon oraz map bitowych określa ścieżkę dostępu do obrazka.

Uwaga
Dla etykiet, znaki \r\n zostaną przekonwertowane na nowe linie. Aby użyć znaku odwrotnego ukosnika back-slash w tekście musisz użyć innego ukośnika odwrotnego - \\. Opisane tutaj są funkcjami NSIS do konwersji tekstu z/na ten format.



State

(opcjonalne)

Określa stan kontrolki. Uaktualniany jest po zamknięciu przez użytkownika okna, więc można go odczytać z NSIS. Dla edycji tekstu, okien wybory katalogów oraz plików, jest to łańcuch znaków. Dla przycisków radio oraz pól wyboru, może to być wartość '0' lub '1' (odznaczony lub zaznaczony). Dla list, list kombinowanych i list rozwijalnych są to wybrane elementy rozdzielone znakiem ('|'). Dla łączy i Przycisków może określać coś do wykonania lub otwarcia (poprzez funkcję ShellExecute).

Uwaga
Dla pól Text z ustawioną flagą MULTILINE, znaki \r\n zostaną przekonwertowane na nowe linie. Aby użyć znaku odwrotnego ukosnika back-slash w tekście musisz użyć innego ukośnika odwrotnego - \\. Opisane tutaj są funkcjami NSIS do konwersji tekstu z/na ten format.



ListItems

(opcjonalne)

Lista elementów, które wyświetlane są w kontrolkach typu combobox, droplist, lub listbox.
Jest to pojedyncza linia tekstu, z elementami rozdzielanymi znakiem '|'



MaxLen

(opcjonalne)

Powoduje walidację zaznaczonej kontrolki, ograniczając maksymalną długość tekstu.
Jeśli użytkownik określi dłuższy tekst niż ten, pojawi się komunikat, po kliknięciu "OK" okno dialogowe nie zniknie.
Nie powinieneś używać tego w kontrolkach "combobox", jako że użytkownik nie może kontrolować tego co jest zaznaczone.
Wartość MaxLen może być przypisana maksymalnie dla 260 kontrolek "FileRequest" oraz "DirRequest".
Ignorowane jest w kontrolkach "Label".



MinLen

(opcjonalne)

Powoduje walidację zaznaczonej kontrolki, wymuszając wpisanie określonej minimalnej długości tekstu.
Jeśli użytkownik określi krótszy tekst niż ten, pojawi się komunikat, po kliknięciu "OK" okno dialogowe nie zniknie.
W przeciwieństwie do MaxLen, MinLen jest użyteczne dla kontrolek "Combobox". Ustawiając jej wartość "1" program wymusi na użytkowniku wybranie elementu.
Ignorowane jest w kontrolkach "Label".



ValidateText

(opcjonalne)

Jeśli pole nie przejdzie testu dla "MinLen" lub "MaxLen", pojawi się komunikat z tym tekstem.

Uwaga
Znaki \r\n zostaną przekonwertowane na nowe linie, dwa ukośniki odwroten back-slash zostanazmienione na jeden - \\. Opisane tutaj są funkcjami NSIS do konwersji tekstu z/na ten format.



Left, Right,Top, Bottom

(wymagane)

Pozycja, w której zostanie dana kontrolka wyświetlona w oknie dialogowym. Wszystkie rozmiary powinny być ustawione w jednostkach dialogowych. Aby pobrać prawidłowe wymiary dla kontrolki, projektuj swoje okno dialogowe przy pomocy edytora zasobów i następnie skopiuj wymiary do pliku INI.

Uwaga
Możesz określić ujemne współrzędne, aby ustalić odległość z prawej lub dolnej krawędzi.

Uwaga (2)
W kontrolkach typu lista kombinowana lub lista rozwijalna, wartość "bottom" nie jest używana w taki sam sposób.
W tym przypadku, wartość bottom jest maksymalnym rozmiarem okna, gdy lista jest wyświetlana. W każdym przypadku, rozmiary elementów listy kombinowanej są automatycznie dopasowywane do rozmiaru jednego z nich. Jeśli masz problemy z zobaczeniem rozwiniętej listy kombinowanej, sprawdź wartość bottom i upewnij się że jest wystarczająco długa. Wymaganą wysokością elementu jest liczba elementów na liście pomnożona przez 8, plus 20.

Uwaga (3)
Kontrolki FileRequest oraz DirRequest alokują 15 jednostek dialogowych dla przycisku Przeglądaj. Upewnij się, że kontrolki te są odpowiednio szerokie, tak żeby można było zobaczyć ich tekstową zawartość.



Filter

(opcjonalne)

Określa filtr, który używany jest w kontrolce "FileRequest".
Skonstruowany jest tak, że wpsiuje się pary wpisów, każda rozdzielona znakiem |.
Pierwsza z wartości jest tekstem, który wyświetlany jest w filtrze.
Druga z nich, jest wzorcem maski używanym do ograniczania wyświetlania plików.
Na przykład, możesz określić:
Filter=Pliki tekstowe|*.txt|Programy|*.exe;*.com|Wszystkie pliki|*.*
Jeśli nie określone, filtr domyślnie wskazuje na Wszystkie Pliki|*.*

Uwaga
Nie powinieneś wstawiać żadnych dodatkowych spacji pomiędzy znaki |.



Root

(opcjonalne)

Używane przez kontrolkę DirRequest do określenia katalogu nadrzędnego przeszukiwania. Domyślnie, pozwala użytkownikowi na przeglądanie dowolnego katalogu na komputerze. Pozwala ograniczyć przeglądanie do określonego katalogu w systemie.



Flags

(opcjonalne)

Określa dodatkowe flagi dla wyświetlania kolejnych kontrolek. Każda wartość powinna być rozdzielona znakiem |. Uważaj, żeby nie było żadnych spacji przy znaku |.


REQ_SAVE

Powoduje, że kontrolka "FileRequest" wyświetla okno dialogowe 'Zapisz jako'. Jeśli nie określone, używane jest okno dialogowe 'Otwórz'.


FILE_MUST_EXIST

Używane przez kontrolkę "FileRequest" do określenia czy wybrany plik musi istnieć.
Działa tylko wtedy gdy okno dialogowe 'Otwórz' jest wyświetlone.
Obecnie działa tylko z oknem dialogowym przycisku Przeglądaj.


FILE_EXPLORER

Używane przez kontrolkę "FileRequest", włącza widok żądania nowego pliku (zalecane)


FILE_HIDEREADONLY

Używane przez kontrolkę "FileRequest", ukrywa pole wyboru "Otwórz tylko do odczytu" w oknie dialogowym 'Otwórz'.


WARN_IF_EXIST

Używane przez kontrolkę "FileRequest" do wyświetlania komunikatu ostrzegawczego, że wybrany plik już istnieje.
Wyświetla komunikat ostrzegawczy tylko dla plików wybranych przy użyciu okna dialogowego przycisku Przeglądaj.


PATH_MUST_EXIST

Używane przez kontrolkę "FileRequest" do wymuszenia istnienia ścieżki dostepu. Ma na celu ochronę użytkownika, przed wpisaniem nieistniejącej ścieżki dostępu w oknie dialogowym przeglądania za plikiem.
Sprawdza tylko wybraną ścieżkę dostępu okna dialogowego przycisku Przeglądaj.


PROMPT_CREATE

Używane przez kontrolkę "FileRequest" do wyświetlania ostrzeżeń, jeśli wybrany plik nie istnieje. Mimo to, wciąż istnieje możliwość wybrania przez użytkownika pliku.
Wyświetla komunikat ostrzegawczy tylko dla plików wybranych przy użyciu okna dialogowego przycisku Przeglądaj.
Nie działa z REQ_SAVE.


RIGHT

Używane przez kontrolkę "Checkbox" oraz "Radiobutton" do określenia czy pole wyboru ma być po prawej stronie tekstu czy też po jego lewej stronie (domyślnie).


MULTISELECT

Używane przez kontrolkę "Listbox". Przełącza zazmaczenie lub odznaczenie łańcucha znaków, za każdym razem gdy użytkownik kliknie lub kliknie podwójnie ten wpis na liście. Użytkownik może wybrać dowolną liczbę wpisów. Jeśli ta flaga oraz flaga EXTENDEDSELCT nie jest określona, tylko jeden element będzie mógł być wybrany z listy.


EXTENDEDSELCT

Używane przez kontrolkę "Listbox". Pozwala wielu elementom na zaznaczenie przy użyciu klawisza SHIFT oraz klawisza myszy lub też specjalną kombinacją klawiszy. Jeśli ta flaga oraz flaga MULTISELECT nie jest określona, z listy będzie można wybrać tylko jeden element.


RESIZETOFIT

Pozwala kontrolce "Bitmap" na zmianę rozmiaru obrazka do rozmiaru kontrolki. Użyteczne również do obsługi własnych ustawień DPI. Bez tej flagi, obrazek będzie wyśrodkowany na określonym obszarze.


TRANSPARENT

Używane przez kontrolkę "Bitmap". Ukrywa każdy piksel o tym samym kolorze co piksel w lewym górnym rogu. Pozwala to na uzyskanie efektu przezroczystości. Flaga ta nie działa poprawnie w kombinacji z flagą RESIZETOFIT oraz mapami bitowymi z więcej niż 256 kolorami.


GROUP

Dodaj tę flagę do pierwszej z kontrolek grupy kontrolek, aby je zgrupować. Grupowanie kontrolek pozwala na tworzenie wielu grup przycisków typu radio i nawigacji pomiędzy nimi za pomocą klawiszy strzałek.


FOCUS

Ustawia fokus na określonej kontrolce, zamiast domyślnej pierwszej. Jeśli więcej niż jedno pole ma określoną tę flagę, tylko pierwsza z nich zostanie aktywowana.


NOTABSTOP

Nie zatrzymuje się na kontrolce, gdy użytkownik wciśnie klawisz tabulacji. Dodaj NOTABSTOP do wszystkich kontrolek grupy, poza pierwszą, aby mieć możliwość nawigacji pomiędzy nimi za pomocą klawisza tabulacji Tab.


DISABLED

Dezaktywuje kontrolkę.


ONLY_NUMBERS

Używane przez kontrolkę "Text". Wymusza wpisywanie tylko liczb do pola tekstowego.


MULTILINE

Używane przez kontrolkę "Text". Sprawia, że kontrolka akceptuje wielowierszowy tekst.


WANTRETURN

Używane przez kontrolkę "Text" z wielowierszowym tekstem. Pozwala na powrót karetki , po naciśnięciu przez użytkownika klawisza ENTER, po wpisaniu tekstu w pole tekstowe.


NOWORDWRAP

Używane przez kontrolkę "Text" z wielowierszowym tekstem. Wyłącza zawijanie wierszy, które występuje przy wpisywaniu długich linii tekstu. Długie linie zamiast przewijania. Określenie flagi HSCROLL daje taki sam rezultat.


HSCROLL

Wyświetla poziomy pasek przewijania. Użyty przez kontrolkę "Text" z wieloliniowym tekstem wyłącza zawijanie wierszy.


VSCROLL

Wyświetla pionowy pasek przewijania.


READONLY

Używane przez kontrolkę "Text". Uniemożliwia ona użytkownikowi wpisywanie lub edycję tekstu w kontrolce edycji - pozwala jednak użytkownikowi na zaznaczanie i kopiowanie tego tekstu.


NOTIFY

Używane przez kontrolki "Button", "Link", "CheckBox", "RadioButton", "ListBox" oraz "DropList". Powoduje, że InstallOptions wywołuje funkcję walidacji/wyjścia niestandardowej strony NSIS, za każdym razem gdy zmieni się zaznaczenie danej kontrolki. Twoja funkcja walidacji/wyjścia może odczytywać wartość "State" z sekcji "Settings", aby określić, która z kontrolek spowodowała zgłoszenie (jeśli w ogóle), oraz wykonać jakąś określoną akcję, po instrukcji Abort (aby NSIS wrócił do strony). Katalog Examples\InstallOptions zawiera przykładowy skrypt, który prezentuje sposób użycia tej flagi.



TxtColor

(opcjonalne)

Używane przez kontrolkę Link, w celu określenia koloru tekstu. Format: 0xBBRRGG (heksadecymalnie).



HWND, HWND2

(opcjonalne)

Wartość zwracana przez funkcję initDialog zawiera uchwyt HWND kontrolki tworzonej przez to pole. Może być użyte zamiast funkcji FindWindow oraz GetDlgItem. HWND2 zawiera uchwyt HWND dodatkowej kontrolki, na przykład przycisku Przeglądaj.



Plik nagłówkowy


Pliki nagłówkowe InstallOptions udostępniają makra i funkcje do łatwego tworzenia niestandardowych okien dialogowych. Możesz dołączyć je poprzez umieszczenie poniższej definicji na początku skryptu:

!include InstallOptions.nsh


Tworzenie okien dialogowych


Wyodrębnienie pliku INI


Pierwszym krokiem jest wyodrębnienie plików INI wtyczki InstallOptions w funkcji .onInit (lub funkcji un.onInit w deinstalatorze) przy użyciu makra INSTALLOPTIONS_EXTRACT. Pliki zostaną wyodrębnione do katalogu tymczasowego (katalog wtyczek NSIS), który zostanie automatycznie utworzony.

Function .onInit
  !insertmacro INSTALLOPTIONS_EXTRACT "ioFile.ini"
FunctionEnd

Jeśli plik INI znajduje się w innym katalogu, użyj makra INSTALLOPTIONS_EXTRACT_AS. Drugi parametr wskazuje na nazwę pliku w katalogu tymczasowym, która powinna być użyta jako wejście dla innych makr.

Function .onInit
  !insertmacro INSTALLOPTIONS_EXTRACT_AS "..\ioFile.ini" "ioFile.ini"
FunctionEnd

Wyświetlenie okna dialogowego


Możesz wywołać wtyczkę InstallOptions w funkcji strony zdefiniowanej przy użyciu polecenia Page lub UninstPage. Więcej informacji o systemie stron znajdziesz w dokumentacji NSIS (Skrypty -> Strony)

Page custom CustomPageFunction

Aby wyświetlić okno dialogowe, użyj makra INSTALLOPTIONS_DISPLAY:

Function CustomPageFunction ; Nazwa funkcji CustomPageFunction zdefiniowana jest polecenim Page
  !insertmacro INSTALLOPTIONS_DISPLAY "ioFile.ini"
FunctionEnd


Wejściowe dane użytkownika


Aby pobrać dane wejściowe od użytkownika, należy odczytać wartość State pola Field, używając makra INSTALLOPTIONS_READ:

!insertmacro INSTALLOPTIONS_READ $VAR "ioFile.ini" "Field #" "Name"


Zapis do pliku INI


Makro INSTALLOPTIONS_WRITE pozwala na zapis wartości do pliku INI, co pozwala na zmianę tekstu lub ustawień kontrolki w czasie wykonania:

!insertmacro INSTALLOPTIONS_WRITE "ioFile.ini" "Field #" "Name" "Value"


Znaki modyfikacji


Niektóre wartości InstallOptions są poprzedzane znakami modyfikacji (podobnie jak w ciągach znaków języka "C"). Aby umożliwić używanie znaków, które normalnie nie są poprawnymi wartościami pliku INI. Tymi wartościami są:

  • Pole ValidateText
  • Wartość Text pól Label
  • Wartość State pól Text, które mają ustawioną flagę MULTILINE

Znakiem modyfikacji jest tutaj znak odwrotnego ukośnika (back-slash - "\"), a dostępnymi sekwencjami są:

  • "\\" - Odwrotny ukośnik
  • "\r" - Powrót karetki (ASCII 13)
  • "\n" - Nowy wiersz (ASCII 10)
  • "\t" - Tab (ASCII 9)

Makra INSTALLOPTIONS_READ_CONVERT oraz INSTALLOPTIONS_WRITE_CONVERT automatycznie konwertują te znaki w kodzie instalatora. W kodzie deinstalatora użyj makr INSTALLOPTIONS_READ_UNCONVERT oraz INSTALLOPTIONS_WRITE_UNCONVERT.

Aby móc użyć te makra w skrypcie, musisz dołączyć funkcje konwertujące:

;Dla INSTALLOPTIONS_READ_CONVERT
  !insertmacro INSTALLOPTIONS_FUNCTION_READ_CONVERT
;Dla INSTALLOPTIONS_WRITE_CONVERT
  !insertmacro INSTALLOPTIONS_FUNCTION_WRITE_CONVERT
;Dla INSTALLOPTIONS_READ_UNCONVERT
  !insertmacro INSTALLOPTIONS_UNFUNCTION_READ_CONVERT
;Dla INSTALLOPTIONS_WRITE_UNCONVERT
  !insertmacro INSTALLOPTIONS_UNFUNCTION_WRITE_CONVERT


Walidacja wejścia


Jeśli chcesz sprawdzać wejściowe dane użytkownika (na przykład, sprawdzić czy użytkownik wypełnił odpowiednie pole), użyj funkcji wyjścia (Leave) polecenia Page oraz Abort, w przypadku, gdy walidacja nie powiedzie się:

Function ValidateCustom

  !insertmacro INSTALLOPTIONS_READ $R0 "test.ini" "Field 1" "State"
  StrCmp $R0 "" 0 +3
    MessageBox MB_ICONEXCLAMATION|MB_OK "Wpisz swoje imię."
    Abort

FunctionEnd


Zwracana wartość


Po utworzeniu okna dialogowego (używając funkcji Display lub Show), dostępna jest zwracana wartość:

  • success - użytkownik nacisnął przycisk "Dalej"
  • back - użytkownik nacisnął przycisk "Wstecz"
  • cancel - użytkownik nacisnął przycisk "Anuluj"
  • error - wystąpił błąd, okno dialogowe nie może być wyświetlone.

Wartość tę musisz sprawdzić, tylko w przypadku, gdy potrzebujesz zrobić coś specjalnego, jak wykonanie jakiejś operacji, po naciśnięciu przez użytkownika przycisku "Wstecz".

Makra INSTALLOPTIONS_DISPLAY_RETURN lub INSTALLOPTIONS_SHOW_RETURN służą do pobierania zwracanej wartości. Zostanie ona odłożona na stos. Aby ją pobrać użyj polecenia Pop.



Rezerwacja plików


Używając kompresji typu solid, należy zadbać o to, aby pliki, które będą wyodrębnione w wyniku działania funkcji interfejsu użytkownika, były ulokowane w bloku danych przed innymi. W przeciwnym razie, może wysąpić pewne opóźnienie przy wyświetlaniu strony

Aby temu zapobiec, przed kodem wszystkich sekcji oraz funkcji użyj polecenia ReserveFile dla wtyczki InstallOptions oraz plików INI.

ReserveFile "test.ini"
ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"


Czcionki i kolory


Jeśli chcesz używać własnych czcionek lub kolorów w oknach dialogowych InstallOptions, powinieneś użyć makr INSTALLOPTIONS_INITDIALOG oraz INSTALLOPTIONS_SHOW.

Makro INSTALLOPTIONS_INITDIALOG tworzy okno w pamięci, ale nie wyświetla go. Po wstawieniu makra, możesz ustawić czcionki oraz kolory, a następnie wstawić makro INSTALLOPTIONS_SHOW, aby wyświetlić to okno dialogowe.

Makro INSTALLOPTIONS_INITDIALOG macro odkłada uchwyt HWND tworzonego okna na stos. Operowanie uchwytami HWND dostępne jest dla każdej kontrolki dzięki wpisowi HWND odpowiedniego pola w pliku INI.

Przykład używania niestandardowych czcionek:

Var HWND
Var DLGITEM
Var FONT

Function FunctionName ; Nazwa funkcji FunctionName zdefiniowana jest poleceniem Page

  !insertmacro INSTALLOPTIONS_INITDIALOG "ioFile.ini"
  Pop $HWND ; Uchwyt HWND okna dialogowego
    
  !insertmacro INSTALLOPTIONS_READ $DLGITEM "ioFile.ini" "Field 1" "HWND"
    
  ; Zmienna $DLGITEM zawiera uchwyt HWND pierwszego pola
  CreateFont $FONT "Tahoma" 10 700 
  SendMessage $DLGITEM ${WM_SETFONT} $FONT 0
        
  !insertmacro INSTALLOPTIONS_SHOW

FunctionEnd


Historia wersji


Aktualna wersja: Biblioteka DLL w wersji 2.47 (4/27/2007)

  • Line breaks support in Link control
  • Added HLine and VLine controls

Historia wersji Starsze wydania


DLL version 2.46 (3/31/2007)

  • Use installer's name for message boxes

DLL version 2.45 (1/23/2007)

  • Added FOCUS flag for setting focus to a control other than the first

DLL version 2.44 (10/11/2005)

  • Added HWND and HWND2 entries to the INI file to avoid messy calculations of the correct control id

DLL version 2.43 (10/4/2005)

  • Fixed alteration of the working directory by FileRequest
  • Added WS_EX_LEFTSCROLLBAR in RTL mode

DLL version 2.42 (1/21/2005)

  • Added TRANSPARENT flag for BITMAP fields (funded by Chris Morgan)

DLL version 2.41 (8/5/2004)

  • Bitmaps are now automatically centered
  • Fixed a bug which prevented enabling the next button from the leave function of InstallOptions pages
  • Fixed a rare freeze

DLL version 2.4 (1/4/2004)

  • Initial focus is set in "initDialog" making it possible to override it from NSIS prior to calling "show"
  • When initial focus is to a Text field InstallOptions now follows standard Windows behaviour by having the text selected
  • Label and other static fields no longer have State= written to the INI file when leaving the dialog
  • NOTIFY flag can now be used with Link fields (State should be omitted in this case)
  • Likewise, State can now be used with Button fields (behaves the same as with Link fields)
  • NOTIFY flag can also now be used with ListBox and DropList fields to have NSIS notified when the selection changes
  • Meaning of RIGHT flag is now reversed in right-to-left language mode
  • HSCROLL and VSCROLL flags are no longer restricted to Text fields
  • Various Link field fixes

DLL version 2.3 (12/4/2003)

  • Added new control type "Button"
  • Added new flag "NOTIFY"
  • Added new flag "NOWORDWRAP" for multi-line text boxes
  • Reduced size down to 12K
  • Better RTL support

DLL version 2.2 (6/10/2003)

  • Added New control type LINK
  • \r\n converts to newline in Multiline edit box
  • Support for multiline edit box
  • Better tab order in DirRequest and FileRequest
  • Added READONLY option to text box
  • Minor fixes

DLL version 2.1 (3/15/2003)

  • \r\n converts to newline in both label Text and ValidateText
  • New browse dialog style (modern)
  • Word wrapping for check boxes and radio buttons
  • No ugly border for edit fields under XP
  • Scroll bar for list boxes
  • Works with SetStaticBkColor
  • DISABLED dir and file request fields now disable the browse button too
  • No more STATE value for labels
  • Minor fixes

DLL version 2.0 (1/4/2003)

  • Supports custom font and DPI settings (by Joost Verburg)
  • INI files should contain dialog units now, no pixels (by Joost Verburg)
  • RESIZETOFIT flag for Bitmap control (by Amir Szekely)
  • New documentation (by Joost Verburg)
  • New GROUP/NOTABSTOP/DISABLED flags

DLL version 1.7 beta (11/2/2002)

  • Added initDialog and show DLL functions

DLL version 1.6 beta (9/30/2002)

  • CancelConfirmIcon becomes CancelConfirmFlags and can now take the other common MessageBox flags

DLL version 1.5 beta (9/26/2002)

  • Made close [x] button behave like Cancel (thanks brainsucker)

DLL version 1.4 beta (9/4/2002)

  • Added Icon and Bitmap controls (by Amir Szekely)

DLL version 1.3 beta (8/15/2002)

  • Added CancelShow (by ORTIM)
  • Added pixel transformation for widgets (by ORTIM)

DLL version 1.2 beta (7/31/2002)

  • Added CancelEnabled (by ORTIM)
  • Added CancelConfirmCaption and CancelConfirmIcon (by Amir Szekely)

DLL version 1.1 beta (7/22/2002)

  • Font is now taken from the main NSIS window (by Amir Szekely)

DLL version 1.0 beta (12/16/2001)

  • Moved to DLL, no longer need parentwnd ini writing
  • Tons of changes - no longer fully compatible (see source for a big list)
  • removed support for silent installers (it seems the old version would bring up it's own dialog)

version 1.4 (11/18/2001)

  • Added Listbox controls.
  • Added MULTISELECT flag.
  • Made the HWND list for the parent window controls dynamically allocated. This prevents a crash if NSIS ever gets more than 150 controls on it's main window.
  • The TEXT property of DirRequest control can be used to specify an initial directory. The current directory is automatically selected when clicking the browse button of the DirRequest control.
  • Added ROOT property to DirRequest which can be used to set the root directory (mostly due to felfert)
  • Edit controls will now auto scroll (thanks felfert)
  • Fixed a problem where the window wouldn't draw properly on some systems (thanks felfert)

version 1.3 (11/03/2001)

  • Got rid of the call to RedrawWindow() because it's no longer needed with the WS_CLIPCHILDREN flag for NSIS.
  • Removed a few hardcoded limits of buffer sizes
  • Added Checkbox and RadioButton controls
  • Added RIGHT and CHECKED flags

version 1.2.2 (10/30/2001)

  • Additional size reductions. Further reduced the size down to 8k.
  • The text parameter to a combobox can now be used to specify the initial value
  • Changed from InvalidateRect() to RedrawWindow() to force a redraw after a browse dialog
  • On startup, set the flags of the NSIS window to include WS_CLIPCHILDREN. Otherwise, our controls don't get drawn right.

version 1.2.1 (10/28/2001)

  • Bug fix. ControlID for the caption and the OK button were reused by the first two controls. (Thanks Schultz)

version 1.2j (10/28/2001)

  • 8.5kb from 44kb. heh. (by Justin Frankel)

version 1.2 (10/28/2001)

  • Still 44k
  • Added the "FileRequest" and "DirRequest" control types (thanks Schultz)
  • Added "MinLen", "MaxLen", and "ValidateText" properties to fields
  • Added "Flags" as a way to specify additional parameters for controls
  • Few more changes to the documentation
  • Cleaned the code in a few places...still trying to make it smaller

version 1.1 (10/27/2001)

  • Added the "Title" option (thanks Alex)
  • Moved the OK button so it is in the same location as the buttons on the main NSIS window (thanks Alex)
  • Pressing "ENTER" will now automatically select the OK button (thanks Alex)
  • Slightly improved the documentation

version 1.01 (10/25/2001)

  • Fixed the SetFocus loop so it exits after the first control like it was supposed to
  • Added the license to the documentation

version 1.0 (10/25/2001)

  • Barely qualifies as a distribution


Autorzy


Oryginalna wersja - Michael Bishop

Wersja DLL - Nullsoft, Inc.

Wersja 2 DLL - Amir Szekely, ORTIM, Joost Verburg

Nowa dokumentacja - Joost Verburg



Licencja

Original version Copyright © 2001 Michael Bishop
DLL version 1 Copyright © 2001-2002 Nullsoft, Inc., ORTIM
DLL version 2 Copyright © 2003-2009 Amir Szekely, Joost Verburg, Dave Laundon

This software is provided 'as-is', without any express or implied warranty. In no event will the
authors be held liable for any damages arising from the use of this software.

Permission is granted to anyone to use this software for any purpose, including commercial
applications, and to alter it and redistribute it freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not claim that you wrote the
   original software. If you use this software in a product, an acknowledgment in the product
   documentation would be appreciated but is not required.
2. Altered versions must be plainly marked as such, and must not be misrepresented as being the
    original software.
3. This notice may not be removed or altered from any distribution.