2016-06-10 2 views
1

내 목표는 사용자가이 설치 프로그램을 사용하고 이름을 삽입하고 언어를 선택하고 맞춤 매개 변수를 설정하는 것입니다. 끝났어. 하지만 필요한 것은 사용자가 응용 프로그램에서 아바타로 넣을 이미지를 선택한다는 것입니다. 그 이유는 사용자가 이미지를 선택하고 응용 프로그램 폴더로 파일을 복사하는 이유입니다. 이 같은맞춤 레이아웃 페이지에서 이미지 파일을 선택하고 설치 폴더에 파일을 복사하십시오.

뭔가 :

enter image description here :

[Code] 
{ RedesignWizardFormBegin } // Don't remove this line! 
// Don't modify this section. It is generated automatically. 
procedure RedesignWizardForm; 
begin 
    with WizardForm.WizardSmallBitmapImage do 
    begin 
    Left := ScaleX(350); 
    Width := ScaleX(150); 
    Height := ScaleY(57); 
    end; 

    with WizardForm.PageDescriptionLabel do 
    begin 
    Width := ScaleX(309); 
    end; 

    with WizardForm.PageNameLabel do 
    begin 
    Width := ScaleX(293); 
    end; 

{ ReservationBegin } 
    // This part is for you. Add your specialized code here. 

{ ReservationEnd } 
end; 
// Don't modify this section. It is generated automatically. 
{ RedesignWizardFormEnd } // Don't remove this line! 

var 
    NameEdit: TNewEdit; 
    ParametresEdit: TNewEdit; 
    LanguageCombo: TNewComboBox; 
    LanguageNames: TStringList; 

function ConvertLanguageName(const Value: string): string; 
var 
    I: Integer; 
    WideCharCode: Word; 
begin 
    Result := ''; 
    I := 1; 
    while I <= Length(Value) do 
    begin 
    if Value[I] = '<' then 
    begin 
     WideCharCode := StrToInt('$' + Copy(Value, I + 1, 4)); 
     I := I + 6; 
    end 
    else 
    begin 
     WideCharCode := Ord(Value[I]); 
     I := I + 1; 
    end; 
    SetLength(Result, Length(Result) + 1); 
    Result[Length(Result)] := Chr(WideCharCode); 
    end; 
end; 

function GetLanguageName(const Value: string): string; 
begin 
    Result := LanguageNames[LanguageCombo.ItemIndex]; 
end; 

function GetPlayerName(const Value: string): string; 
begin 
    Result := NameEdit.Text; 
end; 

function GetParametres(const Value: string): string; 
begin 
    Result := ParametresEdit.Text; 
end; 

procedure InitializeWizard; 
var 
    PlayerSettingsPage: TWizardPage; 
    NameLabel: TLabel; 
    LanguageLabel: TLabel; 
    ParaLabel: TLabel; 
    Info1Label: TLabel; 
    Info2Label: TLabel; 
    Info3Label: TLabel; 
    Info4Label: TLabel; 
    Info5Label: TLabel; 
    Info6Label: TLabel; 

    begin 
    RedesignWizardForm; 
    PlayerSettingsPage := CreateCustomPage(wpSelectComponents, 'Ingrese Datos', 'Informacón del juego'); 

    NameLabel := TLabel.Create(WizardForm); 
    NameLabel.Parent := PlayerSettingsPage.Surface; 
    NameLabel.Left := 0; 
    NameLabel.Top := 0; 
    NameLabel.Font.Style := [fsBold]; 
    NameLabel.Caption := 'Nombre'; 
    NameEdit := TNewEdit.Create(WizardForm); 
    NameEdit.Parent := PlayerSettingsPage.Surface; 
    NameEdit.Left := 0; 
    NameEdit.Top := NameLabel.Top + NameLabel.Height + 4; 
    NameEdit.Width := 180; 

    ParaLabel := TLabel.Create(WizardForm); 
    ParaLabel.Parent := PlayerSettingsPage.Surface; 
    ParaLabel.Left := 0; 
    ParaLabel.Top := 100; 
    ParaLabel.Font.Style := [fsBold]; 
    ParaLabel.Caption := 'Parametros de Left 4 Dead 2'; 
    ParametresEdit := TNewEdit.Create(WizardForm); 
    ParametresEdit.Parent := PlayerSettingsPage.Surface; 
    ParametresEdit.Left := 0; 
    ParametresEdit.Top := ParaLabel.Top + ParaLabel.Height + 4; 
    ParametresEdit.Width := 180; 

    Info1Label := TLabel.Create(WizardForm); 
    Info1Label.Parent := PlayerSettingsPage.Surface; 
    Info1Label.Left := 190; 
    Info1Label.Top := 15; 
    Info1Label.Font.Style := [fsBold]; 
    Info1Label.Caption := 'Introduzca su Nombre que se mostrara'; 

    Info2Label := TLabel.Create(WizardForm); 
    Info2Label.Parent := PlayerSettingsPage.Surface; 
    Info2Label.Left := 190; 
    Info2Label.Top := 30; 
    Info2Label.Font.Style := [fsBold]; 
    Info2Label.Caption := 'en el juego'; 

    Info3Label := TLabel.Create(WizardForm); 
    Info3Label.Parent := PlayerSettingsPage.Surface; 
    Info3Label.Left := 190; 
    Info3Label.Top := 65; 
    Info3Label.Font.Style := [fsBold]; 
    Info3Label.Caption := 'Selecciona tu Idioma'; 


    Info4Label := TLabel.Create(WizardForm); 
    Info4Label.Parent := PlayerSettingsPage.Surface; 
    Info4Label.Left := 190; 
    Info4Label.Top := 120; 
    Info4Label.Font.Style := [fsBold]; 
    Info4Label.Caption := '-console: Muestra la consola'; 

    Info5Label := TLabel.Create(WizardForm); 
    Info5Label.Parent := PlayerSettingsPage.Surface; 
    Info5Label.Left := 190; 
    Info5Label.Top := 135; 
    Info5Label.Font.Style := [fsBold]; 
    Info5Label.Caption := '-novid: Salta el intro del juego'; 

    Info6Label := TLabel.Create(WizardForm); 
    Info6Label.Parent := PlayerSettingsPage.Surface; 
    Info6Label.Left := 190; 
    Info6Label.Top := 150; 
    Info6Label.Font.Style := [fsBold]; 
    Info6Label.Caption := '-sw: Fuerza al juego en modo ventana'; 

    LanguageNames := TStringList.Create; 
    #sub AddLanguageInternalNames 
    #define GetLanguageInternalName(str S) \ 
     Local[0] = Copy(S, Pos("Name:", S) + Len("Name:")), \ 
     Local[1] = Copy(Local[0], Pos("""", Local[0]) + 1), \ 
     Copy(Local[1], 1, Pos("""", Local[1]) - 1) 
    #emit ' LanguageNames.Add(''' + GetLanguageInternalName(LanguageList[LanguageIndex]) + ''');' 
    #endsub 
    #for {LanguageIndex = 0; LanguageIndex < LanguageCount; LanguageIndex++} AddLanguageInternalNames 

    LanguageLabel := TLabel.Create(WizardForm); 
    LanguageLabel.Parent := PlayerSettingsPage.Surface; 
    LanguageLabel.Left := 0; 
    LanguageLabel.Top := NameEdit.Top + NameEdit.Height + 8; 
    LanguageLabel.Font.Style := [fsBold]; 
    LanguageLabel.Caption := 'Lenguaje'; 
    LanguageCombo := TNewComboBox.Create(WizardForm); 
    LanguageCombo.Parent := PlayerSettingsPage.Surface; 
    LanguageCombo.Left := 0; 
    LanguageCombo.Top := LanguageLabel.Top + LanguageLabel.Height + 4; 
    LanguageCombo.Width := NameEdit.Width; 
    LanguageCombo.Style := csDropDownList; 
    #sub AddLanguageDisplayNames 
    #define GetLanguageDisplayName(str S) \ 
     ReadIni(S, "LangOptions", "LanguageName") 
    #define GetLanguageFile(str S) \ 
     Local[0] = Copy(S, Pos("MessagesFile:", S) + Len("MessagesFile:")), \ 
     Local[1] = Copy(Local[0], Pos("""", Local[0]) + 1), \ 
     StringChange(Copy(Local[1], 1, Pos("""", Local[1]) - 1), "compiler:", CompilerPath) 
    #expr LanguageName = GetLanguageDisplayName(GetLanguageFile(LanguageList[LanguageIndex])) 
    #emit ' LanguageCombo.Items.Add(ConvertLanguageName(''' + LanguageName + '''));' 
    #endsub 
    #for {LanguageIndex = 0; LanguageIndex < LanguageCount; LanguageIndex++} AddLanguageDisplayNames 
    LanguageCombo.ItemIndex := LanguageNames.IndexOf(ActiveLanguage); 
end; 

procedure DeinitializeSetup; 
begin 
    LanguageNames.Free; 
end; 

내 코드는 현재이 페이지를 생산 : 사람이 도울 수 있다면

enter image description here

이, 내 코드는 크게 감사하겠습니다

+0

문제는 무엇인가

// global variables var PlayerSettingsPage: TInputFileWizardPage; AvatarIndex: Integer; procedure InitializeWizard; var Delta: Integer; ... // your other variables but not the PlayerSettingsPage begin PlayerSettingsPage := CreateInputFilePage(wpSelectComponents, 'Ingrese Datos', 'Informacon del juego', ''); // Your existing code AvatarIndex := PlayerSettingsPage.Add('Avatar:', 'Image files|*.png;*.jpg;*.jpeg;*.gif|All files|*.*', '.jpg'); Delta := ParametresEdit.Top + ParametresEdit.Height + 32 - PlayerSettingsPage.PromptLabels[AvatarIndex].Top; PlayerSettingsPage.PromptLabels[AvatarIndex].Top := PlayerSettingsPage.PromptLabels[AvatarIndex].Top + Delta; PlayerSettingsPage.Edits[AvatarIndex].Top := PlayerSettingsPage.Edits[AvatarIndex].Top + Delta; PlayerSettingsPage.Buttons[AvatarIndex].Top := PlayerSettingsPage.Buttons[AvatarIndex].Top + Delta; end; 

enter image description here

그런 다음 CurStepChanged(ssPostInstall)에서 선택한 아바타를 설치? 너는 무엇을 놓치고 있니? 파스칼에서 파일을 복사하는 방법? 복사본을 트리거하는 방법? 또는 다른 것? –

+0

사용자가 파일을 찾은 다음이 파일을 응용 프로그램 폴더에 복사하면됩니다. –

+0

코드가 생성하는 사용자 정의 페이지가 질문과 관련이 있습니까? –

답변

1

CreateInputFilePage function을 사용하여 만든 TInputFileWizardPage을 가장 쉽게 사용할 수 있습니다. "입력 파일"페이지에 사용자 정의 컨트롤을 추가 할 수 없습니다. 자동 추가 된 "파일 입력"컨트롤의 레이아웃을 변경하기 만하면됩니다.

변수 PlayerSettingsPage의 유형을 변경하고 전역 화하여 InitializeWizard 함수 외부에서 사용자가 입력 한 값에 액세스 할 수 있어야합니다.

procedure CurStepChanged(CurStep: TSetupStep); 
var 
    AvatarSource: string; 
    AvatarDest: string; 
begin 
    if CurStep = ssPostInstall then 
    begin 
    AvatarSource := PlayerSettingsPage.Edits[AvatarIndex].Text; 
    AvatarDest := ExpandConstant('{app}\' + ExtractFileName(AvatarSource)); 
    Log(Format('Installing avatar from "%s" to "%s"', [AvatarSource, AvatarDest])); 
    if FileCopy(AvatarSource, AvatarDest, False) then 
    begin 
     Log('Avatar installer'); 
    end 
     else 
    begin 
     Log('Error installing avatar'); 
    end; 
    end; 
end; 
+0

어떻게 편집합니까? 사용자가 아바타를 설치해야하는 경로를 선택할 수있게 하시겠습니까? –

+0

대단히 고마워요! 당신은 천재, 마지막으로 복사 된 이미지를 편집 할 수있는 경로입니까? 'AvatarDest : = ExpandConstant ('{응용 프로그램} \ 플랫폼'; 'AvatarDest :' 에 = ExpandConstant ('{응용 프로그램} \'+ ExtractFileName (AvatarSource)) 나는이 줄을 편집하고 싶었다 + ExtractFileName (AvatarSource)); ' 이미지가 해당 폴더에 복사되지만 이미지 이름을 바꾼다 고 생각하면 감사합니다! : –

+0

아니요 이미지를이 폴더에 복사해야합니다 응용 프로그램 : {app} \ platform –