Ветеран
Сообщения: 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
|