2012-11-21 3 views
5

मैं अपने कस्टम पेज में एक कस्टम चेकबॉक्स बनाने के लिए (क्योंकि यह एक एक पेज संस्थापक है) कोशिश कर रहा हूँ, संवाद या कुछ भी बिना केवल एक चेकबॉक्स, संस्थापक है कि मैं संकलित करने के लिए कोशिश कर रहा हूँ की जरूरत है बहुत रैखिक है और सरल।इंस्टॉल के दौरान वैकल्पिक फ़ाइलों के लिए मैं चेकबॉक्स कैसे जोड़ सकता हूं? (InnoSetup)

मैं इस तरह से एक चेकबॉक्स पर "FILE3.EXE" बाध्य करने के लिए चाहते हैं: यदि चेकबॉक्स चेक प्रतिलिपि फ़ाइल DESTDIR में (FILE3.EXE) है, अन्यथा यदि चेकबॉक्स फ़ाइल (FILE3.EXE) स्थापना के दौरान छोड़ अनियंत्रित है ।

इस कोड है कि मैं का इस्तेमाल किया, स्पष्ट रूप से चेकबॉक्स कोड याद आ रही है, क्योंकि मैं

[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

क्या आप एक पूर्ण कस्टम समाधान चाहते हैं या आप उस दृष्टिकोण के लिए पहले से ही निर्मित कार्यक्षमता का उपयोग करना चाहते हैं? –

+0

मैं अपने कस्टम पृष्ठ में एक कस्टम चेकबॉक्स बनाने के लिए (क्योंकि एक एक पेज संस्थापक है), संवाद या कुछ भी बिना केवल एक चेकबॉक्स, संस्थापक है कि मैं संकलित करने के लिए कोशिश कर रहा हूँ की जरूरत है कोशिश कर रहा हूँ बहुत रैखिक और सरल – ApprenticeGeek

+1

तब पैदा करते हैं एक चेक बॉक्स और अपने 'Files' खंड में [' Check'] (http://jrsoftware.org/ishelp/topic_scriptcheck.htm#Check) पैरामीटर का उपयोग कर एक कस्टम समारोह बनाते हैं। आप उस चेक बॉक्स को कहां रखना चाहते हैं? – TLama

उत्तर

10

आप एक Check समारोह जो अपनी स्क्रिप्ट की [Code] अनुभाग से चेक बॉक्स की स्थिति वापस आ जाएगी बनाने की जरूरत है:

; -- 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" 

रनटाइम पर, संस्थापक जादूगर के भीतर इस संवाद को प्रस्तुत करता है । कुछ इस तरह है कि तुम क्या चाहते हो सकता है, लेकिन कोड स्क्रिप्ट इससे पहले कि मैं निम्नलिखित में आप को सही होगा:

  • उपयोग Tnew ... कक्षाएं जहां कर रहे हैं करने के लिए, अपने मामले उपयोग में तो TNewEdit बजाय TEdit की
  • एक Parent के रूप में उपयोग TWizardPage.Surface आपको लगता है कि अगर आपका इरादा है, बस इस ओर इशारा करते हुए पेज (यहाँ मैं सुनिश्चित नहीं हूं पर एक निश्चित घटक है करना चाहते हैं :-)
  • प्रारूप अपने कोड है, यह इतना फ्लैट होने की आवश्यकता नहीं है

निम्न उदाहरण मैं Check समारोह सशर्त के लिए InstallHelpFile कहा जाता है एक निश्चित फ़ाइल के स्थापित करते हैं, इस मामले MyProg.chm में उपयोग किया है में

Check फ़ंक्शन बस काम करता है; जब आप फ़ंक्शन पर सही लौटते हैं, तो फ़ाइल संसाधित होती है, जब आप गलत लौटते हैं तो छोड़ दिया जाता है।

[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

बढ़िया बढ़िया !!! – ApprenticeGeek

10

कि आप मैन्युअल रूप से उस के लिए चेक बॉक्स बनाने के लिए की जरूरत नहीं है ऐसा करने में सक्षम नहीं कर रहा हूँ है। उपयोगकर्ता स्थापित करने के लिए क्या चुनना जाने के लिए मानक तरीका है अपनी स्क्रिप्ट फ़ाइल का [Types] और [Components] वर्गों का प्रयोग है।

अपने iss में स्थित Componens.iss स्क्रिप्ट पर एक नज़र फ़ोल्डर स्थापित \ उदाहरण ले लो।

Components dialog

+2

@Globulorozzo आप अपने प्रश्न में उस महत्वपूर्ण जानकारी को बताएंगे, हर किसी के लिए "कोड में देखें" के लिए बहुत दयालु नहीं है जो आपकी मदद करने की कोशिश कर रहा है! – jachguate

+0

@Globulorozzo और क्यों आपके प्रश्न का कोई संपादन नहीं? क्या हम आपके लिए ऐसा करना चाहिए? :( –

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;