Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: nomorelogic - Agosto 25, 2014, 07:12:15 pm

Titolo: Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Agosto 25, 2014, 07:12:15 pm
ho scritto un articolo sull'ereditarietà delle form ed ho fatto un esempio con un ipotetico gestionale
in allegato il progetto di esempio (per chi non volesse scaricarlo da svn).

L'articolo di riferimento è:
http://www.lazaruspascal.it/index.php?page=152 (http://www.lazaruspascal.it/index.php?page=152)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: xinyiman - Agosto 27, 2014, 02:30:17 pm
Gran bell'articolo nomore. Bravo
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Agosto 28, 2014, 08:02:46 pm
Grazie xinyiman ;)

Segue la seconda puntata: http://www.lazaruspascal.it/index.php?page=153 (http://www.lazaruspascal.it/index.php?page=153)

Argomenti:
- log automatico delle azioni dell'utente
- salvataggio call stack in caso di eccezione (nel log automaticamente)
- toolbox: nuova classe di ausilio per l'inizializzazione delle form
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Legolas - Agosto 29, 2014, 09:53:46 am
Ottimo! Quando ho aperto il thread sulle best practices avevo in mente proprio qualcosa del genere!  :D

Complimenti  ;)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Agosto 29, 2014, 11:53:31 am
grazie Legolas

immaginavo che servisse qualcosa del genere, in più sto mettendo il tutto sullo stesso progetto... vedi mai che alla fine ne esce qualcosa di buono?!

Spero solo che gli articoli siano chiari, purtroppo scrivo (codice e articoli) sempre con la clessidra che scorre :(
Vabbè, se ci sono dubbi c'è sempre il forum :(
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Agosto 29, 2014, 12:15:41 pm
Poi non dovresti essere solo tu a scrivere il codice :D
alla fine l'articolo funge anche da specifiche ;)

Sto guardando con curiosità il tuo codice :D Al prossimo push su svn scarico.
Stavo già pensando a qualche modifica ;)

Stilgar
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Agosto 29, 2014, 12:53:40 pm
Beh, se stimola la curiosità è positivo :D

ho allineato il repository svn, a che modifica pensavi?
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Agosto 29, 2014, 01:01:26 pm
Ragionare a plug in e non monolitico.
Ma quello quando hai implementato tutte le cose che ti frullano per la testa :D
Spostare tutto in un datamodel in modo che possa essere applicato anche a form che non estendono "la superdotata" ma possa essere applicata anche a form esistenti ;)
Magari facendo implementare una interfaccia. :D

Stilgar
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Agosto 29, 2014, 01:03:53 pm
PS: Il riempimento dello failback stack  dovrebbe essere fatto a livello di applicazione, non di form ... ;)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Agosto 29, 2014, 02:05:03 pm
Ragionare a plug in e non monolitico.
Ma quello quando hai implementato tutte le cose che ti frullano per la testa :D
in effetti ho in previsione di usare le shared object (.DLL per i windowsiani) per rendere modulare il tutto
ma è ancora presto :P


Spostare tutto in un datamodel in modo che possa essere applicato anche a form che non estendono "la superdotata" ma possa essere applicata anche a form esistenti ;)
Magari facendo implementare una interfaccia. :D

in effetti l'uso delle interfacce potrebbe essere un'alternativa
ma in questo modo la cosa si fa comunque e senza cambiare una riga di codice nelle form esistenti
basta cambiare la classe da cui ereditare, da
Codice: [Seleziona]
TForm1 = class(Tform)

a

Codice: [Seleziona]
TForm1 = class(TBaseForm)

e si può premere F9 :)



Edit:
vabbè, il "si può premere F9" è realistico ma va preso con beneficio d'inventario ;)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Agosto 29, 2014, 02:17:53 pm
PS: Il riempimento dello failback stack  dovrebbe essere fatto a livello di applicazione, non di form ... ;)

hai ragione, ma nella zucca mi frulla sempre qualcosa di "strano" che non ha preso una forma definita

I motivi sono 2.

1) Ho deciso di fare così (non l'ho scritto nell'articolo, dannata clessidra!) perchè voglio decidere nella form se far filtrare l'eccezione all'esterno (in modo che sia catturata dall'applicazione) o se... lavare i panni sporchi in casa.
Non è infatti detto che le eccezioni debbano per forza concludersi con un Dialog da sbattere in faccia all'utente: se un giorno uno volesse implementare delle macro (wow) utilizzando le classi esistenti dovrebbe riscrivere tutta da capo la gestione delle eccezioni. Non si può mica fare una macro che ad un certo punto ti chiede una conferma di un errore: o va a buon fine o fallisce (e in un log trovo il motivo).
In questo modo posso istanziare una Form, cambiare il modo di gestire le eccezioni (da GUI a silent) e ho la classe pronta all'uso.

2) Voglio che ogni istanza (non classe ma istanza) gestisca le eccezioni come è meglio in quel caso ed in un file indipendente da tutte le altre istanze.

Visto che comunque la gestione delle eccezioni, come dici anche tu, dovrebbe essere centralizzata, mi sono inventato la classe "toolbox" che fa l'alter-ego dell'applicazione :P

Edit:
ogni form gestisce a modo suo ma è in "toolbox" che ho messo il dump del call stack ;)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: schumi - Agosto 31, 2014, 02:36:57 pm
in FoxPro ho sempre usato librerie come base dei gestionali.
non sarebbe male aggiungere anche i bottoni (insert, delete ecc) direttamente in form o una toolbar, che dite?
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 09:23:00 am
stavo già studiando come fare :D
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: schumi - Settembre 01, 2014, 10:25:58 am
l'ideale è una toolbar che si attiva all'occorrenza con la possibilità di decidere quali funzioni sono attive.
Potrei avere solo bisogno solo di alcune funzioni, oppure bloccare l'insert agli utenti non abilitati. quindi pensavo ad una variabile Public per ogni tasto che attiva disattiva, poi non so se convenga una TToolbar o un frame o dei semplici button...

sono alle prime armi con Lazarus ma se posso dare un mano volentieri... ::) :)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 10:53:16 am
attualmente, nel progetto che sto sviluppando, quello che un utente può fare è definito dalle azioni
queste saranno abilitate/disabilitate (per utente) a seconda di un sistema di permessi che dovrà arrivare

pensavo di realizzarlo sia come toolbar che come menù
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Settembre 01, 2014, 02:01:23 pm
Per quello basta mettere un controllo basato su ACL.
Ogni utente ha la sua lista di action abilitate.
L'acl gestita a due livelli permette di fare configurazioni rapide ed al caso personalizzate ;)

Stilgar
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 03:22:25 pm
ACL (o RBAC?)
se qualcuno ha qualche idea o spunto o gli va di scrivere un pezzo di codice (best practices?) o di rifletterci sopra è il benvenuto

la gestione dei permessi va vista bene: deve essere elastica, pratica e (soprattutto) senza falle

Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: schumi - Settembre 01, 2014, 03:52:42 pm
scusate ma sto alle prime armi.... :-[
se modifico uBaseForm nel mio progetto di test...le form che derivano da questa classe si aggiornano solo ricompilando o devo fare altro?  ??? ???
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Settembre 01, 2014, 03:54:10 pm
Codice: [Seleziona]
  TUserPermissions = class
  end;

  TPermission = class
    property Action : TAction;
    procedure handle;
  end;

Così a sentimento ;)

Poi la configurazione è da db.

Stilgar
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 04:17:11 pm
scusate ma sto alle prime armi.... :-[
se modifico uBaseForm nel mio progetto di test...le form che derivano da questa classe si aggiornano solo ricompilando o devo fare altro?  ??? ???

basta ricompilare
a dire il vero a design time non devi fare neanche quello: basta che schiacci F12 e la tua form si mostrerà con tutti i controlli ereditati (in questo caso la TAciontList)

Edit:
poi devi scrivere gli eventi come trovi nel progetto di test allegato
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: schumi - Settembre 01, 2014, 05:27:28 pm
...ormai che ci siamo metti pure i messaggi in un file txt così da agevolare il cambio di lingua  8)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 05:31:20 pm
ora sto facendo proprio questo :D
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Settembre 01, 2014, 06:16:50 pm
Da file di testo :(
Nuuuuu
Stilgar
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 06:18:52 pm
i file .po sono file di testo (ok, ok non sono txt) ;)

poi c'è lazarus che con le sue procedure di sistema basate sul gettext di gnu fa la traduziona a runtime :P


Edit:
http://wiki.freepascal.org/Translations_/_i18n_/_localizations_for_programs (http://wiki.freepascal.org/Translations_/_i18n_/_localizations_for_programs)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Settembre 01, 2014, 06:48:54 pm
ok
Pensavo intendessi  flat file.

Stilgar
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 06:56:39 pm
in effetti non ho risposto chiaramente, anzi, ho risposto proprio in modo ambiguo  :)

cmq l'intenzione è di adottare lo standard di lazarus
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 01, 2014, 08:02:27 pm
articolo #3: traduzioni delle form

http://www.lazaruspascal.it/index.php?page=154 (http://www.lazaruspascal.it/index.php?page=154)

Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Settembre 03, 2014, 01:24:17 am
Attendo sempre i commit su svn.
(forse manca una unit. L'ultimo che ho scaricato non compila :p )
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 03, 2014, 09:39:27 am
Attendo sempre i commit su svn.
(forse manca una unit. L'ultimo che ho scaricato non compila :p )

pardon
controlla ora
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: schumi - Settembre 10, 2014, 11:48:14 am
non aggiorna la descrizione nei bottoni :-\
dove sbaglio?
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 10, 2014, 03:14:57 pm
Stai usando il .zip che allego al thread o usi svn?
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: schumi - Settembre 10, 2014, 03:45:27 pm
zip allegato....
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 10, 2014, 07:25:51 pm
in TBaseForm.FormCreate
c'è il seguente codice

Codice: [Seleziona]
  Translations.TranslateUnitResourceStrings(
               'uBaseForm',
               '/media/dati/dev/llab/BaseForm/po/TestBaseForm.%s.po',
               Lang,
               FallbackLang);

non l'ho parametrizzato in quanto mi serviva lasciarlo esplicito per l'articolo :P
cambia la path e mettici la tua, vedrai che dopo funziona ;)
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: Stilgar - Settembre 10, 2014, 11:56:25 pm
uff ... e usare un bel "getuserdir"? :D
Così ora sappiamo un pezzo del tuo FS ... no no no... (manca l'emoticon con il ditone che si muove) :D
E così a sentimento mi verrebbe da dire che è su un fs su usb ... chiavetta o hd esterno.
Così tanto per gradire insomma :D

A parte gli scherzi.
Mettere un path relativo e non assoluto?
Personalmente lo trovo più comodo, anche in fase di rilascio. Poi è questione di gusti ;)
Stilgar
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: schumi - Settembre 11, 2014, 09:19:14 am
no il percorso lo avevo già modificato, tant'è vero che i messaggi sulla barra sono tradotti correttamente, solo le caption dei pulsanti restano anonime acUser_Edit ecc :o
mi confermate che da voi funziona ?

nel file .po
#: tfmbaseform.acuser_edit.caption
msgid "acUser_Edit"
msgstr "Modifica"

OT: in un file .bat di configurazione di un front-end cassa ho trovato utente, password e percorsi del pc di uno dei programmatori... :o :o :o
quando gliel 'ho fatto notare ha risposto con un "roba vecchia...non serve più"
Titolo: Re:Superclasse form base per programmi gestionali (e non)
Inserito da: nomorelogic - Settembre 11, 2014, 09:50:27 am
no il percorso lo avevo già modificato, tant'è vero che i messaggi sulla barra sono tradotti correttamente, solo le caption dei pulsanti restano anonime acUser_Edit ecc :o
mi confermate che da voi funziona ?

se sono le caption dei pulsanti ti confermo che non funzionano :)
volevo segnalare la cosa per sapere se le proprietà dei controlli messi a design time erano inclusi nella traduzione ma poi ho avuto da fare
nelle modifiche che sto facendo comunque a runtime sto prevedendo una assegnazione di costanti che invece vengono tradotte correttamente
un po' di pazienza


@Stilgar
accidenti... ora il mondo sa che ho una chiavetta usb
:D