Discussione chiusa
Pagina 2 di 2 primaprima 12
Visualizzazione dei risultati da 11 a 19 su 19

Discussione: [Inno Setup]Richiesta di più path in un'installazione client/server

  1. #11
    doNascimiento non è in linea Novello
    Post
    49
    Ok fatto... Non ci rimane che impostare la funzione che permette di selezionare il path tramite il tasto "Browse" e far apparire una delle due frasi a seconda che venga scelto "Client" oppure "Server"....

    Nel frattempo, aiutandomi con l'help di InnoSetup, sto provando ad inserire anche il codice per i requisiti minimi....

  2. #12
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Va bene, proseguiamo, per fare quello che chiedi è necessario gestire 3 eventi ovvero il click sul bottone, il click sul radiobutton "server" e il click sul radiobutton "client", per fare questo è necessarrio agganciare quindi tre funzioni a questi 3 oggetti ok iniziamo a prepararle:

    codice:
    procedure InstallazioneServer_Click(Sender: TObject);
      Begin
      End;
      
    procedure InstallazioneClient_Click(Sender: TObject);
      Begin
      End;
    
    procedure Sfoglia_Click(Sender: TObject);    
      Begin
      End;
    Dopo di che agganciamo queste tre funzioni ai tre eventi, per fare questo dobbiamo andare dove gli oggetti a cui vanno assegnati gli eventi vengono creati e aggiungere nell'impostazione delle proprietà il gancio all'evento (gli eventi disponibili sono nella guida di Inno Setup) con questa sintassi NomeEvento := @NomeProcedura;

    Quindi ad esempio

    codice:
     radio_client := TRadioButton.Create(Page);
      with radio_client do
      begin
        Parent := Page.Surface;
        Caption := 'Client';
        Left := ScaleX(0);
        Top := ScaleY(24);
        Width := ScaleX(73);
        Height := ScaleY(33);
        Checked := True;
        TabOrder := 0;
        TabStop := True;
        OnClick := @InstallazioneClient_Click;
      end;
    Ricordati l'ordine di scrittura delle funzioni mi raccomando....

    Ok ora abbiamo a disposizione le tre funzioni che gestiscono l'evento e per le label direi che la cosa è di una semplicità mostruosa, semplicemente basta modificare la proprietà Caption in base a cosa vien cliccato, mentre per il tasto browse la cosa è un pochino più complessa, bisognerà usare un ulteriore funzione chiamata BrowseForFolder (dettagli sulla guida di InnoSetup), questa funzione apre una finestra di scelta cartella e consente/non consente la creazione di cartelle nuove.

    Se sei arrivato fin qui non dovrebbe essere difficile scrivere il codice.
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  3. #13
    doNascimiento non è in linea Novello
    Post
    49
    Perfetto!! Il Setup sembra prendere sempre più il senso del termine!

    Mi sono permesso di aggiungere alcune cose che mi sono venute in mente durante l'implementazione... Mi piacerebbe ci fosse la possibilità di installare anche una "versione locale", nel senso che, se si volesse installare l'applicativo per l'utilizzo su un singolo pc, non verrebbe richiesta la directory dei dati, ma verrà invece tutto installato nella directory di installazione (quindi anche i files office)... dici che è sbagliato concettualmente?

    Di seguito posto il codice finora sviluppato e più sotto indico alcuni punti che non riesco a risolvere...

    codice:
    var
      s_PathDati : string;
      b_InstallaDati : boolean;
    
    function LeggiPathDati(Param: String): String;
    begin
      Result:= s_PathDati;
    end;
    
    function InstallaDati(): boolean;
    begin
      Result:= b_InstallaDati;
    end;
    
    var
      Label1: TLabel;
      Label2: TLabel;
      lbl_folder: TLabel;
      radio_local: TRadioButton;
      radio_client: TRadioButton;
      radio_server: TRadioButton;
      txt_dataPath: TEdit;
      btn_browsePath: TButton;
    
    procedure InstallazioneLocal_Click(Sender: TObject);
    begin
      lbl_folder.Visible := False;
      Label2.Visible := False;
      txt_dataPath.Visible := False;
      btn_browsePath.Visible := False;
    end;
    
    procedure InstallazioneServer_Click(Sender: TObject);
    begin
      lbl_folder.Caption := 'Setup will install data files into the following folder.';
      lbl_folder.Visible := True;
      Label2.Visible := True;
      txt_dataPath.Visible := True;
      btn_browsePath.Visible := True;
    end;
    
    procedure InstallazioneClient_Click(Sender: TObject);
    begin
      lbl_folder.Caption := 'Select the shared folder containing data files.';
      lbl_folder.Visible := True;
      Label2.Visible := True;
      txt_dataPath.Visible := True;
      btn_browsePath.Visible := True;
    end;
    
    var
      Directory: String;
    
    procedure Sfoglia_Click(Sender: TObject);
    begin
      if BrowseForFolder('Select shared folder.', Directory, True) then
      begin
        txt_dataPath.text := Directory
      end;
    end;
    
    { ClientServer_NextkButtonClick }
    
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    begin
      if radio_local.Checked then
      begin
        s_PathDati := txt_dataPath.text // inserire path selezionato nella finestra precedente
        b_InstallaDati := True
      end
      else if radio_server.Checked then
      begin
        s_PathDati := txt_dataPath.text
        b_InstallaDati := True
      end
      else
      begin
        b_InstallaDati := False
      end;
    
      Result := True;
    end;
    
    { ClientServer_CreatePage }
    
    function ClientServer_CreatePage(PreviousPageId: Integer): Integer;
    var
      Page: TWizardPage;
    begin
      Page := CreateCustomPage(
        PreviousPageId,
        'Select Installation Type and Data Location',
        'What type of installation do you want to execute? Where should shared files be installed/located?'
      );
    
      { Label1 }
      Label1 := TLabel.Create(Page);
      with Label1 do
      begin
        Parent := Page.Surface;
        Caption := 'Installation Type:';
        Left := ScaleX(0);
        Top := ScaleY(8);
        Width := ScaleX(84);
        Height := ScaleY(13);
      end;
    
      { Label2 }
      Label2 := TLabel.Create(Page);
      with Label2 do
      begin
        Parent := Page.Surface;
        Caption := 'To continue, click Next. If you would like to select a different folder, click Browse.';
        Left := ScaleX(0);
        Top := ScaleY(152);
        Width := ScaleX(390);
        Height := ScaleY(13);
        Visible := False;
      end;
    
      { lbl_folder }
      lbl_folder := TLabel.Create(Page);
      with lbl_folder do
      begin
        Parent := Page.Surface;
        Caption := '';
        Left := ScaleX(0);
        Top := ScaleY(120);
        Width := ScaleX(242);
        Height := ScaleY(13);
        Visible := False;
      end;
    
      { radio_local }
      radio_local := TRadioButton.Create(Page);
      with radio_local do
      begin
        Parent := Page.Surface;
        Caption := 'Local';
        Left := ScaleX(0);
        Top := ScaleY(24);
        Width := ScaleX(73);
        Height := ScaleY(33);
        Checked := True;
        TabOrder := 0;
        TabStop := True;
        OnClick := @InstallazioneLocal_Click;
      end;
    
      { radio_client }
      radio_client := TRadioButton.Create(Page);
      with radio_client do
      begin
        Parent := Page.Surface;
        Caption := 'Client';
        Left := ScaleX(0);
        Top := ScaleY(48);
        Width := ScaleX(73);
        Height := ScaleY(33);
        Checked := False;
        TabOrder := 1;
        OnClick := @InstallazioneClient_Click;
      end;
    
      { radio_server }
      radio_server := TRadioButton.Create(Page);
      with radio_server do
      begin
        Parent := Page.Surface;
        Caption := 'Server';
        Left := ScaleX(0);
        Top := ScaleY(72);
        Width := ScaleX(73);
        Height := ScaleY(33);
        TabOrder := 2;
        OnClick := @InstallazioneServer_Click;
      end;
    
      { txt_dataPath }
      txt_dataPath := TEdit.Create(Page);
      with txt_dataPath do
      begin
        Parent := Page.Surface;
        Left := ScaleX(0);
        Top := ScaleY(178);
        Width := ScaleX(337);
        Height := ScaleY(21);
        Hint := 'Data path on server';
        TabOrder := 3;
        Visible := False;
      end;
    
      { btn_browsePath }
      btn_browsePath := TButton.Create(Page);
      with btn_browsePath do
      begin
        Parent := Page.Surface;
        Caption := 'Browse...';
        Left := ScaleX(344);
        Top := ScaleY(176);
        Width := ScaleX(65);
        Height := ScaleY(25);
        Hint := 'Browse for data path on server';
        TabOrder := 4;
        Visible := False;
        OnClick := @Sfoglia_Click
      end;
    
      with Page do
      begin
        OnNextButtonClick := @ClientServer_NextButtonClick;
      end;
    
      Result := Page.ID;
    end;
    
    { ClientServer_InitializeWizard }
    
    procedure InitializeWizard();
    begin
      ClientServer_CreatePage(wpSelectDir);
    end;
    Ecco.... Come hai potuto vedere dal codice, ho aggiunto il radio button per l'installazione Locale, disabilitando in tal caso le opzioni non necessarie all'interno della pagina di installazione. Una cosa però che non sono riuscito a trovare nell'help è come fare ad utilizzare la directory di installazione selezionata precedentemente (per capirci, quella che InnoSetup indica con la variavbile {app})... C'è un modo per gestire questa variabile nella sezione [code], oppure devo creare un'altra finestra personalizzata da sostituire a quella standard? Il pezzo di codice a cui mi riferisco è il seguente:

    codice:
    { ClientServer_NextkButtonClick }
    
    function ClientServer_NextButtonClick(Page: TWizardPage): Boolean;
    begin
      if radio_local.Checked then
      begin
        s_PathDati := txt_dataPath.text // inserire path selezionato nella finestra precedente
        b_InstallaDati := True
      end
      else if radio_server.Checked then
      begin
        s_PathDati := txt_dataPath.text
        b_InstallaDati := True
      end
      else
      begin
        b_InstallaDati := False
      end;
    
      Result := True;
    end;
    laddove ho commentato "// inserire path selezionato nella finestra precedente" vorrei eseguire la modifica richiesta...

  4. #14
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Luogo
    Darfo Boario Terme (BS)
    Post
    1,164
    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Mi sono permesso di aggiungere alcune cose che mi sono venute in mente durante l'implementazione... Mi piacerebbe ci fosse la possibilità di installare anche una "versione locale", nel senso che, se si volesse installare l'applicativo per l'utilizzo su un singolo pc, non verrebbe richiesta la directory dei dati, ma verrà invece tutto installato nella directory di installazione (quindi anche i files office)... dici che è sbagliato concettualmente?
    Si direi che è sbagliato concettualmente, nella cartella programmi, vanno inseriti i programmi (exe, dll, ocx) e li oltretutto gli utenti con privilegi ridotti non possono giustamente modificare nulla, mentri i dati vanno inseriti in altri posti che il sistema operativo fornisce, in particolare queste path si ottengono con le variabili di ambiente di InnoSetup, nel caso specifico se il programma deve funzionare per tutti gli utenti del pc si tratta di {commonappdata}

    Quote Originariamente inviato da doNascimiento Visualizza il messaggio
    Ecco.... Come hai potuto vedere dal codice, ho aggiunto il radio button per l'installazione Locale, disabilitando in tal caso le opzioni non necessarie all'interno della pagina di installazione. Una cosa però che non sono riuscito a trovare nell'help è come fare ad utilizzare la directory di installazione selezionata precedentemente (per capirci, quella che InnoSetup indica con la variavbile {app})... C'è un modo per gestire questa variabile nella sezione [code]
    Si ma devi dire a InnoSetup che stai usando una costante o variabile d'ambiente utilizzando la funzione ExpandConstant (dettagli sulla guida di Inno Setup)
    Se sei nuovo e vuoi aiuto il miglior modo che io ho trovato per ottenerlo è porre le domande in modo intelligente
    Se hai delle domande siamo qui per tentare di risponderti, se hai delle risposte siamo qui per ascoltarle
    Noi siamo una comunità, una bella comunità e funzioniamo sempre meglio se ognuno cerca di seguire al massimo il nostro regolamento

  5. #15
    doNascimiento non è in linea Novello
    Post
    49
    Ok, ho seguito il tuo consiglio e faccio scegliere la directory dei dati anche per l'installazione locale, impostando di default una cartella che viene creata nei Documenti.

    Penso di aver raggiunto quasi tutti i miei scopi... Non mi rimane che fare il controllo per i requisiti minimi.... Ho provato a fare qualcosa da solo, aiutandomi con l'help di InnoSetup. Posto il codice del lavoro nella discussione principale, linkando anche alle due discussioni "periferiche".

    Spero non ci sia nient'altro da aggiungere o modificare, ma intanto ti ringrazio tantissimo per il tuo aiuto, senza il quale non avrei proprio saputo da che parte iniziare a mettere le mani!!

    Un grazie infinito!!

  6. #16
    Laura70 non è in linea Novello
    Post
    4
    Fantastico!!!
    Grazie a questo minuzioso post sono riuscita a togliermi dagli impicci....
    complimenti!

    Mi rimangono solo 2 cose da capire

    1) dopo avere fatto scegliere all'utente la directory dei dati come la inserisco nel sommario dell'installazione, per intenderci quello alla fine prima di installa in cui conferma tutte le scelte fatte?

    2) nella pagina standard dove si seleziona la directory di installazione se ci scrivo a manina dei dati non congruenti al un percorso locale o di rete, un msg di sistema mi avvisa.
    Come posso richiamare la funzione di validazione anche per il testo inserito nella directory dei dati personalizzati?

    grazie anticipatamente

  7. #17
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Luogo
    Prato
    Post
    2,683
    Prima di postare è bene leggere il regolamento, cosa che evidentemente non hai fatto.
    Ti sei agganciato ad una discussione di quasi 4 anni fà;sicuramente questa discussione sarà chiusa da qualche moderatore.
    Poni molta attenzione al regolamento del forum.
    Sono stato nella terra del terrore e dei Vampiri...la transilvania? No!..in Banca.
    A Lupara?Min***a...Tecnologia Sicula è!

  8. #18
    Laura70 non è in linea Novello
    Post
    4
    Quote Originariamente inviato da sistemista Visualizza il messaggio
    Ti sei agganciato ad una discussione di quasi 4 anni fà;sicuramente questa discussione sarà chiusa da qualche moderatore.
    sarà di 4 anni fa ma è ancora attualissima e funzionante e spikexx84 del post potrebbe sempre rispondermi.
    Grazie comunque dell'avvertimento.

  9. #19
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,158
    Blogs
    5
    Quote Originariamente inviato da Laura70 Visualizza il messaggio
    sarà di 4 anni fa ma è ancora attualissima e funzionante e spikexx84 del post potrebbe sempre rispondermi.
    Grazie comunque dell'avvertimento.
    No. Non è così che funziona.

    Non si continua a postare su thread così vecchi.

    Se vuoi, apri un nuovo thread in cui, eventualmente, fai riferimento a questo e poni il tuo nuovo quesito.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

Discussione chiusa
Pagina 2 di 2 primaprima 12

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi