Newsgroup: it.comp.lang.delphi
Titolo: FileListBox

Ciao a tutti.
Scusate, qualcuno può spiegarmi perchè con FileListBoxClick:
procedure TForm1.Button1Click(Sender: TObject);
begin
FileListBox1.Mask:='Ingredienti\*.txt';
end;
procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(FileListBox1.FileName);
end;
Mi dice che non trova la directory.
Capisco che non trova la cartella "Ingredienti" ma perche?
E una funzione che mi farebbe risparmiare tanto tempo.
Grazie a tutti.
--- posted by geoForum on 
http://www.delphiedintorni.it

 Capisco che non trova la cartella "Ingredienti" ma perche?
Se stai usando un percorso relativo, è possibile che questo faccia 
riferimento alla cartella corrente che potrebbe essere diversa da quella 
a cui vuoi effettivamente accedere tramite il controllo *TFileListBox*.
Ricorda inoltre che se hai esigenze di esplorare genericamente il file 
system, è meglio ricorrere alle funzioni *FindFirst*, *FindNext* e 
*FindClose*, di cui trovi esempi e istruzioni nella Guida in linea, 
senza sfruttare controlli visuali che occupano risorse inutilmente.
Ovviamente, sempre se è verificata la necessità menzionata di accedere 
al file system, senza esigenze di visualizzazione.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

Si, ma io voglio aprire dei file di testo contenuti nella 
cartella "Ingredienti" che deve stare nella directory del programma.
La funzione mi serve solo per quello.
Il codice del Button mi dice che in quella cartella sono contenuti quei 
File, ma il codice del FileListBox non me li apre.
Dove sbaglio?
Ciao e grazie.


 ha scritto nel messaggio news:5aiqeuF...@mid.individual.net...

Ciao
prova con
FileListBox1.Mask:=ExtractFilePath(Application.ExeName)+'Ingredienti\*.txt';
C.

Grazie camperos, ho provato, ma niente.
č possibile sia cosě sfigato? Tutte le domande che faccio io sono 
davvero cosě difficili?
Scusate lo sfogo.
Il codice di camperos effetivamente trova la certella, ma non apre il 
file in quando dice che non č possibile aprire bla/bla/*.txt
invece di aprire Alexander.txt.Cosa che fa il mio codice che perň non 
trova la cartella.
Ciao a tutti.


 cartella "Ingredienti" che deve stare nella directory del programma.
E allora devi far precedere il percorso della cartella "Ingredienti" con 
il percorso dell'applicazione, che puoi facilmente determinare usando la 
funzione *ExtractFilePath* applicata alla proprietà /ExePath/ 
dell'oggetto *Application*.
   TargetDir := ExtractFilePath(Application.ExePath) + "Ingredienti\*.*";


   Marco.
Ciao Marco, sarò io ma il continua sempre a dirmi che non trova il file.


 Ciao Marco, sarò io ma il continua sempre a dirmi che non trova il file.
Eventualmente, posta il tuo codice attuale.


   Marco.
procedure TForm1.Button1Click(Sender: TObject);
begin
FileListBox1.Mask:='Ingredienti\*.txt';
end;
procedure TForm1.FileListBox1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(FileListBox1.FileName);
end;
Nella cartella Ingredienti c'è un file .txt che si chiama Alexander ok?
Quando chiamo l'evento onclick della FileListBox l' errore che compare 
mi dice che non può aprire Alexander.txt perche non trova la cartella 
Ingredienti, però con ButtonClick la cartella la trova perche mi fa 
vedere i file al suo interno, se clicco su uno di questi file non trova 
la cartella.Scusa la confusione, spero di essermi spiegato.
Ciao Marco e grazie.


 la cartella.Scusa la confusione, spero di essermi spiegato.
Non hai preso in considerazione il mio suggerimento su 
Application.ExePath e la funzione *ExtractFilePath*, nel tuo codice è 
del tutto assente.


 end;
Nella proprietà Mask ci va solo "*.txt"
La cartella di partenza devi impostarla con la proprietà Directory.
   FileListBox1.Directory := 'c:\';
   FileListBox1.Mask := '*.txt';
-- 
Jax

Finalmente. C'è l'ho fatta.
Intanto un rigraziamento a tutti quelli che mi hanno sostenuto.
La soluzione che ho trovato:
procedure TForm1.Button1Click(Sender: TObject);
begin
FileListBox1.Mask:='Ingredienti\*.txt';
end;
procedure TForm1.FileListBox1Click(Sender: TObject);
begin
if FileListBox1.ItemIndex <>-1 then
begin
Memo1.Lines.LoadFromFile('Ingredienti\'+FileListBox1.Items
[FileListBox1.ItemIndex]);
end;
end;
Lo stesso se si usa una ListBox:
procedure TForm1.Button2Click(Sender: TObject);
var
PercorsoFile: string;
begin
PercorsoFile:= ExtractFilePath(Application.ExeName);
ListBox1.Items.LoadFromFile(PercorsoFile + 'Ingredienti\Nomi 
Cocktail.txt');
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
PercorsoFile: string;
begin
PercorsoFile:= ExtractFilePath(Application.ExeName);
if ListBox1.ItemIndex<>-1 then
Memo1.Lines.LoadFromFile(PercorsoFile + 'Ingredienti\'+ListBox1.Items
[ListBox1.ItemIndex]+'.txt');
end;
Ciao a tutti e buon lavoro.


 end;
Il controllo FileListBox ti mostra i file di una cartella (impostando la 
sua proprietà Directory): se tu lo usi in questo modo è inutile.
Inoltre stai utilizzando un percorso relativo (Ingredienti\...); in 
questo modo ti esponi a probabilissimi problemi, perché un percorso 
relativo dipende dalla cartella corrente. Se ti funziona adesso non è 
affatto detto che ti funzioni domani o su un altro computer.
Se Ingredienti è una sottocartella del tuo programma, per assicurarti 
che un file al suo interno venga sempre correttamente caricato, devi 
"costruire" un percorso assoluto a partire dal percorso della tua 
applicazione.
Per fare correttamente quello che stai cercando di fare:
procedure TForm1.FormCreate(Sender: TObject);
begin
   FileListBox1.Directory := ExtractFilePath(Application.ExeName) + 
'Ingredienti';
   FileListBox1.Mask := '*.txt';
end;
procedure TForm1.FileListBox1Click(Sender: TObject);
begin
   Memo1.Lines.LoadFromFile(FileListBox1.FileName);
end;
Poi, se sei convinto del tuo codice... beh, fai come vuoi, poi non dire 
che non ti avevo avvertito :)
-- 
Jax

Jax
Senti caro Jax, qua fino a prova contraria l'unico codice che non 
funziona č il tuo,
il mio non da nessun problema, fin'ora provato su 3 pc(due XP e un 
Vista).
Provare per credere.
Non so che dirti.
Ciao.


 Provare per credere.
Non posso "provare per credere", semplicemente non funzionerà perché non 
hai spiegato dettagliatamente cosa vuoi fare e che struttura di cartelle 
hai nel tuo programma.
SE:
1) il tuo programma ha una sottocartella Ingredienti
2) vuoi mostrare i file txt contenuti in questa cartella
3) quando clicchi su un file vuoi che ne venga caricato il contenuto in 
una memo
ALLORA il mio codice funziona (non che ci voglia molto).
ALTRIMENTI probabilmente non funziona, ma semplicemente perché non hai 
spiegato dettagliatamente (come ho fatto io) la tua situazione e/o cosa 
vuoi fare, quindi siccome nessuno ha la sfera di cristallo e non conosco 
cracker per entrare sul tuo pc a vedere... se sei soddisfatto così, e 
funziona, mi pare di averti detto (con tanto di smiley) di fare come volevi.
Io ti sto solo dicendo che è un accrocchio, e che anche gli accrocchi 
funzionano. L'importante è essere consapevoli di quello che si fa: da 
cosa capisco che non ne sei consapevole? Da quel 
FileListBox1.Mask:='Ingredienti\*.txt';
e anche dal resto del codice.
Tutto questo senza polemiche, io fino a prova contraria sono sempre qua 
per aiutare, e non per cazziare, a costo di essere preso per il culo.
Adesso rileggi il post prima di rispondermi di getto.
-- 
Jax

ALLORA il mio codice funziona (non che ci voglia molto).
Si è proprio così, scusami se insisto, ma il tuo codice non funziona,
la  FileListBox non carica niente se non gli dico dove trovare i file.txt
Credimi, sono consapevolissimo che sicuramente ne sai più di me, 
altrimenti non starei qui, ma se ti dico che non funziona e perche lo 
sto provando, e non funziona.
Allora facciamo una cosa:
Visto che il mio codice non ha dato problemi sulla prova di 2 sistemi 
operativi diversi, dimmi solo secondo te quale sarà il problema in 
futuro, considera che la sottocartella deve e sottolineo "deve" stare al 
suo posto, se essa verrà spostata o cancellata verrà automaticamente 
creata al riavvio del programma.
Gazie 
ciao.


 sto provando, e non funziona.
Siccome sono curioso, ho provato il tuo codice e finalmente ho capito: 
infatti mi sono sorpreso quando, impostando la proprietà Mask come la 
imposti tu (con la sottocartella), mi ha mostrato senza colpo ferire i 
file txt della cartella Ingredienti. Ora, non immaginavo che funzionasse 
anche così, il problema è che, come hai scoperto tu stesso, è un 
funzionamento fasullo... mi spiego meglio.
Mettiamo che il tuo programma gira nella cartella C:\.
La proprietà Mask è stata pensata per "filtrare" i file di certe 
estensioni, ed è un caso che impostandogli anche la cartella Ingredienti 
questa ti faccia vedere i file in quella cartella: infatti se cerchi di 
riferirti semplicemente a FileListBox1.FileName per caricare il file 
selezionato (come si dovrebbe fare con la FileListBox), ti dà errore, 
perché in quel momento la cartella di riferimento della FileListBox è 
ancora C:\, quindi il componente "crede" che l'elemento selezionato sia 
in C:\ (e quindi non lo trova), proprio perché non tiene conto delle 
eventuali sottocartelle specificate nella proprietà Mask (non è un bug, 
è la proprietà Mask che non è stata pensata per fare quello che cerchi 
di fare).
Per fare quello che dici tu, Button compreso, devi *prima* impostare la 
cartella base del FileListBox (C:\Ingredienti), poi filtrare i file txt 
e successivamente potrai riferirti ai file semplicemente usando FileName 
senza fare strani giri, ossia:
procedure TForm1.Button1Click(Sender: TObject);
begin
   FileListBox1.Directory := ExtractFilePath(Application.ExeName) + 
'Ingredienti';
   FileListBox1.Mask := '*.txt';
end;
procedure TForm1.FileListBox1Click(Sender: TObject);
begin
   Memo1.Lines.LoadFromFile(FileListBox1.FileName);
end;
Provato e testato... se non ti funziona vuol dire che c'è ancora 
qualcosa che non ci siamo detti, e allora a quel punto mi arrendo e ti 
auguro di non aver problemi in futuro :)
-- 
Jax

Jax
Ok Jax forse e meglio smettere qui, io personalmente continuerò a fare 
delle prove su altri pc e spero vivamente che non ci siano problemi.
Cmq a me il tuo codice continua a non funzionare, l'unica cosa che mi è 
rimasta da dirti è che la cartella del programma ora sta sul Desktop, ho 
provato a spostarla in C:, in E:, e in F: e non da problemi.
Va bè Grazie 1000 per la tua disponibilità,  è stata cmq una bella 
chiacchierata. spero che non te la prendi.
Ciao Jax alla prossima.
Grazie ancora.


 Ciao Jax alla prossima.
No problem... mi spiace però che tu non abbia capito la funzione della 
FileListBox, quando in realtà è molto più semplice da usare di come fai 
tu... per questo in futuro potrai aver problemi.
Se il mio codice non funziona, è ovvio che io non ho capito / tu non hai 
spiegato bene cosa deve fare e come deve girare l'applicazione: 
probabilmente perché stiamo parlando di una cosa talmente elementare e 
io/tu ho/hai dato per scontato qualcosa che scontato non doveva essere.
Amici come prima.
-- 
Jax