2012-11-21 6 views
5

Özel sayfamda özel bir onay kutusu oluşturmaya çalışıyorum (bir sayfa yükleyicisi olduğu için), yalnızca bir iletişim kutusu veya bir şey olmayan bir onay kutusu gerekiyor, derlemeye çalıştığım yükleyici çok doğrusal ve basit.Yükleme sırasında isteğe bağlı dosyalar için bir CheckBox nasıl ekleyebilirim? (innosetup)

Bu şekilde bir onay kutusuna "FILE3.EXE" bağlamak istiyorum: onay kutusu işaretlendiyse, dosyayı (FILE3.EXE) DestDir'de kopyalayın, aksi halde onay kutusu işaretli değilse, yükleme sırasında dosyayı (FILE3.EXE) atlayın. .

Bu

ben manuel bunun için onay kutularını oluşturmak gerekmez

[Files] 
Source: FILE1.EXE; DestDir: {app}; 
Source: FILE2.EXE; DestDir: {app}; 
Source: FILE3.EXE; DestDir: {app}; //OPTIONAL 

[Code] 
procedure ExitProcess(uExitCode: UINT); 
external '[email protected] stdcall'; 


var 
MainPage : TWizardPage; 
FolderToInstall : TEdit; 
InstallLocation : String; 


procedure CancelClick(Sender: TObject); 
begin 
if ExitSetupMsgBox then 
begin 
ExitProcess(0); 
end; 
end; 


procedure BrowseClick(Sender : TObject); 
var 
Dir : String; 

begin 
Dir := FolderToInstall.Text; 
if BrowseForFolder('Browse',Dir,false) then 
FolderToInstall.Text := Dir; 
WizardForm.DirEdit.Text := Dir; 
end; 


procedure InitializeWizard(); 
var 
LabelFolder : TLabel; 


MainPage := CreateCustomPage(wpWelcome,'',''); 
LabelFolder := TLabel.Create(MainPage); 
LabelFolder.Parent := WizardForm; 
LabelFolder.Top := 164; 
LabelFolder.Left := 6; 
LabelFolder.Caption := 'Directory:' 


FolderToInstall := TEdit.Create(MainPage); 
FolderToInstall.Parent := WizardForm; 
FolderToInstall.Top := 182; 
FolderToInstall.Left := 85; 
FolderToInstall.Width := 380; 
FolderToInstall.Text := WizardDirValue; 
FolderToInstall.ReadOnly := True; 
end; 
+1

http://www.jrsoftware.org/ishelp/index.php?topic=scriptpages tam bir özel çözüm istiyorsanız veya bu yaklaşım için zaten yerleşik işlevleri kullanmak istiyorsunuz musunuz? –

+0

Özel sayfamda özel bir onay kutusu oluşturmaya çalışıyorum (bir sayfa yükleyicisi olduğundan), yalnızca bir iletişim kutusu veya bir şey olmayan bir onay kutusuna ihtiyaç duyuluyor, derlemeye çalıştığım yükleyici çok doğrusal ve basit – ApprenticeGeek

+1

Bir onay kutusu ve 'Dosyalar 'bölümünüzde [' Check'] (http://jrsoftware.org/ishelp/topic_scriptcheck.htm#Check) parametresini kullanarak özel bir işlev oluşturun. Bu onay kutusuna sahip olmak nerede? – TLama

cevap

10

Sen script [Code] bölümünden onay kutusunu durumunu dönecektir bir Check işlev yapmak gerekir:

; -- Components.iss -- 
; Demonstrates a components-based installation. 

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! 

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 
DefaultGroupName=My Program 
UninstallDisplayIcon={app}\MyProg.exe 
OutputDir=userdocs:Inno Setup Examples Output 

[Types] 
Name: "full"; Description: "Full installation" 
Name: "compact"; Description: "Compact installation" 
Name: "custom"; Description: "Custom installation"; Flags: iscustom 

[Components] 
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed 
Name: "help"; Description: "Help File"; Types: full 
Name: "readme"; Description: "Readme File"; Types: full 
Name: "readme\en"; Description: "English"; Flags: exclusive 
Name: "readme\de"; Description: "German"; Flags: exclusive 

[Files] 
Source: "MyProg.exe"; DestDir: "{app}"; Components: program 
Source: "MyProg.chm"; DestDir: "{app}"; Components: help 
Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme 
Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme 

[Icons] 
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" 

Çalışma zamanında, yükleyici sihirbazının içinde bu iletişim sunar . Böyle bir şey istediğini yapabilir, ama kod komut önce aşağıdaki sizi düzeltmek istiyorum:

  • kullanım tyeni ... Eğer mümkün olduğunu sınıflar için, senin durumun nedenle kullanımında TNewEdit yerine bunu sadece bu işaret ederek, sizin niyetiniz olup olmadığından emin değilim burada sayfasında (belirli bir bileşenini yapmak istiyorsanız bir Parent olarak kullanılması TWizardPage.Surface
  • TEdit ait :-)
  • format kodu, bunu
  • çok düz olması gerekmez Ben koşullu için InstallHelpFile denilen Check fonksiyonu bu durumda MyProg.chm yılında, belli bir dosyanın yüklemek kullandım Aşağıdaki örnekte

. Check işlevi basitçe çalışır; True işlevine döndüğünüzde, dosya işlenir, False döndürdüğünüzde atlanır.

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 
OutputDir=userdocs:Inno Setup Examples Output 

[Files] 
Source: "MyProg.exe"; DestDir: "{app}" 
Source: "MyProg.chm"; DestDir: "{app}"; Check: InstallHelpFile; 

[Code] 
var 
    InstallHelpCheckBox: TNewCheckBox; 

procedure InitializeWizard; 
var 
    LabelFolder: TLabel; 
    MainPage: TWizardPage; 
    FolderToInstall: TNewEdit; 
begin 
    MainPage := CreateCustomPage(wpWelcome, '', ''); 
    LabelFolder := TLabel.Create(MainPage); 
    LabelFolder.Parent := WizardForm; 
    LabelFolder.Top := 164; 
    LabelFolder.Left := 6; 
    LabelFolder.Caption := 'Directory:' 

    FolderToInstall := TNewEdit.Create(MainPage); 
    FolderToInstall.Parent := MainPage.Surface; 
    FolderToInstall.Top := 182; 
    FolderToInstall.Left := 85; 
    FolderToInstall.Width := 380; 
    FolderToInstall.Text := WizardDirValue; 
    FolderToInstall.ReadOnly := True; 

    InstallHelpCheckBox := TNewCheckBox.Create(MainPage); 
    InstallHelpCheckBox.Parent := MainPage.Surface; 
    InstallHelpCheckBox.Top := FolderToInstall.Top + FolderToInstall.Height + 8; 
    InstallHelpCheckBox.Left := FolderToInstall.Left; 
    InstallHelpCheckBox.Width := FolderToInstall.Width; 
    InstallHelpCheckBox.Caption := 'Install help file'; 
end; 

function InstallHelpFile: Boolean; 
begin 
    // here is the Check function used above; if you return True to this 
    // function, the file will be installed, when False, the file won't 
    // be installed 
    Result := InstallHelpCheckBox.Checked; 
end; 
+0

ÇALIŞAN BÜYÜK !!! – ApprenticeGeek

10

bunu mümkün olmadığım için açıkçası onay kutusu kodu eksik, kullandığım koddur. Kullanıcının ne yükleyeceğini seçmesine izin vermenin standart yolu, komut dosyanızın [Types] ve [Components] bölümlerini kullanmaktır.

Iss yükleme klasörünüzde bulunan Componens.iss komut dosyasına bir göz atın \ örnekler.

Components dialog

+2

@Globulorozzo Sorunuzda hayati bilgilerin var olduğunu, herkesin "kodda görmesini" istemeniz için size kim yardım etmeye çalıştığınız için çok iyi olmadığını belirtmelisiniz! – jachguate

+0

@Globulorozzo Ve neden sorunuzun bir düzenlemesi yok? Bunu senin için yapalım mı? :( –

3

CreateInputOptionPage() ile daha kolay yapabilirsiniz. Inno Setup yardımında ayrıntılı bilgilere bakın.

0
// Create: 
for i := 0 to g_SetupX_Count do begin 
    WizardForm.ComponentsList.AddCheckBox(g_SetupX_Name[i], '', 0, g_SetupX_Active[i], true, false, false, nil); 
    g_SetupX_CompListIndex[i] := nextPosi; 
    nextPosi := nextPosi + 1; 
end; 

// Evaluate: 
for i := 0 to g_SetupX_Count do begin 
    g_SetupX_Active[i] := WizardForm.ComponentsList.Checked[g_SetupX_CompListIndex[i]]; 
end; 
İlgili konular