Zmiana rozmiaru okna Inno Setup

Zmiana rozmiaru okna Inno Setup
M5
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 9 lat
  • Postów:22
0

Chciałbym się dowiedzieć jak mogę za pomocą zaznaczonego checkbox-a zmienić rozmiar strony. Chodzi mi o to, że gdy na wybranej stronie zaznaczę checkbox, to strona w czasie "rzeczywistym" zmieni swój rozmiar okna i pokażę się w dolnym rogu ekranu a po odznaczeniu powróci do wcześniejszego rozmiaru/stanu. Widziałem takie coś w instalatorze, ale nie wiem jak to napisać. Mile widziane jakieś strony z przykładowymi skryptami dotyczące tego.

myślę, że to powinno być coś takiego, ale co mam tu napisać to nie wiem:

Kopiuj
//(Jakaś funkcja/procedura)
if checkbox.Checked then
      begin //(ma rozpocząć zmianę rozmiaru wpInstalling w czasie "rzeczywistym")
  WizardForm.Width:= 200;
  WizardForm.Height:= 300;
      end;
KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Gorlice
1

Nie wiem czemu ma służyć ten wynalazek ale niech będzie...
Wiadomo trzeba zrobić sekcję [CODE*] (bez * przed ] ale skrypt forum coś psuje posta i musiałem dodać) a w niej procedurę InitializeWizard (jeżeli istnieje to jest wywoływana przed pojawieniem się okienka instalatora (coś mniej więcej jak OnCreate formy w Delphi) po to aby ustawić procedurę zdarzenia OnClick dla chceckbox'a ja akurat tworze nową zakładkę (po stronie powitalnej) i na niej chceckboxa. No i jest procedura MyCheckBoxClickEvent tam sprawdzasz czy zaznaczony czy nie i podejmujesz odpowiednie działania jak w przykładzie poniżej:

Kopiuj
[code*]
//inport funkcji WinApi  
function SystemParametersInfo(uiAction, uiParam: LongWord;
  var Metrics: TRect; fWinIni: LongWord): LongBool;
  external 'SystemParametersInfoA@user32.dll stdcall';     

const
  SPI_GETWORKAREA = $00000030; //potrzebna stala
  PLUS_W = 100; //o ile zwiekszamy szerokosc
  PLUS_H = 50; //o ile zwiekszamy wysokosc
      
var
   DefWizSizeRect: TRect; //tu zapamietamy rozmiar i polozenie przed zmiana
   MyPage: TWizardPage;

function GetWorkArea: TRect; //funkcja pobiera rozmiar pulpitu Windows
begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, Result, 0);
end; 

procedure MyCheckBoxClickEvent(Sender : TObject); //procedura zdarzenia OnClick CheckBoxa
var
  DesktopRect: TRect;
begin
  if TCheckBox(Sender).Checked then
  begin     
    //zapamietaj rozmiar i polozenia
    DefWizSizeRect.Left:= WizardForm.Left;
    DefWizSizeRect.Top:= WizardForm.Top;
    DefWizSizeRect.Right:= WizardForm.Width;
    DefWizSizeRect.Bottom:= WizardForm.Height;
    
    DesktopRect:= GetWorkArea; //pobierz rozmiar pulpitu
    //zmiana rozmiaru
    WizardForm.Width:= WizardForm.Width + PLUS_W;
    WizardForm.Height:= WizardForm.Height + PLUS_H ;
    
    //trzeba dopasowac polozenie i rozmiar pozostalych elementow
    WizardForm.InnerPage.Width:= WizardForm.InnerPage.Width + PLUS_W;
    WizardForm.InnerPage.Height:= WizardForm.InnerPage.Height + PLUS_H ;
    WizardForm.OuterNotebook.Width:= WizardForm.OuterNotebook.Width + PLUS_W;
    WizardForm.InnerNotebook.Width:=  WizardForm.InnerPage.Width + PLUS_W;
    
    WizardForm.MainPanel.Width:= WizardForm.MainPanel.Width + PLUS_W;
    WizardForm.WizardSmallBitmapImage.Left:= WizardForm.WizardSmallBitmapImage.Left + PLUS_W;
    WizardForm.PageNameLabel.Width:= WizardForm.PageNameLabel.Width + PLUS_W; 
    WizardForm.PageDescriptionLabel.Width:= WizardForm.PageDescriptionLabel.Width + PLUS_W; 
    WizardForm.Bevel1.Width:= WizardForm.Bevel1.Width + PLUS_W; 
    
    WizardForm.Bevel.Width:= WizardForm.Bevel.Width + PLUS_W; 
    WizardForm.Bevel.Top:= WizardForm.Bevel.Top + PLUS_H ;    
    WizardForm.CancelButton.Left:=  WizardForm.CancelButton.Left + PLUS_W;
    WizardForm.NextButton.Left:=  WizardForm.NextButton.Left + PLUS_W;
    WizardForm.BackButton.Left:=  WizardForm.BackButton.Left + PLUS_W;
    WizardForm.CancelButton.Top:=  WizardForm.CancelButton.Top + PLUS_H ;
    WizardForm.NextButton.Top:=  WizardForm.NextButton.Top + PLUS_H ;
    WizardForm.BackButton.Top:=  WizardForm.BackButton.Top + PLUS_H;    
   
    //zmiana polozenia w tym wypadku prawy dolny rog pulpitu
    WizardForm.Left:= DesktopRect.Right - WizardForm.Width;
    WizardForm.Top:= DesktopRect.Bottom - WizardForm.Height;
  end
  else
  begin
    //stare polozenie i rozmiar elementow
    WizardForm.InnerPage.Width:= WizardForm.InnerPage.Width - PLUS_W;
    WizardForm.InnerPage.Height:= WizardForm.InnerPage.Height - PLUS_H ;
    WizardForm.OuterNotebook.Width:= WizardForm.OuterNotebook.Width - PLUS_W;
    WizardForm.InnerNotebook.Width:=  WizardForm.InnerPage.Width - PLUS_W;
    
    WizardForm.MainPanel.Width:= WizardForm.MainPanel.Width - PLUS_W;
    WizardForm.WizardSmallBitmapImage.Left:= WizardForm.WizardSmallBitmapImage.Left - PLUS_W;
    WizardForm.PageNameLabel.Width:= WizardForm.PageNameLabel.Width - PLUS_W; 
    WizardForm.PageDescriptionLabel.Width:= WizardForm.PageDescriptionLabel.Width - PLUS_W; 
    WizardForm.Bevel1.Width:= WizardForm.Bevel1.Width - PLUS_W; 
    
    WizardForm.Bevel.Width:= WizardForm.Bevel.Width - PLUS_W; 
    WizardForm.Bevel.Top:= WizardForm.Bevel.Top - PLUS_H ;    
    WizardForm.CancelButton.Left:=  WizardForm.CancelButton.Left - PLUS_W;
    WizardForm.NextButton.Left:=  WizardForm.NextButton.Left - PLUS_W;
    WizardForm.BackButton.Left:=  WizardForm.BackButton.Left - PLUS_W;
    WizardForm.CancelButton.Top:=  WizardForm.CancelButton.Top - PLUS_H ;
    WizardForm.NextButton.Top:=  WizardForm.NextButton.Top - PLUS_H ;
    WizardForm.BackButton.Top:=  WizardForm.BackButton.Top - PLUS_H;   
  
    //przywroc rozmiar i polozenie formy
    WizardForm.Left:= DefWizSizeRect.Left;
    WizardForm.Top:= DefWizSizeRect.Top;
    WizardForm.Width:= DefWizSizeRect.Right;
    WizardForm.Height:= DefWizSizeRect.Bottom;
  end;
end;

procedure InitializeWizard();
var
  MyCheckBox: TNewCheckBox;
begin
  MyPage:= CreateCustomPage(wpWelcome, 'Strona Testowa', 'Test powiększenia');

  MyCheckBox:= TNewCheckBox.Create(MyPage);
  MyCheckBox.Caption:= 'Powiększ :)';
  MyCheckBox.OnClick:= @MyCheckBoxClickEvent;
  MyCheckBox.Parent:= MyPage.Surface;
  //tu mozna by nadac left, top ale domyslny mi odpowiada
end;

Oczywiście to przykład i na pewno są pewne niedociągnięcia np. trzeba by się jeszcze zabezpieczyć przed przejściem do następnej lub poprzedniej strony i na to reagować czyli sprawdzić czy była zmiana rozmiarów jeżeli tak przywracać poprzednie no ale to już zostawiam Tobie :)


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 2x, ostatnio: kAzek
M5
Dzięki wielkie oto mi chodziło, wszystko działa oczywiście zabezpieczenia przed przejściem do następnej str. też będą potrzebne, będę musiał coś wymyślić.
M5
Już wymyśliłem na stronie po zaznaczonym checkboxie jest uruchamiane to: MyCheckBox.Checked:= False;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.