Newsgroup: it.comp.programmare.win32
Titolo: ho grabbato l'explorer!

Ciao a tutti, mi piacerebbe sentire la vostra opinione in merito ad un
mio... trucchetto!
Ricordo che in Win16 si poteva esplorare il sistema con pochi semplici
controlli quali il DriveComboBox, il DirectoryListBox ed il FileListBox, in
Win32 pero', cambia tutto e non ho ancora trovato dei controlli belli e
pronti per "simulare" l'explorer...
Dopo diversi tentativi con TreeView e ListView, mi e' venuta un' idea:
perche' non usare l'explorer, visto che c'e' gia' ed e' proprio quello che
voglio ottenere??
In poche parole, dunque, ho una form vuota, apro una finestra dell'explorer
e ne becco l'handle, poi la rendo child della mia form, le elimino la
captionbar e la massimizzo: sembra proprio gestione risorse...
Se rendo l'explorer child di un pannello, mi rimane lo spazio per avere
altri controlli sulla form e costruire cosi' le mie commondialog...
Vi sembra un'idea valida o trovate delle controindicazioni serie che la
rendono non applicabile??
grazie per l'attenzione, ciao e buon lavoro, Davide.
/ - / - | - \ - \
Davide Piras
pir...@engineer.com
\ - \ - | - / - /

captionbar e la massimizzo: sembra proprio gestione risorse...
Sicuarmente 'originale' come idea. In alternativa prova a dare un'occhiata
sul sito di Infomedia, sotto gli esempi di Computer Programming (n° 89) ci
dovrebbe essere un componente (per Delphi) con sorgente.
Ciao!
--
- Carlo -
BSSoftware Tips Mailing-List Support

 rendono non applicabile??
Domanda: una volta che uno seleziona un file dall'explorer come vai a
ripescarne il nome?
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

 ripescarne il nome?
OTTIMA domanda...
in effetti pensavo di "forzare" l'utente a trascinare un file dalla ListView
dell'Explorer su un pannello o simile, cosi' ricevo un bel WM_DROPFILES e
sono salvo...
Ci sono anche altri problemi:
all' ALT + F4 o nel menu File->Chiudi l'eplorer si chiude e rimango con un
pannello vuoto, al Paint me ne accorgo e riapro l'explorer ma e' un po
sporco come metodo...
mi chiedo: E' possibile intercettare i messaggi spediti all'explorer e
processarli oppure lasciarli alla sua WndProc?
Cavolo, questo subclassing devo proprio studiarmelo :-(
Ciao, buon lavoro, Davide.


 processarli oppure lasciarli alla sua WndProc?
Sì, il subclassing sarebbe una soluzione...
Attento però che, anche se la "parenti" e la infili sulla tua form, la
finestra dell'explorer appartiene ad un altro processo ---> niente
SetWindowLong diretta...
Dovrai infilarti nel suo spazio di indirizzamento (tramite hook o eventuali
tecniche alternative) e appioppargli un thread che faccia il subclassing e
che contenga la nuova WndProc (e che richiami quella vecchia)...
[Una volta "dentro" il processo dell'explorer ovvio che puoi usare la
Get/SetWindowLong]


 linee il procedimento...
Per questo tipo di cose esiste una vecchia architettura
precedente al COM, volendo.
Si basa su di una FMExtensionProc, una "estensione
del file manager" che viene chiamata con opportuni
messaggi in vari casi, fra cui il cambio di selezione
(FMEVENT_SELCHANGE).
La si istalla nella sezione [AddOns] di Winfile.ini.
L'estensione invia poi al file-manager un messaggio
FM_GETFILESELLFN per sapere l'attuale selezione ed
agire di conseguenza.
Credo (non ho provato) che continui a funzionare bene
a tutt'oggi (la documentazione implica questo).
Non so esattamente quali source-interfaces COM siano
definite per fare lo stesso lavoro via COM.
Alex

 a tutt'oggi (la documentazione implica questo).
Penso solo sotto NT però... sulla MSDN ho trovato come requirements
NT/Win2000.
Non so Davide in che ambiente sia, io sono sotto Win95 quindi nisba...
Eppure ho una ShellExtension che aggiunge una voce "Copia il percorso negli
appunti" al context menu di ogni file... penso che sfrutti qualcosa di
simile a ciò che ci servirebbe (c'è anche un altro powertoy che permette
un'operazione di "Open container" che apre la directory e seleziona
l'elemento "puntato" da un collegamento (lnk)...)
Sarebbe interessante capire come fanno ma non ho i sorgenti a disposizione
(sigh)...


 (sigh)...
Penso ti serva il libro di Esposito, pubblicato dalla Wrox Press,
una buona introduzione a come lavorare da C++ con lo Shell Windows.
Alex

> > Non so Davide in che ambiente sia, io sono sotto Win95 quindi nisba...
io uso e sviluppo sotto NT.
uso Delphi 5.0 e non posso usare le interfacce IShellXYZ per due motivi:
1) ho letto che in Delphi 5 non funzionano bene, c'e' un qualche baco nei
file .pas che definiscono le interfacce...
2) non ho ancora iniziato a lavorare con le interfacce e con COM, rimando,
rimando, rimando ancora... la consegna della tesi si avvicina ed il tempo
stringe!
Ho risolto (aggirato) il problema in questo modo:
1) creo un pannello
2) enumero le finestre con WndClass = "ExploreWClass" tramite un EnumWindows
3) ShellExecute(.., open, "explorer.exe"..., ..)
4) ri-enumero le finestre con WndClass = "ExploreWClass" tramite un
EnumWindows, cosi' faccio un confronto con quelle trovate prima e ricavo
quella che ho aperto io
5) imparento con SetParent(.., ..) la finestra che mi interessa...
ora ho un pannello che contiene un Gestione Risorse vero, senza bisogno di
scrivere altro codice e di andare a lavorare con le interfacce...
e' un metodo un poco bruttino pero' funziona, poi, non si parla tanto di
riuso?
Ciao, Davide.


 una buona introduzione a come lavorare da C++ con lo Shell Windows.
Non è che hai il titolo giusto? Magari quest'estate lo leggo...
Ti ringrazio per tutto :-)


 scrivere altro codice e di andare a lavorare con le interfacce...
Resta sempre da capire come fai a sapere quale file ha selezionato
l'utente...
[non stai cercando di costruire una specie di dialog?]


 Non è che hai il titolo giusto? Magari quest'estate lo leggo...
"Visual C++ Windows Shell Programming", Esposito, Wrox Press Dec 1998.
Alex