Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Nicola - Novembre 15, 2017, 10:37:37 am

Titolo: Determinare percorso in base al sistema operativo
Inserito da: Nicola - Novembre 15, 2017, 10:37:37 am
Ciao a tutti, ho questo problema, in ufficio ho windows 10 e a casa ho appena installato su portatile linux mint;
è possibile all'apertura della form principale in base al sistema operativo indicare quale è il percorso da seguire?
cioè in ufficio ho i files su C:\gestionecespiti mentre a casa sarebbe su home\gestione cespiti; per i percorsi non
ci sono problemi mi basterebbe capire come "capire" quale sia il sistema operativo in uso.
Grazie
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: xinyiman - Novembre 15, 2017, 10:41:33 am
Guarda qui

http://www.lazaruspascal.it/index.php?page=12
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Nicola - Novembre 15, 2017, 11:56:53 am
Caspita son 3 giorni che cerco in internet e non trovavo nulla;
resta un problema, se ho windows 10 che parametro inserisco?
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: xinyiman - Novembre 15, 2017, 12:25:18 pm
Onestamente non lo so con certezza. Prova con

else if WindowsVersion = wv10 then Result:='Windows 10'

altrimenti metti un brack point su

 else Result:='Unknown';

e posizionando il mouse sulla variabile WindowsVersion dovrebbe dirti il valore attraverso un tooltip (ovviamente devi essere in debug per farlo)
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: bonmario - Novembre 15, 2017, 01:25:44 pm
resta un problema, se ho windows 10 che parametro inserisco?

Per il tuo problema, non ti interessa sapere la versione di windows. nel tuo caso dovresti fare così:

Codice: [Seleziona]
  Percorso:='';
  {$IFDEF MSWINDOWS}
    Percorso:='C:\gestionecespiti';
  {$ELSE}
    {$IFDEF LINUX}
      Percorso:='/home/gestionecespiti';
    {$ENDIF}
  {$ENDIF}

  if (Percorso =  '') then begin
    ShowMessage('Sistema operativo non definito !!!');
  end;

P.S. Per esperienza personale, ti conviene fare una funzione che riceve in input il percorso, e lo adatta in base al sistema operativo.

Ciao, Mario
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: xinyiman - Novembre 15, 2017, 01:44:57 pm
Comunque sappi che esiste la funzione di sistema

Application.Location

che restituisce esattamente il path dove risiede l'eseguibile.
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Nicola - Novembre 15, 2017, 02:44:57 pm
Per bonmario: l'ho provato su W10 e ho assegnato ad una variabile il valore della funzione; avendo W10 non mi restituiva nessun valore (stringa vuota); inoltre ho notato che viene fatta differenza rispetto all'esempio fra maiuscolo e minuscolo, (mi viene segnalato WV10 per windows 10);
in ogni caso l'esempio non son riuscito a farlo girare (forse perchè ho un pc a 64 bit), infatti il result era sempre stringa vuota.
ho provato con quanto da te proposta e su windows funziona, stasera provo anche su linux, ma ad occhio dovrebbe andare.
In effetti ho provveduto ad assegnare ad una variabile il percorso Database e ad una il percorso dei sorgenti ed eseguibili cosi posso variare a piacimento in base al sistema operativo, anche perchè qua in azienda vorrei inserirlo nel server che utilizza windows server 2012 R2 che un altro percorso.
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Nicola - Novembre 15, 2017, 02:49:30 pm
Ho provato a fare cosi:
Codice: [Seleziona]
PercorsoSoftware:=Application.Location;
Percorso:=copy(PercorsoSoftware,1,length(PercorsoSoftware)-8)+'Azienda';
mi pare funzioni... vediamo stasera
ciao
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Stilgar - Novembre 18, 2017, 12:20:10 pm
Se hai problemi usa un file si configurazione esterno .
Così il giorno che dovessi decidere di partizionare i dischi, cambi il path nella configurazione e non devi ricompilare l'eseguibile.
In genere faccio così anche nel caso di molti parametri di input.
Imposti un working path e da lì ricostruisci tutti i path che ti servono.
Soluzione banale se vuoi ma ti toglie dai casini in più di un'occasione 😊

Stilgar
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Nicola - Novembre 18, 2017, 10:56:48 pm
Intanto vi ringrazio per i suggerimenti, che mi hanno permesso (testato su linux) di risolvere la cosa;
per Stilgar: cioè dovrei salvare il percorso su un file, che andrebbe letto alla creazione della form principale?
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Stilgar - Novembre 18, 2017, 10:58:57 pm
Nella creazione della form o quando ti torna più comoda.
Stilgar
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Stilgar - Novembre 19, 2017, 07:27:17 pm
Aggiungo un dettaglio alla risposta di prima.

Se aggiungi una variabile e un costruttore alla form :
Codice: [Seleziona]
FPathGestioneCespiti:  String;
Constructor Create(aOwner : TComponent); override;
....
Constructor TMiaForm.Create(aOwner : TComponent); override;
var
 SL : TStringList;
begin
  inherited Create(aOwner);
SL := TStringList.Create;
SL.LoadFromFile('file-di-consigurazione.txt');
FMiaGestioneCespiti := SL.Text;
SL.Free;
End;

Dall'inizio della vita dell'oggetto form, hai sempre a disposizione il valore che ti serve.

Quando scrivo un'applicazione da riga di comando estendo sempre la custom application e nel costruttore cerco di mettere i valori di default / fissi per poi usali nel resto dell'applicazione.Così come processo i parametri di input proprio nel costruttore. Se ci sono errori non parte nemmeno il RUN della classe.

E' solo una questione stilistica se vuoi. Non mi piace molto la gestione di default che il template mette a disposizione.

Stilgar
Titolo: Re:Determinare percorso in base al sistema operativo
Inserito da: Nicola - Novembre 19, 2017, 10:30:17 pm
Purtroppo mi rendo conto della mia limitatezza (già lo sapevo); ma non c'è qualche testo che possa dare una infarinatura a questo IDE?