Newsgroup: it.comp.lang.delphi
Titolo: Domandona su file salvati

Salve! Ho creato un Word Processor, e ho osseravato che dando come file
default ( o qualcosa di simile ) nel dialog di salvataggio tramite l'object
inspector, posso far salvare al programma file con estensioni anche diverse
da RTF e Txt.  crearsi quindi un tipo di file di testo con un' estensione
particolare è quindi fattibile: la domanda è: ma come si può dare a questi
file creati , con estensione supponiamo .XXX, l'icona relativa al programma.
Es: dato il file da me definito come prova.xxx , l'estensione xxx creata da
me , e data l'icona Y, come attribuire a prova.xxx l'icona in questione???
Grazie in anticipo
Marcus

 me , e data l'icona Y, come attribuire a prova.xxx l'icona in questione???
Devi "registrare" il tuo tipo di file. O lo fai manualmente tramite explorer
 (ctrl+shift+pulsantedestro -> apri con, utilizza sempre ... e scegli il tuo
programma):
 ci sono anche altre opzioni (apri, stampa, preview, ecc )
Oppure, per farlo dal programma stesso, devi agire nel registro (non ricordo
se ci sono
funzioni api che lo facciano per te ... so che quando l'ho dovuto fare io ho
agito direttamente
nel registro).
Se devi creare un'applicazione da distribuire e ti serve il codice per il
registro riscrivi pure.
Ciao!! DAVIDE DG.

Per Marcus : Ho provato a rispondere alla tua email ... ma il mio server di
Libero
mi risponde "Invalid Recipient" ... perciò posto la mia risposta qui ( che è
anche la
risposta alla domanda del thread...) :
Eccoti un esempio di codice ... non l'ho provato ... però dovrebbe andare :
ho convertito il codice
di un mio vecchio programma in questa procedura :
uses registry;
CONST
 _SoftwareClasses = 'Software\CLASSES';
 _Shell           = '\Shell';
 _Open            = '\Open';
 _Command         = '\Command';
 _Trailer         = '\';
 _null            = '';
 _type            = '_Type';
Procedure RegisterFileType ( Extension : String; Viewer : String );
// Il Viewer deve contenere anche le informazioni sulla riga di comando da
usare.
// Facciamo l'esempio di un tipo di file .ABC letto da un lettore VABC.exe :
// In questo caso potresti fare : RegisterFileType ('.ABC',
Percorso+'VABC.exe "%1"');
// Dove Percorso è il percorso completo del lettore e "%1" è una direttiva
all
// Explorer : significa che quando fai doppio clic sul file di tipo ABC, lui
// chiama VABC.exe "nomedelfilechiamato.abc"
// Ovviamente sta poi al lettore vabc distinguere _come_ è stato chiamato.
// La procedura è molto semplice e non implementa funzioni speciali (comandi
di
// stampa, antemprima ecc... (se avrai bisogno di consigli chiedi pure!).
// Se conosci i file .REG non dovresti avere problemi a "decifrare" i miei
commenti.
// e "Predefinito" sta per "@" nel file .REG
// Altra cosa : Questo metodo NON usa le CLSID ... non le so usare!!
// Le CLSID sono le {200032-1428940- ecc. ecc. }
Var R : TRegistry;
Begin
 R := TRegistry.Create;
 with R do begin
 RootKey := HKEY_CLASSES_ROOT;  // Lo registriamo in CLASSES_ROOT
 OpenKey     ( Extension , True );  // Crea HKEY_CLASSES_ROOT\.ABC
 WriteString ( _null, Extension + _type ); // Predefinito = '.ABC_Type'
                     // Qui puoi decidere tu... però poi deve coincidere
dopo.
 CloseKey;
 OpenKey     ( Extension+_type, True );  // Crea HKEY_CLASSES_ROOT\ABC_Type
 WriteString ( _null, 'File di tipo ' + Extension ); // Predefinito = "File
di tipo .ABC"
                         // puoi mettere quello che vuoi.
 CloseKey;
 OpenKey     ( Extension+_type + _Shell + _Open , True );
                 // Crea HKEY_CLASSES_ROOT\.ABC_Type\Shell\Open
 WriteString ( _null , _null );  //  Predefinito = ''
 CloseKey;
 OpenKey     ( Extension+_type+_Shell+_Open+_Command,True);
                // Crea HKEY_CLASSES_ROOT\.ABC_Type\Shell\Open\Command
 WriteString ( _null, Viewer );
                // Predefinito = "Viewer"
 CloseKey;
 RootKey := HKEY_LOCAL_MACHINE; // E lo registriamo in LOCAL MACHINE :
 OpenKey     ( _SoftwareClasses+_Trailer+Extension+_type, True );
                // Crea HKEY_LOCAL_MACHINE\Software\Classes\.ABC_Type
 WriteString ( _null, 'File di tipo ' + Extension );
                // Predefinito = "File di tipo .ABC"
 CloseKey;
 OpenKey     ( _SoftwareClasses+_Trailer+Extension+_type+_Shell+_Open,True);
                // Crea
HKEY_LOCAL_MACHINE\Software\Classes\.ABC_Type\Shell\Open
 WriteString ( _null, _null ); // Predefinito = ''
 CloseKey;
 OpenKey
 _SoftwareClasses+_Trailer+Extension+_type+_Shell+_Open+_Command,True);
                // Crea
HKEY_LOCAL_MACHINE\Software\Classes\.ABC_Type\Shell\Open\Command
 WriteString ( _null, Viewer ); // Predefinito = "Viewer"
 CloseKey;
end;
 R.Free;
End;
Ok ... che te ne pare ?
Ora vado a dormire perchè domani ... anche se è l'ultimo giorno di
università prima delle (POCHE) vacanze di Pasqua,
devo andarci! (SIGH!)
CIAO!! DAVIDE DG