Newsgroup: it.comp.lang.delphi
Titolo: DDE?

Buon giorno a tutti!
Qualcuno ha un idea di come associare ed eseguire un file proprietario 
di una determinata applicazione? Vorrei far si che con un doppio click 
si apra, es: dpr per delphi, xls per excel, ecc...

 Buon giorno a tutti!

Includi ShellApi e usa ShellExecute.
Per i dettagli, l'help.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Mi spiego meglio, intendevo dire che con un doppio click (esempio da 
esplora risorse) su un file con estensione proprietaria vorrei lanciare 
l'applicazione con il suo file come parametro oppure aprire direttamente 
il file in caso di programma già in esecuzione.
Grazie.
Andrea Laforgia ha scritto:


 il file in caso di programma già in esecuzione.
E allora che c'entra Delphi ?


Bhe, l'applicazione è in delphi, ma non so come poter "registrare" 
l'estensione" e come intercettare la chiamata sul doppio click.
Il ns consente solo domante inerenti l'IDE e i suoi componenti?
Andrea Laforgia ha scritto:


 Il ns consente solo domante inerenti l'IDE e i suoi componenti?
                procedure CreaNuovaAssociazione(Ext,
                  ProgID,
                  ProgDescr,
                  ProgPath: string);
                var RegistroWin: TRegistry;
                begin
                  RegistroWin := TRegistry.Create;
                  try
                    RegistroWin.RootKey := HKEY_CLASSES_ROOT;
                    RegistroWin.OpenKey('.' + Ext, true);
                    RegistroWin.WriteString('', ProgID);
                    RegistroWin.CloseKey;
                    RegistroWin.OpenKey(ProgID, true);
                    RegistroWin.WriteString('', ProgDescr);
                    RegistroWin.OpenKey('shell\open\command', true);
                    RegistroWin.WriteString('', '"' + ProgPath + '" "%1"');
                    RegistroWin.CloseKey;
                  finally
                    RegistroWin.CloseKey;
                    RegistroWin.Free;
                  end;
                end;
                procedure TForm1.Button1Click(Sender: TObject);
                begin
                  CreaNuovaAssociazione('alf',
                    '.ALF files program processor',
                    'Applicazione di prova per file .ALF',
                    'C:\WinNT\System32\Notepad.exe');
                end;


Ti ringrazio molto!
Ora vedo di capire se da "OnActivate" del form posso ricavare parametri 
utili.
Grazie ancora, saluti
Andrea Laforgia ha scritto:


utili.
CHe c'entra OnActivate ?!

Dunque, presumo che:
facendo doppio click su un file con estensione registrata ad 
applicazione X, venga lanciata applicazione X con parametro %1 (nome 
file) che, con ParamStr vado a leggere e gestisco, mentre, se 
l'applicazione è già aperta ipotizzavo "l'attivazione" di OnActivate 
oppure la ricezione di qualche messaggio di windows da gestire in 
Application.OnMessage. Devo ancora fare prove, al momento sto cercando 
info sulla questione delle istanze di applicazione; vorrei aprire i 
suddetti file sempre nella stessa istanza senza aprire n applicazioni X.
Andrea Laforgia ha scritto:



Stai chiedendo due cose diverse:
1 - Associare una certa estensione ad tuo programma: fai come ti ha detto
Andrea.
2 - Aprire una sola istanza del programma:
le FAQ ti danno una prima spiegazione:
(inizio cit.)
3.6
-DOMANDA:
Come prevenire nuove istanze di un'applicazione in Delphi, ovvero fare in
modo che si possa aprire una volta sola?
-RISPOSTA:
Lo puoi fare usando le API di Windows, inserendo questo codice nel
file di progetto (.dpr):
var
PrevInstHandle: THandle;
begin
PrevInstHandle := CreateMutex(nil, False,
'InserireUnaStringaUnivocaCheIdentificaIlProgramma');
if (GetLastError <> ERROR_ALREADY_EXISTS) and (PrevInstHandle <> 0)
then begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
(fine cit.)
Maggiori info le trovi qua:
http://delphi.about.com/od/windowsshellapi/l/aa100703a.htm
Ciao
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio

La questione della singola istanza non è strettamente legato a come 
implementarla ma a come gestire lo scambio di dati DDE, a tal proposito 
ho trovato info su TDdeServerConv (componente nella sezione system), la 
soluzione sta nel gestire l'evento OnExecuteMacro.
Riepilogando, bisogna:
  - registrare l'estensione
  - registrare un server DDE
  - implementare l'evento OnExecuteMacro secondo esigenza.
Per ora, ringrazio per l'interessamento.
ACSH ha scritto:
