Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Raf-9600,

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program
AppId=The_Best_AppId_Ever_Made

[Components]
Name: Game; Description: Game_Component;
Name: Game\Lokal; Description: Game_Local_Component; Flags: exclusive
Name: Game\Full; Description: Game_Full_Component; Flags: exclusive


[Files]
Source: Game.exe; DestDir: {app}
Source: d2data.mpq; DestDir: {app}


[code]
var
  Error_Form: TSetupForm;
  No_Clicked: boolean;

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';


procedure Error_Form_Button_OnClick(Sender: TObject);
begin
  case TButton(Sender).Caption of

    SetupMessage(msgButtonYes):
    begin
      with WizardForm do
      begin
        ComponentsList.Checked[2] := True;  /// где 2 - индекс компонета - 3-й по списку (отсчёт от 0)
        Enabled := True;
        NextButton.OnClick(nil);
      end;
    end;
    
    SetupMessage(msgButtonNo):
    begin
      with WizardForm do
      begin
        Enabled := True;
        No_Clicked := True;
        NextButton.OnClick(nil);
      end;
    end;
  end;
  
  Error_Form.Hide;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
  AppPath: String;
  Cycle: Integer;
  NO_Button, YES_Button: TButton;
begin
  Result := True;
  AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|}'));

  if (CurPageID = wpSelectComponents) and  IsComponentSelected('Game\Lokal') then
  begin
    if not FileExists(AppPath + 'Game.exe') and not FileExists(AppPath + 'd2data.mpq') and not No_Clicked then
    begin
      Result := False;
      WizardForm.Enabled := False;
      
      Error_Form := CreateCustomForm;
      with Error_Form do
      begin
        Position := poScreenCenter;
        BorderStyle := bsDialog;
        ClientWidth := ScaleX(250);
        ClientHeight := ScaleY(100);
        Caption := SetupMessage(msgErrorTitle);
        Color := clBtnFace;
        DeleteMenu(GetSystemMenu(Error_Form.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
        SetClassLong(Error_Form.Handle, -26, GetClassLong(Error_Form.Handle, -26) or $200); /// блокировка комбинации alt + f4

        with TLabel.Create(nil) do
        begin
          SetBounds(ScaleX(15), ScaleY(10), ScaleX(290), ScaleY(30));
          AutoSize := False;
          Caption := 'будет выбран компнент Game_Full';
          WordWrap := True;
          Parent := Error_Form;
          Font.Size := 9;
        end;

        YES_Button := TButton.Create(nil)
        with YES_Button do
        begin
          Caption := SetupMessage(msgButtonYes);
          Parent := Error_Form;
          SetBounds(Error_Form.Width - ScaleX(90), ScaleY(65), ScaleX(71), ScaleY(25));
          Cursor := crHand;
          Enabled := False;
          OnClick := @Error_Form_Button_OnClick;
        end;

        NO_Button := TButton.Create(nil)
        with NO_Button do
        begin
          Caption := SetupMessage(msgButtonNo);
          Parent := Error_Form;
          SetBounds(Error_Form.Width - ScaleX(175), ScaleY(65), ScaleX(71), ScaleY(25));
          Cursor := crHand;
          Enabled := False;
          OnClick := @Error_Form_Button_OnClick;
        end;

        Application.Title := ' ' + SetupMessage(msgErrorTitle);

        Show;
        Repaint;
        
        Cycle := 10;
        
        repeat
          begin
            Sleep(1000);
            Cycle := Cycle - 1;
            Error_Form.Caption := IntToStr(Cycle) + ' Секунд';
          end;
        until (Cycle = 0)
        

        YES_Button.Enabled := True;
        NO_Button.Enabled := True;
      end;
        
    end;
  end;
end;

procedure InitializeWizard();
begin
  No_Clicked := False;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:00, 27-08-2012 | #705