2010-07-09 26 views
14

Tôi đang sử dụng cài đặt Inno (tuyệt vời!). Tôi đã hy vọng tùy chỉnh trình cài đặt để tôi có thể chấp nhận một chuỗi từ người dùng dưới dạng một trường nhập liệu và có thể thêm một thông báo vào đó.Cài đặt Inno: Thêm trường nhập tùy chỉnh

Tôi làm cách nào để thực hiện việc này? Tôi đã có một cái nhìn thông qua các tài liệu, tìm kiếm google và không có nhiều đến!

Cảm ơn mọi sự giúp đỡ

+0

Mất một lúc để tôi lội qua tất cả các liên kết giả và hỏng để tìm isfd208.exe (InnoSetup Form Designer 2.08). Như Thorsten đã nói, liên kết ban đầu bị hỏng nhưng [liên kết này] (http://uploaded.to/file/swq33y) hoạt động kể từ ngày nhận xét này. (Lưu ý: Nó không chạy trên Windows 7 của tôi nhưng hoạt động trên xp) – Joe

+0

Liên kết từ Joe cũng bị hỏng. Đây là một tài khoản đang hoạt động: [http://www.cenadep.org/2012/02/09/innosetup-form-designer/](http://www.cenadep.org/2012/02/09/innosetup- form-designer /) –

Trả lời

34

Bạn có thể sử dụng kịch bản lệnh Pascal trong InnoSetup để tạo trang mới cho trình cài đặt. Các trang này có thể được tích hợp vào luồng cài đặt thông thường. Điều này cũng được ghi lại trong InnoSetup documentation (tìm kiếm của Google cũng nên đưa ra các mẫu). Ngoài ra các thư mục mẫu trong tập tin chương trình của bạn \ InnoSetup có một số ví dụ mã.

Một số thời gian trước đây, có một phần mềm có tên InnoSetup Form designer, cho phép bạn thiết kế trực quan trang. Liên kết vẫn ở đó, nhưng trên trang tôi không thể tìm thấy phần tải xuống. Có lẽ nếu bạn nhìn xung quanh một chút, bạn có thể tìm thấy nó?

EDIT
Đây là mẫu cho trang tôi đã tạo một lần. . Đây là phần mã của tập tin ISS [Mã]

var 
    EnableFolderPage: Boolean; 
    lblBlobFileFolder: TLabel; 
    lblBlobFileWarning1: TLabel; 
    lblBlobFileWarning2: TLabel; 
    tbBlobFileFolder: TEdit; 
    btnBlobFileFolder: TButton; 



function GetBlobFolder(param: String): String; 
begin 
    Result := Trim(tbBlobFileFolder.Text); 
end; 


{ BlobFileForm_Activate } 
procedure BlobFileForm_Activate(Page: TWizardPage); 
var 
    s: string; 
begin 
    s := Trim(tbBlobFileFolder.Text); 
    if (s = '') then 
    begin 
    tbBlobFileFolder.Text := ExpandConstant('{sys}'); 
    end; 
end; 


{ BlobFileForm_NextButtonClick } 
function BlobFileForm_NextButtonClick(Page: TWizardPage): Boolean; 
var 
    s: string; 
begin 
    s := Trim(tbBlobFileFolder.Text); 
    if (s = '') then 
    begin 
    MsgBox(ExpandConstant('{cm:BlobFileForm_NoFolder}'), mbError, MB_OK); 
    Result := false; 
    end else 
    begin 
    if not DirExists(s) then 
    begin 
     MsgBox(ExpandConstant('{cm:BlobFileForm_DirDoesntExist}'), mbError, MB_OK); 
     Result := false; 
    end else 
    begin 
     Result := True; 
    end; 
    end; 
end; 

procedure btnBlobFileFolder_Click(sender: TObject); 
var 
    directory: string; 
begin 
    if BrowseForFolder('', directory, true) then 
    begin 
    tbBlobFileFolder.Text := directory; 
    end; 
end; 


{ BlobFileForm_CreatePage } 
function BlobFileForm_CreatePage(PreviousPageId: Integer): Integer; 
var 
    Page: TWizardPage; 
begin 
    Page := CreateCustomPage(
    PreviousPageId, 
    ExpandConstant('{cm:BlobFileForm_Caption}'), 
    ExpandConstant('{cm:BlobFileForm_Description}') 
); 

{ lblBlobFileFolder } 
    lblBlobFileFolder := TLabel.Create(Page); 
    with lblBlobFileFolder do 
    begin 
    Parent := Page.Surface; 
    Caption := ExpandConstant('{cm:BlobFileForm_lblBlobFileFolder_Caption0}'); 
    Left := ScaleX(8); 
    Top := ScaleY(8); 
    Width := ScaleX(167); 
    Height := ScaleY(13); 
    end; 

    { lblBlobFileWarning1 } 
    lblBlobFileWarning1 := TLabel.Create(Page); 
    with lblBlobFileWarning1 do 
    begin 
    Parent := Page.Surface; 
    Caption := ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning1_Caption0}'); 
    Left := ScaleX(8); 
    Top := ScaleY(80); 
    Width := ScaleX(50); 
    Height := ScaleY(13); 
    Font.Color := -16777208; 
    Font.Height := ScaleY(-11); 
    Font.Name := 'Tahoma'; 
    Font.Style := [fsBold]; 
    end; 

    { lblBlobFileWarning2 } 
    lblBlobFileWarning2 := TLabel.Create(Page); 
    with lblBlobFileWarning2 do 
    begin 
    Parent := Page.Surface; 
    Caption := 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption0}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption1}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption2}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption3}') + #13 + 
     ExpandConstant('{cm:BlobFileForm_lblBlobFileWarning2_Caption4}'); 
    Left := ScaleX(8); 
    Top := ScaleY(96); 
    Width := ScaleX(399); 
    Height := ScaleY(133); 
    AutoSize := False; 
    WordWrap := True; 
    end; 

    { tbBlobFileFolder } 
    tbBlobFileFolder := TEdit.Create(Page); 
    with tbBlobFileFolder do 
    begin 
    Parent := Page.Surface; 
    Left := ScaleX(8); 
    Top := ScaleY(24); 
    Width := ScaleX(401); 
    Height := ScaleY(21); 
    TabOrder := 0; 
    end; 

    { btnBlobFileFolder } 
    btnBlobFileFolder := TButton.Create(Page); 
    with btnBlobFileFolder do 
    begin 
    Parent := Page.Surface; 
    Caption := ExpandConstant('{cm:BlobFileForm_btnBlobFileFolder_Caption0}'); 
    Left := ScaleX(320); 
    Top := ScaleY(48); 
    Width := ScaleX(91); 
    Height := ScaleY(23); 
    TabOrder := 1; 
    end; 

    with Page do 
    begin 
    OnActivate := @BlobFileForm_Activate; 
    OnNextButtonClick := @BlobFileForm_NextButtonClick; 
    end; 

    with btnBlobFileFolder do 
    begin 
    OnClick := @btnBlobFileFolder_Click; 
    end; 

    Result := Page.ID; 
end; 


procedure InitializeWizard(); 
begin 
    BlobFileForm_CreatePage(wpSelectDir); 
end; 

EDIT 2
Để viết giá trị người dùng nhập vào một khóa registry, tạo một hàm mới:

function GetUserEnteredText(param: String): String; 
begin 
    Result := Trim(tbTextBox.Text); 
end; 

Hàm này chỉ trả về những gì được nhập vào hộp văn bản. Xin lưu ý rằng hàm phải có tham số chuỗi - ngay cả khi bạn bỏ qua nó!

Trong phần [Registry] của kịch bản của bạn, khai báo quan trọng mà nên được viết như thế:

Root: HKLM; Subkey: SOFTWARE\MyCompany\MyTool; ValueType: string; ValueName: MyValue; ValueData: {code:GetUserEnteredText}; Flags: createvalueifdoesntexist uninsdeletekeyifempty uninsdeletevalue 

Điều này tạo ra một giá trị registry có tên là "myValue" trong HKLM \ SOFTWARE \ MyCompany \ MyTool có chứa những gì người dùng đã nhập vào hộp văn bản.

+1

cảm ơn bạn vì ví dụ, điều đó thực sự hữu ích! Chỉ là một điều cuối cùng, làm thế nào để nắm bắt những gì đã được nhập bởi người sử dụng? Sau đó tôi có thể sử dụng nó để trở thành một biến khi tôi ghi vào khóa đăng ký. – Abs

+0

Xem EDIT 2 của tôi ... :-) –

+3

omg, cảm ơn bạn rất nhiều! +1 chưa đủ. Đối với những người thấy câu hỏi này, hãy cho anh ta một số đại diện chết tiệt! :) – Abs

Các vấn đề liên quan