ShouldSkipPage Inno Setup

ShouldSkipPage Inno Setup
M5
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:22
0

Czy da się uruchomić funkcję ShouldSkipPage dopiero po wciśnięciu przycisku "Nowy" na jednej ze stron instalatora? Tak by nie była zależna od przycisku next ale od przycisku "Nowy".

Kopiuj
[code]
var
  Strona1: TWizardPage;
  NowyButton: TButton;
procedure NowyButtonOnClick(Sender: TObject);
begin
end;

procedure InitializeWizard();
begin
Strona1 := CreateCustomPage(wpselectdir, 'Strona1', 'Text');

 NowyButton:= TButton.create(Wizardform);
 with NowyButton do
 begin
  NowyButton.Left := 20
  NowyButton.Top := WizardForm.CancelButton.Top;
  NowyButton.Width := WizardForm.CancelButton.Width;
  NowyButton.Height := WizardForm.CancelButton.Height;
  NowyButton.Caption := 'Nowy';
  NowyButton.OnClick := @NowyButtonOnClick;
  NowyButton.Parent := WizardForm
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean; //Jeśli przycisk "nowy"=kliknięty funkcja pomija strony
begin
  if  (PageID = wpWelcome) or (PageID = wpSelectDir) then
  begin
    result := True;
    exit;
  end;
  result := false;
end;
KA
hmm nie wiem może nie rozumiem o co chodzi ale wydaje mi się ze możesz dać zmienną globalną która przyjmie określoną wartość po naciśnięciu przycisku nowy a w funkcji ShouldSkipPage sprawdzać wartość tej zmiennej.
M5
Pytanie tylko jaką zmienną dać i jaką wartość ma przejąć. Nie znam niestety żadnych wartości dotyczących tej funkcji. Jeszcze jedno pytanie jak nazywa się przycisk instalacji w instalatorze? Skoro przycisk "dalej" to (wizardform.nextbutton) to jaką nazwę ma przycisk instalacji? Chyba ze tylko Caption na odpowiedniej stronie jest zmieniane to proszę to zignorować.
flowCRANE
Szukaj pod "WizardForm.InstallButton";
M5
Szukałem i doszedłem do wniosku, że "WizardForm.InstallButton" nie istnieje bo nigdzie nie mogę tego znaleźć. Raczej jest to tylko zmieniony caption przycisku dalej.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:4 minuty
  • Lokalizacja:Tuchów
  • Postów:12164
1

Nie znam się na InnoSetup bo nigdy z niego nie korzystałem (wolałem samodzielnie tworzyć instalatory - bardzo fajna zabawa), ale mam tylko jedną uwagę co do tego kodu:

Kopiuj
function ShouldSkipPage(PageID: Integer): Boolean; //Jeśli przycisk "nowy"=kliknięty funkcja pomija strony
begin
  if  (PageID = wpWelcome) or (PageID = wpSelectDir) then
  begin
    result := True;
    exit;
  end;
  result := false;
end;

Można go skrócić do jednej linii:

Kopiuj
function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := (PageID = wpWelcome) or (PageID = wpSelectDir);
end;

lub tak:

Kopiuj
function ShouldSkipPage(PageID: Integer): Boolean;
begin
  Result := PageID in [wpWelcome, wpSelectDir];
end;

Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
M5
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:22
0

Furious Programming ta pierwsza opcja działa ale ta druga monituję błąd "Type Mismatch". A czy można zrobić tak aby po naciśnięciu przycisku przeniosło do mojej strony?

flowCRANE
Hmmm, u mnie taka konstrukcja zadziałała... Odnośnie przechodzenia do Twojej strony - jaka procedura realizuje zmianę stron? W niej właśnie musisz się przenieść do Twojej;
M5
No właśnie tylko jaka to procedura...? nie mam pojęcia.
flowCRANE
Ja nie mam InnoSetup i nigdy z niego nie korzystałem, ale na pewno JEST - poszukaj tylko;
MA
  • Rejestracja:ponad 16 lat
  • Ostatnio:14 dni
1

Może podam przykładowy kod, z którego mechanizmy możesz wykorzystać, bo nie wiem, co tam dokładnie chcesz zrobić:

Kopiuj
[Code]
var
  Strona1: TWizardPage;
  NowyButton: TButton;
  BtnNowyClicked: Boolean;//globalna zmienna logiczna określająca, że przycisk "Nowy" został już kliknięty

procedure NowyButtonOnClick(Sender: TObject); //przechwycenie kliknięcia przycisku "Nowy"
begin
  If WizardForm.CurPageID=Strona1.ID {wpSelectSir} then //jeśli kliknąłeś przycisk "Nowy" gdy aktywna była Twoja strona {wyboru folderu}
    MsgBox('Kliknąłeś przycisk "Nowy" gdy Twoja strona jest widoczna!', mbInformation, MB_OK);  
  BtnNowyClicked:=true; //włączenie aktywności funkcji ShouldSkipPage (pominięcie 1 strony i wyboru folderu)
end;
 
procedure InitializeWizard();
begin
  BtnNowyClicked:=false; //początkowy stan flagi określającej, że przycisk "Nowy" został już kliknięty

  Strona1 := CreateCustomPage(wpselectdir, 'Strona1', 'Text');
 
  NowyButton:= TButton.create(WizardForm);
  with NowyButton do
  begin
    NowyButton.Left := 20;
    NowyButton.Top := WizardForm.CancelButton.Top;
    NowyButton.Width := WizardForm.CancelButton.Width;
    NowyButton.Height := WizardForm.CancelButton.Height;
    NowyButton.Caption := 'Nowy';
    NowyButton.OnClick := @NowyButtonOnClick;
    NowyButton.Parent := WizardForm;
  end;
end;
 
function ShouldSkipPage(PageID: Integer): Boolean; //jeśli funkcja zwróci true, strona o ID=PageID nie będzie wyświetlana
begin
  Result := BtnNowyClicked and ((PageID=wpWelcome)or(PageID=wpSelectDir));//Jeśli przycisk "Nowy" został kliknięty, nie będzie wyświetlana 1 strona i wyboru folderu
end;

function NextButtonClick(CurPageID: Integer): Boolean; //przechwycenie kliknięcia przycisku "Next" (lub "Install")
Begin
  If CurPageID=wpReady then //jeśli kliknięto przycisk "Next" gdy ma Caption "Install"
  Begin
    MsgBox('Kliknąłeś przycisk "Install"', mbInformation, MB_OK);  
    Result:=false; //np. jeśli ma być zablokowane rozpoczęcie instalacji (brak reakcji na kliknięcie przycisku "Install")
  End
  else Result:=true; //w tej sytuacji kliknięcie przycisku "Next" wywoła właściwą akcję, czyli przeskok na następną stronę)
End; 

Mam nadzieję, że to się kompiluje, bo pisałem z pamięci. ;)

M5
Masz dobrą pamięć. ;-) Ale jest jeden mały haczyk dlatego, że gdy kliknę "nowy" to dopiero next przenosi mnie na moją stronę. A chodzi oto by to "nowy" przeniósł od razu na moją stronę.
M5
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:22
0

Wymyśliłem też troszkę inną drogę by osiągnąć pożądany efekt.

Kopiuj
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
var
  Strona1: TWizardPage;
  NowyButton, Nowy1Button, Nowy2Button, Nowy3Button: TButton;
  label1, label2: Tlabel;

procedure konfiguracjaOnClick(Sender: TObject);    
begin
NowyButton.hide
nowy2button.show
Nowy2Button.left:=100
Nowy1Button.Show
Nowy1Button.left:=nowybutton.left
Nowy3Button.hide
Wizardform.WelcomeLabel1.Hide;
Wizardform.WelcomeLabel2.Hide;
Wizardform.wizardbitmapimage.hide
Wizardform.diredit.Show
Wizardform.DirBrowseButton.show
Wizardform.DirBrowseButton.Parent:= WizardForm.welcomepage;
label1.show;
wizardform.dirbrowsebutton.show
end;

procedure WsteczOnClick(Sender: TObject);    
begin
NowyButton.Show
Nowy1Button.hide
Nowy1Button.left:=nowybutton.left
Nowy2Button.hide
label1.hide
Wizardform.DirBrowseButton.hide
Wizardform.diredit.hide
Wizardform.wizardbitmapimage.show
Wizardform.WelcomeLabel1.show;
Wizardform.WelcomeLabel2.show;
end;

procedure DalejOnClick(Sender: TObject);    
begin
Nowy3Button.Show
Nowy3Button.left:= NowyButton.left
Nowy2Button.hide
NowyButton.Hide
Nowy1Button.Hide
Wizardform.diredit.Hide
Wizardform.diredit.parent:=Wizardform.welcomepage
Wizardform.diredit.left:= 40
Wizardform.diredit.top:= 160
Wizardform.DirBrowseButton.Hide
label1.Hide
label2.show
end;

procedure Wstecz2OnClick(Sender: TObject);   
begin
label2.hide
nowy3button.hide
Wizardform.diredit.Show
Wizardform.diredit.parent:=Wizardform.welcomepage
Wizardform.diredit.left:= 40
Wizardform.diredit.top:= 160
Wizardform.DirBrowseButton.show
label1.show;
wizardform.dirbrowsebutton.show
nowy1button.show
nowy2button.show
end;

procedure InitializeWizard();
begin
WizardForm.Position:=poscreencenter;
Strona1 := CreateCustomPage(wpselectdir, 'Strona1', 'Text');
 
 NowyButton:= TButton.create(Wizardform);
 with NowyButton do
 begin
  NowyButton.Left := 20
  NowyButton.Top := WizardForm.CancelButton.Top;
  NowyButton.Width := WizardForm.CancelButton.Width;
  NowyButton.Height := WizardForm.CancelButton.Height;
  NowyButton.Caption := 'Dalej';
  NowyButton.OnClick := @konfiguracjaOnClick;
  NowyButton.Parent := WizardForm
end;

 Nowy1Button:= TButton.create(Wizardform);
 with Nowy1Button do
 begin
  Nowy1Button.Left := 120
  Nowy1Button.Top := WizardForm.CancelButton.Top;
  Nowy1Button.Width := WizardForm.CancelButton.Width;
  Nowy1Button.Height := WizardForm.CancelButton.Height;
  Nowy1Button.Caption := 'Wstecz';
  Nowy1Button.OnClick := @WsteczOnClick;
  Nowy1Button.Parent := WizardForm
end;

 Nowy2Button:= TButton.create(Wizardform);
 with Nowy2Button do
 begin
  Nowy2Button.Left := 200
  Nowy2Button.Top := WizardForm.CancelButton.Top;
  Nowy2Button.Width := WizardForm.CancelButton.Width;
  Nowy2Button.Height := WizardForm.CancelButton.Height;
  Nowy2Button.Caption := 'Dalej';
  Nowy2Button.OnClick := @DalejOnClick;
  Nowy2Button.Parent := WizardForm
end;

 Nowy3Button:= TButton.create(Wizardform);
 with Nowy3Button do
 begin
  Nowy3Button.Left := 240
  Nowy3Button.Top := WizardForm.CancelButton.Top;
  Nowy3Button.Width := WizardForm.CancelButton.Width;
  Nowy3Button.Height := WizardForm.CancelButton.Height;
  Nowy3Button.Caption := 'Wstecz';
  Nowy3Button.OnClick := @Wstecz2OnClick;
  Nowy3Button.Parent := WizardForm
end;

label1:= Tlabel.create(Wizardform);
 with label1 do
 begin
  AutoSize:=False;
  WordWrap:=True;
  Left := 40
  Top := 120
  Width := 200
  Caption := 'Konfiguracja.';
  Parent := WizardForm.welcomepage
  transparent:= true;
  font.size:= 15
  font.style:= [fsBold]
  height:= 30
end;

label2:= Tlabel.create(Wizardform);
 with label2 do
 begin
   AutoSize:=False;
  WordWrap:=True;
  Left := 40
  Top := 120
  Width := 500
  Caption := 'Instalowanie dodatkowych programów.';
  Parent := WizardForm.welcomepage          
  transparent:= true;
  font.size:= 15
  height:= 30
  font.style:= [fsBold]
end;
nowy1button.hide
nowy3button.hide
nowy2button.hide
label1.hide
label2.hide
Wizardform.diredit.hide
wizardform.dirbrowsebutton.hide
wizardform.dirbrowsebutton.left:= 380
wizardform.dirbrowsebutton.top:= 160
Wizardform.diredit.parent:=Wizardform.welcomepage
Wizardform.diredit.left:= 40
Wizardform.diredit.top:= 160
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID =wpLicense) or (PageID =wpInfoBefore)or(PageID =wpUserInfo)or(PageID =wpSelectDir)or(PageID =wpSelectComponents)or(PageID =wpSelectProgramGroup)or(PageID =wpSelectTasks)or(PageID =wpReady)then
  Result:= True;
end;

Procedure CurPageChanged(CurPageID: Integer);
 begin
if CurPageID = wpWelcome then
begin
WizardForm.nextbutton.Caption:= 'Na stronę'
end;
end;
edytowany 1x, ostatnio: marcin55246
MA
  • Rejestracja:ponad 16 lat
  • Ostatnio:14 dni
1

Co do przełączenia na Twoją stronę po kliknięciu przycisku "Nowy":

Kopiuj
Procedure ScrollToStrona1; 
Begin
 If WizardForm.CurPageID<=wpSelectDir then //jeśli jesteś na którejś ze stron przed Twoją stroną
   While WizardForm.CurPageID<>Strona1.ID do //pętla przewijania stron w przód aż będzie aktywna Twoja strona
     WizardForm.NextButton.OnClick(WizardForm.NextButton);
 If WizardForm.CurPageID>=wpSelectComponents then //jeśli jesteś na którejś ze stron po Twojej stronie
   While WizardForm.CurPageID<>Strona1.ID do //pętla przewijania stron w tył aż będzie aktywna Twoja strona
     WizardForm.BackButton.OnClick(WizardForm.BackButton);
End;

procedure NowyButtonOnClick(Sender: TObject); //przechwycenie kliknięcia przycisku "Nowy"
begin 
  BtnNowyClicked:=true; //włączenie aktywności funkcji ShouldSkipPage (pominięcie 1 strony i wyboru folderu)
  ScrollToStrona1; //przewinięcie na stronę Strona1
end;
 
M5
Dokładnie oto mi chodziło. Dziękuję ;)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)