2010-12-21 9 views
9

InnoSetup muestra de forma predeterminada el acuerdo de licencia en un área de texto muy pequeña que el usuario no puede agrandar de ninguna manera.¿Cómo mostrar un cuadro de licencia más grande en un instalador InnoSetup?

Si bien sé que la mayoría de las personas no las lee, creo que proporcionarla en un formato que lo hace particularmente difícil de leer es una mala idea, y podría formar parte de una defensa en los tribunales.

¿Hay alguna forma en InnoSetup de mostrar la licencia en una gran ventana separada? ¿Un guión de Pascal enrollado previamente tal vez?

Respuesta

13

Puede cambiar el tamaño del WizardForm y reorganizar los controles si lo quiere agrandar. Hice este ejemplo para mostrarle cómo cambiar el alto del formulario para la página de Licencia.

[Setup] 
AppName=StackOverflow large license box 
AppVersion=1.0 
CreateAppDir=no 
DisableProgramGroupPage=yes 
DefaultGroupName=My Program 
UninstallDisplayIcon={app}\MyProg.exe 
LicenseFile=license.txt 
;OutputDir=userdocs:Inno Setup Examples Output 

[Code] 

var 
    DefaultTop, 
    DefaultLeft, 
    DefaultHeight, 
    DefaultBackTop, 
    DefaultNextTop, 
    DefaultCancelTop, 
    DefaultBevelTop, 
    DefaultOuterHeight: Integer; 

const 
    LicenseHeight = 600; 

procedure InitializeWizard(); 
begin 
    DefaultTop := WizardForm.Top; 
    DefaultLeft := WizardForm.Left; 
    DefaultHeight := WizardForm.Height; 
    DefaultBackTop := WizardForm.BackButton.Top; 
    DefaultNextTop := WizardForm.NextButton.Top; 
    DefaultCancelTop := WizardForm.CancelButton.Top; 
    DefaultBevelTop := WizardForm.Bevel.Top; 
    DefaultOuterHeight := WizardForm.OuterNotebook.Height; 

    WizardForm.InnerPage.Height := WizardForm.InnerPage.Height + (LicenseHeight - DefaultHeight); 
    WizardForm.InnerNotebook.Height := WizardForm.InnerNotebook.Height + (LicenseHeight - DefaultHeight); 
    WizardForm.LicensePage.Height := WizardForm.LicensePage.Height + (LicenseHeight - DefaultHeight); 
    WizardForm.LicenseMemo.Height := WizardForm.LicenseMemo.Height + (LicenseHeight - DefaultHeight); 
    WizardForm.LicenseNotAcceptedRadio.Top := WizardForm.LicenseNotAcceptedRadio.Top + (LicenseHeight - DefaultHeight); 
    WizardForm.LicenseAcceptedRadio.Top := WizardForm.LicenseAcceptedRadio.Top + (LicenseHeight - DefaultHeight); 

end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    if CurPageID = wpLicense then 
    begin 
    WizardForm.Top := DefaultTop - (LicenseHeight - DefaultHeight) div 2; 
    WizardForm.Height := LicenseHeight; 
    WizardForm.OuterNotebook.Height := WizardForm.OuterNotebook.Height + (LicenseHeight - DefaultHeight); 
    WizardForm.CancelButton.Top := DefaultCancelTop + (LicenseHeight - DefaultHeight); 
    WizardForm.NextButton.Top := DefaultNextTop + (LicenseHeight - DefaultHeight); 
    WizardForm.BackButton.Top := DefaultBackTop + (LicenseHeight - DefaultHeight); 
    WizardForm.Bevel.Top := DefaultBevelTop + (LicenseHeight - DefaultHeight); 
    end 
    else 
    begin 
    WizardForm.Top := DefaultTop; 
    WizardForm.Left := DefaultLeft; 
    WizardForm.Height := DefaultHeight; 
    WizardForm.OuterNotebook.Height := DefaultOuterHeight; 
    WizardForm.CancelButton.Top := DefaultCancelTop; 
    WizardForm.NextButton.Top := DefaultNextTop; 
    WizardForm.BackButton.Top := DefaultBackTop; 
    WizardForm.Bevel.Top := DefaultBevelTop; 
    end; 
end; 

Cópielo en un nuevo archivo iss y proporcione un archivo license.txt válido para poder compilar correctamente. El script se prueba con inno 5.4.0 pero debería funcionar con cualquier 5.x.

+0

Solo quería mencionar que no usamos esto al final. El problema es que si el usuario mueve el instalador (por ejemplo, a un monitor diferente), este código lo restablece a su posición predeterminada. Lo cual es bastante molesto Dejaré esto aceptado porque es la única respuesta que aborda la pregunta, pero también he publicado el código del botón de WordPad como una respuesta separada. –

0

Si usa la directiva LicenseFile, Inno espera un archivo de texto plano o RTF. Si proporciona un archivo RTF, puede establecer la fuente y otro formato simple (negrita, cursiva, etc.) como desee.

+0

Lo siento, esto no ayuda. Tengo un archivo RTF que quiero mostrar en un cuadro más grande. –

4

Cambiar el tamaño del cuadro de licencia no funcionó demasiado bien, así que en su lugar terminamos proporcionando un botón para ver la licencia en WordPad. Esto funciona sorprendentemente bien; Me gustó bastante al final. Código:

procedure ViewLicenseButtonClick(Sender: TObject); 
var WordpadLoc: String; 
    RetCode: Integer; 
begin 
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WORDPAD.EXE', '', WordpadLoc); 

    // on NT/2000 it's a REG_EXPAND_SZ, so expand constant ProgramFiles 
    StringChange(WordpadLoc, '%ProgramFiles%', ExpandConstant('{pf}')); 
    // remove " at begin and end pf string 
    StringChange(WordpadLoc, '"', ''); 

    try 
    ExtractTemporaryFile('LicenseAgreement.rtf') 
    except 
    MsgBox('Cannot extract license file.', mbError, mb_Ok); 
    end; 

    if not Exec(WordpadLoc, '"' + ExpandConstant('{tmp}\LicenseAgreement.rtf') + '"', '', SW_SHOW, ewNoWait, RetCode) then 
    MsgBox('Cannot display license file.', mbError, mb_Ok); 
end; 

procedure CurPageChanged(CurPageID: Integer); 
var ViewLicenseButton: TButton; 
begin 
    if CurPageID = wpLicense then begin 
    ViewLicenseButton := TButton.Create(WizardForm.LicenseMemo.Parent); 
    ViewLicenseButton.Caption := '&View in WordPad'; 
    ViewLicenseButton.Width := 120; 
    ViewLicenseButton.Left := WizardForm.LicenseMemo.Left + 
         WizardForm.LicenseMemo.Width - ViewLicenseButton.Width; 
    ViewLicenseButton.Top := WizardForm.LicenseMemo.Top + 
         WizardForm.LicenseMemo.Height + 16; 
    ViewLicenseButton.OnClick := @ViewLicenseButtonClick; 
    ViewLicenseButton.Parent := WizardForm.LicenseAcceptedRadio.Parent; 
    end; 
end; 
+0

Si utiliza ShellExec va a buscar el camino de aplicación para usted, o simplemente puede darle la PAH a la RTF y se abrirá en la aplicación por defecto ... – Anders

+0

@Anders no sabía nada de la primera; en cuanto a lo último, no quiero que MS Word se abra donde esté instalado; eso lleva demasiado tiempo. –

+1

Otra forma podría ser crear una nueva ventana (usando la función ['CreateCustomForm'] (http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_createcustomform)) y en esta forma poner el [' TRichEditViewer' ] (http://www.jrsoftware.org/ishelp/topic_scriptclasses.htm#TRichEditViewer) controlan con los botones de opción Aceptar/Declinar y muestran esta ventana de forma modal. – TLama

Cuestiones relacionadas