Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: darione - Giugno 13, 2012, 05:40:25 pm

Titolo: istanziare oggetti che richiedono Tcomponent nel create
Inserito da: darione - Giugno 13, 2012, 05:40:25 pm
Domanda che mi sono sempre dimenticato di risolvere ...
Come istanziare oggetti visuali che richiedono Tcompoment nel create?

Ad esempio in una semplice unit voglio
fare una routine che spazzola dei files, perciò mi server un TFileListBox.

Ok quando lo creo vedo che non posso fare un semplice
listaFiles := TFileListBox.create;

Ma devo per forza passare un TComponent nel create.

Se sono in una form posso ad esempio fare
listaFiles := TFileListBox.create(self);
e me lo prende tranquillamente, funzionando benissimo.

Se sono in una unit semplice vorrei fare un qualcosa del tipo

function spazzola(cartella:string);
var
  flb:TfileListBox;
  p: TqualcosaCheNelCreateDelListBoxCiVadaBene;
begin
  p := TqualcosaCheNelCreateDelListBoxCiVadaBene.create;
  flb := TfileListBox.create(p);
  flb.directory := 'c:\tmp';
  flb.filter := '*.txt';
  flb.update;
  //ecc ecc
  flb.free;

end;

Spero d'essermi spiegato bene. Al momento devo usare una TForm dove metto la routine, ma è noioso, vorrei usare un semplice unit dove mettere la routine che elabora cartelle ecc.

Stessa cosa vale con altri componenti visuali, cioè vorrei istanziarli da semplici unit, ma ogni volta c'è il problema di che mettere nel create().

Magari è una bischerata la soluzione, qualcuno di voi la sa?
Grazie mille.

Darione
Titolo: Re:istanziare oggetti che richiedono Tcomponent nel create
Inserito da: nomorelogic - Giugno 13, 2012, 07:03:10 pm
Hai già provato con nil come parametro di Create?
Ad esempio:
Codice: [Seleziona]
flb := TfileListBox.create(nil);

In alternativa puoi modificare la lista dei parametri per prevedere anche il passaggio dell'owner da parte del chiamante.

Detto questo il TFileListBox è molto comodo per fare l'operazione che dici tu però... è fatto apposta per far vedere all'utente quello che contiene, si tratta un componente GUI :)

La funzione che vuoi fare tu non ha molto a che vedere con una GUI, forse dovresti rivederla usando FindFirst e FindNext
http://www.freepascal.org/docs-html/rtl/sysutils/findfirst.html (http://www.freepascal.org/docs-html/rtl/sysutils/findfirst.html)