Ti rispondo con ordine:

Domanda 1
Io ti suggerisco di inserire dei controlli visuali aggiuntivi che permettano all'utente di scegliere, da una lista, quali campi utilizzare nel processo di ordinamento e il criterio con cui questo viene fatto (crescente o decrescente). In più, aggiungerei una casella di testo per poter eventualmente inserire al suo interno un contenuto specifico da ricercare all'interno dei tuoi dati.
Quando l'utente preme il pulsante di avvio della ricerca, costruisci "al volo" uno statement SQL controllando i campi selezionati e i criteri, chiudi la query che usi per accedere ai dati, imposti l'SQL e la riapri, ottenendo nella griglia i dati che corrispondono al filtro di ricerca.

Domanda 2
Sconsiglio la stampa della griglia per alcuni (buoni) motivi: si tratta di un controllo visuale, quindi incorpora solo un metodo in grado di generare un'immagine di output stampabile, che però include solo i record visualizzati e non quelli nascosti (quando ne hai molti e devi scorrerli con l'apposita barra, che viene anch'essa stampata). Quindi, non per fattori estetici, che comunque non vengono messi in secondo piano, ma soprattutto per fattori pratici, ti suggerirei di costruire un report ad hoc per la stampa dei dati.
Se il tuo problema è stampare esattamente i dati che vengono visualizzati nella griglia, dopo aver applicato il filtro di cui hai chiesto alla domanda 1), ti basta basare il tuo report su una query che vai a copiare da quella utilizzata per la visualizzazione a video dei dati.

Domanda 3
Cerca informazioni nella Guida in linea di Delphi sulle funzioni FindFirst, FindNext e FindClose; servono per ricercare file all'interno di un percorso utilizzando maschere e attributi...potrebbe fare al caso tuo; ad esempio, se usi la FindFirst per cercare il primo file disponibile in una cartella e la funzione ti restituisce un errore, allora probabilmente significa che non ci sono file e quindi si tratta di una cartella vuota.

Spero di aver risposto correttamente ai tuoi quesiti.

Ciao!