Zmiana rozmiaru okna Inno Setup

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:

//(Jakaś funkcja/procedura)
if checkbox.Checked then
      begin //(ma rozpocząć zmianę rozmiaru wpInstalling w czasie "rzeczywistym")
  WizardForm.Width:= 200;
  WizardForm.Height:= 300;
      end;
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:

[code*]
//inport funkcji WinApi  
function SystemParametersInfo(uiAction, uiParam: LongWord;
  var Metrics: TRect; fWinIni: LongWord): LongBool;
  external '[email protected] 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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1