Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Ветеран


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

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


Diman19, так чего же сразу не сказали. Только не окна, а страницы... Сделал второй страницей
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Messages]
ClickNext=Вы должны ввести серийный номер, чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

; заносим данные в реестр, 1 вариант
[Registry]
Root: HKCU; SubKey: Software\My Program; Flags: uninsdeletekey
Root: HKCU; SubKey: Software\My Program\Settings; ValueType: string; ValueName: Serial; ValueData: {code:edtText}; Flags: uninsclearvalue

Code]
var
  edt:array [1..5] of TEdit;
  txt: TNewStaticText;
  i, e, t: integer;
  NewPage: TWizardPage;
  lbl: TLabel;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = NewPage.ID then
  WizardForm.NextButton.Enabled:= False; // отключаю кнопку Далее
end;

function edtText(s: string): string; //этот вариант, при записи через секцию [Registry]
//function edtText: string; // а этот, если вносить запись через 2 вариант
//var                       //
//  s: string;              //
begin
 { получаем текст из edit'ов и присваем переменной s }
  for i:= 1 to 5 do begin
    s:= s + edt[i].Text + '-';
  end;
 { удаляем лишний знак тире в конце строки }
  s:= Copy(s, 1, Length(s) - 1);
  Result:= s;
end;

//procedure CurStepChanged(CurStep: TSetupStep);
//begin
// { занасим данные в реестр 2 вариант}
//  If CurStep = ssDone then
//  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Program\Settings', 'Serial', edtText);
//end;

//procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
//begin
// { удаляем данные из реестра, 2 вариант
//  Здесь надо быть очень внимательным, а то по неосторожности можно удалить весь раздел... :) }
//  If CurUninstallStep = usDone then
//  RegDeleteKeyIncludingSubkeys(HKEY_CURRENT_USER, 'Software\My Program');
//end;

procedure edtKeyPress(Sender: TObject; var Key: Char);
begin
{ здесь попытался реализовать, чтоб курсор автоматом перескакивал на следующий edit при вводе,
 но есть косяк, если начать удалять через Backspace, то из-за SetFocus курсор снова перескакивает на уже очищенный edit }
  for i:= 1 to 4 do begin
    if Length(edt[i].Text) = 4 then edt[i+1].SetFocus;
  end;
{ проверяем условие если все edit'ы заполненны, то делаем доступной кнопку Далее}
  for i:= 1 to 5 do begin
    if Length(edt[i].Text) >= 4 then
    WizardForm.NextButton.Enabled:= True else
    WizardForm.NextButton.Enabled:= False;
  end;
end;

procedure SerialPage;
begin
  NewPage:= CreateCustomPage(wpWelcome, 'Ввод кода', 'бла бла бла и т.д. ');

  WizardForm.NextButton.Enabled:= False;
  t:= 57;
  e:= t;
  // создаём Label
  lbl:=TLabel.Create(NewPage);
    with lbl do begin
      Left:= 0;
      Top:= 0;
      Width:= 417;
      Height:= 28;
      AutoSize:= False;
      WordWrap:= True;
      Caption:= 'Введите код, отпечатанный на последней странице обложки Руководства пользователя или на упаковке диска.';
      Parent:= NewPage.Surface;
    end;

  // создаём 4 тире
  for i:= 1 to 4 do begin
  txt:= TNewStaticText.Create(NewPage);
    with txt do begin
      Parent:= NewPage.Surface;
      Name:= 'txt' + IntToStr(i+1);
      Left:= 50 + (t*i);
      Top:= 50;
      Caption:= '-';
      AutoSize:= True;
      Font.Height:= -13;
      Font.Style:= [fsBold];
    end;
  end;
  // создаём 5 edit'ов
  for i:= 1 to 5 do begin
  edt[i]:= TEdit.Create(NewPage);
    with edt[i] do begin
      Parent:= NewPage.Surface;
      Left:= 0 + (e*i);
      Top:= 47;
      Width:= 47;
      Height:= 21;
      MaxLength:= 5;
      OnKeyPress:= @edtKeyPress;
    end;
  end;
end;

procedure InitializeWizard();
begin
  SerialPage;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:30, 31-03-2009 | #546