Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: bonmario - Maggio 17, 2018, 02:49:46 pm

Titolo: Creare un nuovo componente (.lpk)
Inserito da: bonmario - Maggio 17, 2018, 02:49:46 pm
Ciao,
ho appena iniziato a scrivere il mio primo componente (.lpk), seguendo questa guida:
http://wiki.freepascal.org/How_To_Write_Lazarus_Component (http://wiki.freepascal.org/How_To_Write_Lazarus_Component)

Il mio componente dovrà "contenere":
- 3 TLabel
- 3 TEdit
- 2 TButton
- 4 TCheckBox
- 3 TGroupBox

Dalla guida, mi sembra di capire che devo fare tutto "da codice", perché non esiste un etitor grafico che mi permette di aggiungere i vari componenti e posizionarli all'interno del mio nuovo componente.

E' proprio così, oppure ho capito male io?

Grazie in anticipo, Mario
Titolo: Re:Creare un nuovo componante (.lpk)
Inserito da: Stilgar - Maggio 17, 2018, 03:30:52 pm
Sì.Altrimenti crei un Frame e lo "disegni".:)
Titolo: Re:Creare un nuovo componante (.lpk)
Inserito da: bonmario - Maggio 17, 2018, 04:00:06 pm
Altrimenti crei un Frame e lo "disegni".:)

Scusa la domanda stupida, ma non capisco cosa intendi ....

Provo a spiegare il mio scopo, magari mi sapete consigliare meglio.

Ho 4 o 5 programmi, che in sostanza servono a fare ricerche nei files. Ognuno di questi programmi è ottimizzato per il tipo di file che gestisce.

Volevo fare un componente unico in cui l'utente inserisce:
- la directory da cui far partire la ricerca
- il filtro sui nomi dei files
- cosa cercare all'interno dei files
- ecc.

Una volta creato questo componente, usarlo nei 4 o 5 programmi, eventualmente nascondendo i singoli parti del componente creato da me, nel caso in cui non dovessero servire in quel singolo programma.

Grazie, Mario
Titolo: Re:Creare un nuovo componante (.lpk)
Inserito da: xinyiman - Maggio 17, 2018, 04:03:51 pm
Ciao bonmario, in lazarus i componenti sono singoli. Quando bisogna creare qualcosa di assemblato bisogna usare i frame. Che sono simili alle form, ma permettono di disegnare pezzi di schermata da riutilizzare.

Guarda qui: http://wiki.freepascal.org/Frames

Poi nei vari progetti ti copi i file del frame e lo richiami dal singolo progetto. Così sei a cavallo
Titolo: Re:Creare un nuovo componante (.lpk)
Inserito da: Stilgar - Maggio 17, 2018, 04:07:07 pm
Puoi anche registrare i frame.In modo da non andare a copia e incolla selvaggio tre i progetti :)
Titolo: Re:Creare un nuovo componante (.lpk)
Inserito da: xinyiman - Maggio 17, 2018, 04:09:12 pm
Puoi anche registrare i frame.In modo da non andare a copia e incolla selvaggio tre i progetti :)
Sai che questa non la sapevo. E come si fa?
Titolo: Re:Creare un nuovo componante (.lpk)
Inserito da: Stilgar - Maggio 17, 2018, 04:23:47 pm
Codice: [Seleziona]
procedure Register;begin
  RegisterComponents('LaMiaBellaTab', [
    TILMioBelComponent,    TILMioBelFrame  ]);
Hai mai provato una cosa del genere? :)
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: bonmario - Maggio 17, 2018, 04:33:16 pm
Grazie a tutti, leggo il Wiki e ci provo.

Ciao, Mario
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: bonmario - Maggio 17, 2018, 06:10:59 pm
Scusatemi, ma è da più di un'ora che giro a vuoto, e da solo non capisco ...

Allora, ho creato il TFrame con dentro un paio di oggetti.
Adesso vorrei aprire un nuovo progetto e mettere nel suo form il contenuto del TFrame che ho creato.
Come faccio????????????

Se metto nel form l'oggetto TFrame, questo è vuoto, e non capisco come fare ad andare a prendere quello che ho creato io.

Grazie in anticipo, Mario
Titolo: Re:Creare un nuovo componante (.lpk)
Inserito da: xinyiman - Maggio 17, 2018, 06:19:07 pm
Codice: [Seleziona]
procedure Register;begin
  RegisterComponents('LaMiaBellaTab', [
    TILMioBelComponent,    TILMioBelFrame  ]);
Hai mai provato una cosa del genere? :)

Onestamente mai ma sicuramente proverò :)
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: xinyiman - Maggio 17, 2018, 06:22:51 pm
Scusatemi, ma è da più di un'ora che giro a vuoto, e da solo non capisco ...

Allora, ho creato il TFrame con dentro un paio di oggetti.
Adesso vorrei aprire un nuovo progetto e mettere nel suo form il contenuto del TFrame che ho creato.
Come faccio????????????

Se metto nel form l'oggetto TFrame, questo è vuoto, e non capisco come fare ad andare a prendere quello che ho creato io.

Grazie in anticipo, Mario

Se vai nella palette standard di lazarus sul fondo trovi il componente TFrame. Se lo piazzi sulla form di un progetto ti farà vedere la lista dei frame a disposizione del progetto stesso.
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: bonmario - Maggio 17, 2018, 06:26:50 pm
Quello ho già provato a farlo, ma l'elenco è vuoto.
Come faccio ad aggiungere il mio TFrame a quell'elenco?

Grazie, Mario
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: bonmario - Maggio 18, 2018, 08:06:36 am
Se vai nella palette standard di lazarus sul fondo trovi il componente TFrame. Se lo piazzi sulla form di un progetto ti farà vedere la lista dei frame a disposizione del progetto stesso.


Stamattina, dopo una bella dormita, ci sono riuscito subito !!!



Codice: [Seleziona]
procedure Register;begin
  RegisterComponents('LaMiaBellaTab', [
    TILMioBelComponent,    TILMioBelFrame  ]);
Hai mai provato una cosa del genere? :)


A cosa serve questo ?


Grazie ancora a tutti, Mario
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: Stilgar - Maggio 18, 2018, 03:42:28 pm
Citazione
A cosa serve questo ?

Se non stai creando un pacchetto di componenti, a nulla.
 :)


I pacchetti hanno una unit che viene marcata come "di registrazione".
Importano tutti le unit che vuoi pubblicare nell'ide e registri singolo componente per singolo componente.
I TFrame non sfuggono a questa regola ;)


Stilgar
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: bonmario - Maggio 18, 2018, 06:27:43 pm
Ok, grazie !!

Tornando al discorso TFrame, oggi ho fatto un po' di prove, ed ho notato una cosa strana:

- ho creato un progetto nuovo, ed ho aggiunto il TFrame.
- dopo un'oretta, ho riaperto il progetto, ho aggiunto al TFrame un bottone e, riaprendo il progetto, ho trovato anche il bottone nuovo.
- Oggi pomeriggio ho aggiunto un TCheckBox al TFrame, ma riaprendo il progetto, questo non c'era.

Io, onestamente, mi sarei aspettato entrambe le volte di non trovare gli oggetti aggiunti.


Ciao, Mario
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: Stilgar - Maggio 19, 2018, 11:35:04 am
Citazione
- Oggi pomeriggio ho aggiunto un TCheckBox al TFrame, ma riaprendo il progetto, questo non c'era.

In questi casi vuol dire che l'ide non ha fatto l'aggiornamento visuale.

A runtime mi aspetto che tutte le modifiche fatte al padre vengano riportate fedelmente.
Di solito tolgo il frame disallineato e lo riapplico al contenitore.

Immagina che nella form venga applicato un clone del TFrame, l'ide dovrebbe tenere allineato il clone con l'originale. Ogni tanto scazza. :)

Se provi a rimuovere un componente dal clone che è presente sull'originale, l'ide ti blocca. Puoi solo modificarne le proprietà.
Prova a pensare al TFrame come uno stampino. Ogni volta che lo applichi a design time viene duplicata la parte visuale. Il codice resta Object Oriented in modo da riutilizzarlo in toto. Questo approccio ha il vantaggio di poter avere più istanze dello stesso frame con proprietà diverse.

Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: bonmario - Maggio 19, 2018, 12:22:47 pm
Ok, grazie !!!


Ciao, Mario
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: slapshot - Giugno 05, 2018, 09:19:02 am
Ciao,
ho appena iniziato a scrivere il mio primo componente (.lpk), seguendo questa guida:
http://wiki.freepascal.org/How_To_Write_Lazarus_Component (http://wiki.freepascal.org/How_To_Write_Lazarus_Component)

Credo che in Lazarus il concetto di package sia differente da quello di Delphi. E' una semplice raccolta di unit che consente di essere allegata ad un progetto come dipendenza senza dover andare a mettere le mani sulle path del sistema operativo, o della IDE stessa.

Antonio
Titolo: Re:Creare un nuovo componente (.lpk)
Inserito da: Stilgar - Giugno 05, 2018, 09:28:48 am
Ciao.
Sì  e no.
Se intendi dire che Lazaurs non ha la possibilità di fare la gestione dei package in modo dinamico sì, hai ragione. Per il momento lazarus e delphi sono molto diversi. (Quest' anno dovremmo avere il rilascio delle symtable condivise quindi il limite verrà superato)
Se guardi il resto del comportamento (design only, run time only, mixed) sono praticamente la stessa cosa dal punto di vista funzionale. Quindi no. Non è una semplice raccolta di unit. Puoi anche estendere l'ide esattamente come faresti in delphi. Con un pacchetto. D'altra parte in molte  cose  è un clone open source (se guardiamo le interfacce esposte da lazarus e delphi per l'estensione intendo)
😊
Stilgar