Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Dr.Ryms - Giugno 05, 2013, 03:02:20 pm

Titolo: Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: Dr.Ryms - Giugno 05, 2013, 03:02:20 pm

Salve,

Eccomi qui con 1 primo problemino che mi si presenta.

Sto realizzando un applicativo che " dovrebbe " aprire in automatico un file semplicemente usando il tasto destro del mouse ( sul file in questione) e usando apri con ( mio programmino ) in ambiente Windows.

Il problema che mi trovo ad avere e che non viene passato il nome del file ( cliccato) al mio programma che si avvia senza avere il nome del file in questione.


Potete darmi una indicazione della sintassi o settaggio che magari necessita Lazarus stesso ? ( ho appena iniziato ad usarlo, quindi troppe cose da vedere tutte assieme   :P

Senza questa cosa non posso andare avanti nel suo sviluppo   :'( :'( :'( :'(

Grazie
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: xinyiman - Giugno 05, 2013, 05:50:58 pm
Vado a memoria. Dovresti usare nella OnCreate della form principale

Per ottenere il numero di parametri
Application.ParamCount;

Per ottenere il parametro attraverso il suo indice
Application.Params[Indice_Del_Paramatero];

Nel tuo caso specifico ParamCount dovrebbe essere a 1 e il tuo Indice_Del_Parametro dovrebbe essere 0.

Prova un po.
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: El Salvador - Giugno 05, 2013, 05:52:05 pm
Non riesci a recuperare il percorso del file in questione tramite parametro? Praticamente, windows lancia il tuo programma con il primo parametro con il nome del file in questione (es. "C:\path\to\myapp.exe d:\path\to\file.ext")?
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: Dr.Ryms - Giugno 05, 2013, 08:09:49 pm

xinyiman gentilissimo,

ma potresti essere piu specifico, non ho idea di cosa sia  la OnCreate :P,  come ho detto lo sto usando da 2 giorni e ancora in modo semplice ^^

Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: Dr.Ryms - Giugno 05, 2013, 08:11:56 pm

Si, El Salvador

in pratica quando parte il programma la variabile che dovrebbe avere il nome+percorso, e vuota.

Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: El Salvador - Giugno 05, 2013, 09:17:08 pm
Devi seguire il post di xinyiman, specialmente questa parte:
Citazione
Per ottenere il parametro attraverso il suo indice
Application.Params[Indice_Del_Paramatero];

Nel tuo caso specifico ParamCount dovrebbe essere a 1 e il tuo Indice_Del_Parametro dovrebbe essere 0.
Semplicemente prima di richiamare il codice per caricare il tuo file, recuperi il percorso di questo tramite il codice Application.Params[1] e glielo dai in pasto al codice per caricare il file.

Esempio molto semplice e veloce
Codice: [Seleziona]
Procedure TForm1.FormCreate(Sender: TObject); //Evento OnCreate. Il codice all'interno di questa procedura verrà avviato alla creazione del form Form1
var
  FileName: string;
begin
  if Application.ParamCount >= 1 then //Controlliamo che ci sia almeno 1 parametro
  begin
    FileName := Application.Param[1]; //0 equivale al percorso del tuo proramma, 1 equivale al primo parametro
    ProceduraCaricaFile(FileName); //Ovvero il tuo codice per caricare il file indicato dal parametro
  end;
end;
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: Dr.Ryms - Giugno 06, 2013, 09:58:21 am
 :)

Allora, ci sto impazzendo da ore,  la procedura e chiara, ma non ho la piu pallida idea di come farla funzionare.

Ho provato a usare una unit o un form, ma non li uso e non so ( al momento ) cosa siano.

Ho il mio semplice programmino in cui non riesco a mettere questa procedura che non viene compilata  :P


Capisco che vi potra' sembrare un problema banale, ma mi sono perso un po di anni di evoluzione del compilatore.

Ho cercato sia qui che su internet e si trovano sempre le procedure tipo questa che hai messo, ma nessuno dice come inserirle  :'(

Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: nomorelogic - Giugno 09, 2013, 03:08:45 pm
ciao Dr.Ryms
ho la sensazione che tu abbia iniziato a scrivere direttamente il codice a mano.
Non che non si possa fare ma se sta ricominciando da capo è meglio che tu parta da menù.

Usa la voce
File -> Nuovo... -> Applicazione

vedrai che avrai 2 file:
- file di progetto (.lpr)
- unit1.pas con la dichiarazione della classe TForm1

Quando a design time hai davanti a te la Form1:
- con F11 richiama l'object Inspector
- seleziona la pagina "eventi"
- fai doppio click su OnCreate

a questo punto ti si aprirà l'editor del codice ed avrai davanti:
Procedure TForm1.FormCreate(Sender: TObject);

è quì che devi mettere il codice che ti è stato suggerito per il controllo dei parametri di lancio.



Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: Dr.Ryms - Giugno 11, 2013, 03:09:39 am

 :)   Ti ringrazio delle specifiche.

Ho fatto come hai detto, e inserito il codice sopra riportato, pero ottengo sempre un errore nella compilazione ( ovviamente senza fare alcuna modifica, giusto per vedere se compilava:

---------------

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);

var
  FileName: string;


begin
  if Application.ParamCount >= 1 then //Controlliamo che ci sia almeno 1 parametro
  begin
    FileName := Application.Param[1]; //0 equivale al percorso del tuo proramma, 1 equivale al primo parametro
    write(FileName);
  end;
end;


begin


end.         

---------------

mi da   [ unit1.pas(42,29) Error: identifier idents no member "Param" ]

Come mai ?
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: brunello - Giugno 11, 2013, 08:18:40 am
non ho provato con lazarus ma con delphi per ritrovare i parametri dell'eseguibile  in passato ho utilizzato

function ParamStr(Index: Integer): string;

Description

ParamStr returns the parameter from the command line that corresponds to Index, or an empty string if Index is greater than ParamCount. For example, an Index value of 2 returns the second command-line parameter.

On Windows, ParamStr(0) returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).

ciao Brunello
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: El Salvador - Giugno 11, 2013, 12:06:42 pm
Citazione
ottengo sempre un errore nella compilazione
Ho sbagliato a scrivere (ho scritto Param al posto di Params), sostituisci la riga di codice che ti da errore con questa:
Citazione
FileName := Application.Params[1]; //0 equivale al percorso del tuo proramma, 1 equivale al primo parametro
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: Dr.Ryms - Giugno 15, 2013, 11:52:03 am

 :) ;) :) ;) :) ;)

Ottimo, funge benissimo.

Grazie a tutti, gentilissimi  ^^
Titolo: Re:Assegnare un file direttamente all' avvio del programma tramite icona.
Inserito da: xinyiman - Giugno 15, 2013, 05:33:37 pm
Figurati  ;)