Пользователь
Сообщения: 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