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

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

Аватара для Mailchik

Пользователь


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

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


Цитата Crazy Noise:
А как сделать, чтоб когда набираешь код, то автоматически переходило в следующее окошко, а не так чтоб мышью выбирать? Возможно так сделать? »
В двух вариантах:
Цитата Crazy Noise:
если в инсталляторе окошки пусты, либо не хватает буквы или цифры то при нажатии на далее выводил сообщение »
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
MESSAGES_1=Ввод серийного номера
MESSAGES_2=Серийный номер нужен для активации программного обеспечения.
MESSAGES_3=Для активации необходимо ввести серийный номер поставляемый в комплекте с программным обеспечением.

[code]
var
  SerialPage: TWizardPage;
  Edits: array [1..4] of TEdit;
  I, E: Integer;
  SerialPage_Label: TNewStaticText;
  sNumber: String;

procedure EditsChange(Sender: TObject);
var
 i: integer;
 begin
 for i := 1 to 4 do begin
  Edits[i].AutoSelect := False;
  if i < 4 then
   if Length(Edits[i].Text) = 4 then
    Edits[i+1].SetFocus;
  end;
end;

function EditsNumber(): string;
begin
  for I := 1 to 4 do
  begin
    sNumber :=  sNumber + Edits[i].Text + '-';
  end;
  sNumber := Copy(sNumber, 1, Length(sNumber) - 1);
  Result := sNumber;
end;

procedure InitializeWizard();
begin
  SerialPage := CreateCustomPage(wpSelectTasks, CustomMessage('MESSAGES_1'), CustomMessage('MESSAGES_2'));
  SerialPage_Label := TNewStaticText.Create(nil);
  with SerialPage_Label do
  begin
    Parent := SerialPage.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(28));
    WordWrap := True;
    Caption := CustomMessage('MESSAGES_3');
  end;

  E := ScaleX(73);

  for I := 1 to 4 do
  begin
    Edits[i]:= TEdit.Create(nil);
    with Edits[i] do
    begin
      Parent:= SerialPage.Surface;
      SetBounds(0 + (E*I), ScaleY(47), ScaleX(47), ScaleY(21));
      MaxLength:= 4;
      OnChange := @EditsChange;
    end;
  end;
end;

function NextButtonClick(CurPageID:integer): Boolean;
var
 i: integer;
begin
  Result := True;
  case CurPageID of
    SerialPage.ID:
    begin
      CreateDir(ExpandConstant('{userdocs}\GameEX'));
      SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
      for i := 1 to 4 do begin
       Result := Edits[i].GetTextLen = 4;
       if not Result then begin
        MsgBox('Вы должны ввести ключ.', mbError, MB_OK);
        Break;
       end;
      end;
    end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
    SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
  end;
end;

-------------------------------------------------------------------------------------
Цитата Crazy Noise:
либо же кнопка далее была бы не активна до тех пор пока весь ключ не будет введён »
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[CustomMessages]
MESSAGES_1=Ввод серийного номера
MESSAGES_2=Серийный номер нужен для активации программного обеспечения.
MESSAGES_3=Для активации необходимо ввести серийный номер поставляемый в комплекте с программным обеспечением.

[code]
var
  SerialPage: TWizardPage;
  Edits: array [1..4] of TEdit;
  I, E: Integer;
  SerialPage_Label: TNewStaticText;
  sNumber: String;

procedure EditsChange(Sender: TObject);
var
 i, eLength: integer;
 begin
 eLength := 0;
 for i := 1 to 4 do begin
  Edits[i].AutoSelect := False;
  if i < 4 then
   if Length(Edits[i].Text) = 4 then
    Edits[i+1].SetFocus;
  eLength := eLength + Length(Edits[i].Text);
  end;
 WizardForm.NextButton.Enabled := eLength = 4 * 4;
end;

function EditsNumber(): string;
begin
  for I := 1 to 4 do
  begin
    sNumber :=  sNumber + Edits[i].Text + '-';
  end;
  sNumber := Copy(sNumber, 1, Length(sNumber) - 1);
  Result := sNumber;
end;

procedure InitializeWizard();
begin
  SerialPage := CreateCustomPage(wpSelectTasks, CustomMessage('MESSAGES_1'), CustomMessage('MESSAGES_2'));
  SerialPage_Label := TNewStaticText.Create(nil);
  with SerialPage_Label do
  begin
    Parent := SerialPage.Surface;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(28));
    WordWrap := True;
    Caption := CustomMessage('MESSAGES_3');
  end;

  E := ScaleX(73);

  for I := 1 to 4 do
  begin
    Edits[i]:= TEdit.Create(nil);
    with Edits[i] do
    begin
      Parent:= SerialPage.Surface;
      SetBounds(0 + (E*I), ScaleY(47), ScaleX(47), ScaleY(21));
      MaxLength:= 4;
      OnChange := @EditsChange;
    end;
  end;
end;

function NextButtonClick(CurPageID:integer): Boolean;
var
 i: integer;
begin
  Result := True;
  case CurPageID of
    SerialPage.ID:
    begin
      CreateDir(ExpandConstant('{userdocs}\GameEX'));
      SaveStringToFile(ExpandConstant('{userdocs}\GameEX\keysgame.ini'), EditsNumber, False);
    end;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
    SerialPage.ID: Result := FileExists(ExpandConstant('{userdocs}\GameEX\keysgame.ini'));
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
 begin
 if CurPageID = SerialPage.ID then
  EditsChange(nil);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:08, 22-05-2013 | #528