Autore Topic: gb.textpro  (Letto 3335 volte)

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
gb.textpro
« il: 18 Novembre 2010, 19:01:24 »
Questa mia è solo una bozza... nulla di particolare... però per chi vuol realizzare un gestionale ho pensato che fosse sbrigativo avere qualcosa già di pronto. E' decisissimamente migliorabile!  ;D ...però intanto è già qualcosa...  ;)
Prima di tutto, ci tengo a precisare che senza l'aiuto di nessuno di voi non sarei riuscito a fare cose del genere da solo, e se mi permettete un ringraziamento particolare va a milio (questo componente l'ho ottenuto prendendo il codice del suo fantastico searchbox ed aggiustando dove pensavo fosse utile... quindi in pratica è come se l'avesse scritto lui... ;D ).

E' nè più nè meno una textbox, che ho chiamato textpro. Cos'ha di diverso?! Ho cercato di implementare quelle poche cose che sono in grado di fare al fine di ottenere una textbox specifica per gestionali.

1) quando prende il focus il suo background diventa giallo, e quando lo rilascia torna a default.
2) si può settare il formato dei caratteri (con la proprietà integer Case: 0 --> normale; 1 --> maiuscolo; 2 --> minuscolo; 3 --> in maiuscolo le prime lettere di ogni parola separata da spazi)
3) si può scegliere quali caratteri "text" abilitare (con la proprietà ChrType integer: 0 --> tutti; 1 --> solo testo&numeri (senza le accentate, per i CodiciFiscali); 2 --> testo&numeri&qualchesimbolo; 3 --> solo numeri; 4 --> numeri + qualche simbolo (tipo .,'-+/*)...
4) ho predisposto una serie di eventi Keypress per il tasto "return", "enter", "tab", "up", "down" ed "F1". Quindi si può eseguire del codice quando viene premuto uno di questi tasti.

Per ora è solo una bozza. Spero vi piaccia e vi sia utile.

Spero d'imparare a fare di meglio... In seguito vorrei mettere una maschera per l'inserimento di testo_obligato... e poi qualcos'altro... Ma sempre con l'aiuto di milio.  :)
« Ultima modifica: 18 Novembre 2010, 19:32:04 da perseo »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: gb.textpro
« Risposta #1 il: 18 Novembre 2010, 20:05:59 »
Hoooo... finalmente qualcun'altro si e' messo a fare componenti...

Non posso che dirti  :bravo:

Vedo anche che l'hai gia' impostato correttamente come componente, pronto per essere installato, bene bene, mooolto bene...

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #2 il: 18 Novembre 2010, 20:37:20 »
milio,

ho seguito un po' il tuo, un pizzico di guida... qualche  :hatecomputer:, QB di fortuna... ed alla fine ce l'ho fatta.
Pensavo che per un gestionale di dimensioni notevoli crearsi un componente adeguato aiuti a semplificare molto codice... Ancora non lo uso, però nel frattempo lo testo e vedo se ci sono migliorie... una volta che ha preso una sua forma... allora si può pensare di usarlo.

Ho già corretto il campo Highlight... ho messo il colore di background in entrata e quello in uscita (che sono predisposti in Yellow e Default)... così se si vogliono mettendo tutte le textpro nello stesso gruppo, con gli eventi Keypress, è un gioco da ragazzi spostarsi...  ;)

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #3 il: 19 Novembre 2010, 13:33:48 »
Fermi tutti!!!  ;D

Non avevo capito una cosa fondamentale, che ho compreso quando ho tentato d'incorporare la textpro nella searchbox di milio, in sostituzione della textbox predefinita.
Ero convinto che un nuovo componente ereditasse dal suo predecessore tutte le proprietà, metodi ed eventi. Quindi credevo che la textpro aggiungesse ulteriori parametri al predecessore, mantenendo tutti i vecchi.
Invece mi pare che non sia così, anzi...

Se vado nella pagina del wiki di gb.TextBox leggo una serie di parametri: "Inherits Control" e "Creatable", a cui prima non davo molta importanza. http://gambasdoc.org/help/comp/gb.qt/textbox?show
Questa distinzione che vuol dire?! Che quelli "Inherits" sono quelli ereditati automaticamente mentre quelli "Creatable" li devo fare io?

Quindi,
- se io voglio l'evento KeyPress (che è Inherits) anche nel nuovo componente... devo dichiarare l'evento KeyPress --> nella sua Sub --> Raise KeyPress (tipo un passaggio di consegne)...
Mentre,
- se voglio che la proprietà .Pos (che è Creatable) sia utilizzabile anche nel mio componente devo creare una Property .Pos con Function e Sub in lettura e scrittura...

Comunque, da quanto mi pare di aver capito, sia Inherits che Creatable devo sempre dichiararne il comportamento. Giusto?!  :-\
Insomma... non è così semplice come pensavo io!  :rolleyes:

PS. L'ideale a questo sarebbe che la TextBox fosse scritta in gambas e che io me la personalizzassi direttamente, ma mi sa che è uno di quelli scritti in C++.  :'(

[edit]
Intanto mi sto rileggendo anche il nostro wiki su "Inherits"... http://www.gambas-it.org/wiki/index.php/INHERITS
[/edit]
« Ultima modifica: 19 Novembre 2010, 14:06:40 da perseo »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gb.textpro
« Risposta #4 il: 19 Novembre 2010, 14:07:40 »
Quando crei un componente, le proprietà di questo le definisci tu, e quindi puoi anche mascherare i comportamenti dell'eventuale oggetto padre.

Oltre a questo, l'oggetto componente potrebbe aver bisogno anche di altre classi, tue o di gambas, che possono o meno essere rese visibili all'esterno del componente.


Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #5 il: 19 Novembre 2010, 14:26:18 »
Grazie MD,

rimanendo nello specifico (riesco a capire meglio con degli esempi)... se io volessi una TextBox, con la sola differenza che quando riceve il focus ha un background e quando lo perde ne ha un altro, devo riscrivere tutto il codice, oppure devo aggiungere solo l'evento modificato GotFocus e LostFocus?

Io ho fatto così...

Codice: vb.net [Seleziona]
...
Event LostFocus
Event GotFocus
...
txt è l'istanza di una TextBox di base
...
Public Sub txt_GotFocus
  Raise LostFocus
  txt.background = Color.Yellow
End

Public Sub txt_LostFocus
  Raise LostFocus
  txt.background = Color.Default
End
...


E non mi sono preoccupato di impostare altri eventi... pensando che venissero ereditati automaticamente da quelli vecchi. Invece mi sono accorto che se non definisco tutti gli eventi, questi non vengono invocati.
Ho provato nel codice a gestire l'evento MouseDown di una textpro che stavo testando... ma non viene intercettato.
Avrei dovuto nel sorgente del componente dichiararlo così?

Codice: vb.net [Seleziona]
Event MouseOver
...
Public Sub txt_MouseOver()
  Raise MouseOver
End
« Ultima modifica: 19 Novembre 2010, 14:31:12 da perseo »

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: gb.textpro
« Risposta #6 il: 19 Novembre 2010, 15:01:57 »
Nel tuo caso, dato che utilizzi una TextBox modificata, ti suggerisco di fare in questo modo:

Usa INHERITS TextBox in modo da ereditare tutte le proprietà e metodi dell'oggetto TextBox.
A questo punto la tua Classe e' a tutti gli effetti una TextBox.

Nel metodo _New() dichiari quanto segue:

Dim Obs As Observer

  Obs = New Observer(Me) As "Evento"

L'Observer e' una Classe che osserva gli eventi dell'oggetto a lui legato. In questo caso andrebbe ad intercettare gli eventi della Classe in modo da potergli far fare, come nel tuo componente, il cambiamento del colore di fondo prima di scatenare l'evento nel form che ospiterà l'oggetto.

Per farti capire meglio, come sempre, ti allego un esempio contenente il tuo componente un po' 'alleggerito' ma funzionante come prima...

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #7 il: 19 Novembre 2010, 15:08:34 »
Avevo proprio preso quella strada, ma mi andava in errore sull'instanza txt = new textbox(me) as "txt"...
e non capivo come fare...

Come al solito, mi risolvi tutti i dubbi! Non so più come ringraziarti.  :)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gb.textpro
« Risposta #8 il: 19 Novembre 2010, 15:14:45 »
Perdona milio, ma nella costruzione dell'oggetto, mi pare sia da considerare alcune impostazioni, che determinano appunto quali proprietà debbano essere ereditate dal componente, e quali devono essere rese visibili. Se non erro, di solito basta indicarlo con un "*" nella stringa _PROPERTY (o giù di lì, al momento non ho Gambas sottomano, nè la documentazione, comunque è per rendere il concetto).


Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: gb.textpro
« Risposta #9 il: 19 Novembre 2010, 15:28:18 »
se ti riferisci a questo:

Public Const _Properties As String = "*"

Serve solamente a indicare quali proprietà si visualizzeranno nella griglia delle proprietà in fase di costruzione grafica del form (insomma la griglia a destra nell'ide di gambas :) ).
Da codice sono comunque disponibili tutti i simboli nuovi ed ereditati dalla classe genitore.

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #10 il: 19 Novembre 2010, 17:25:39 »
Ora sicuramente ne so più di prima...  ;)

Allora,

ho ereditato direttamente da TextBox... con l'Observer per gestire gli eventi. Tutt'ok... Ora il TextPro è perfettamente funzionante! :ok:

Poi ho preso la searchbox e nel codice ho sostituito la box con la pro... e gli ho settato quali proprietà della pro deve visualizzare (in più di quelli che già c'erano per la box). Ora la searchbox gestisce anche l'highlight!  :2birre:
In pratica cosa cambia...

Semplice... che si possono ad esempio colorare di default i campi delle text... e quindi ad esempio evidenziare quelli che sono obbligatori, importanti, ecc... quando prende il controllo prende focus, viene evidenziato da un altro colore.
Ad esempio, io ho usato come background: il bianco per i campi facoltativo ed il grigio_leggerissimo per quelli obbligatori --> quando prendono il focus sono tutti gialli! Stessa cosa si può fare sulle searchbox... Inoltre si possono gestire i caratteri dei campi (solo numeri, solo testo, alfanumerici senza simboli, ecc.).
Infine si può abilitare il carattere solo maiuscolo, solo minuscolo, prima_lett_maiuscola, ecc.

Spero vi possa essere utile! E grazie ancora a Milio, senza il quale sarei ancora a ...caro amico.  :2birre:
« Ultima modifica: 19 Novembre 2010, 17:39:21 da perseo »

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #11 il: 20 Novembre 2010, 00:04:37 »
Milio,

le proprietà della textbox le ho catalogate come integer... Se invece volessi usare delle parole?
Cioè nella proprietà Case ho scelto: 0 --> None; 1 --> Maiuscolo; 2 --> Minuscolo; 3 --> SoloPrimaLetteraMaiuscola; ecc.

Se volessi mettere i nomi anziché i numeri, affinché usando il componente mi dia queste costanti (?) tra le scelte possibili, come vanno impostate?

Nella pratica io vorrei che da codice si possa scrivere anziché --> Me.TextPro01.Case = 1
...direttamente --> Me.TextPro01.Case.Maiuscolo

...e che questa lista sia presente tipo combobox anche nella griglia delle proprietà, nell'Ide di Gambas.


PS. Ho provato a trovare risposte in GridBox... ma mi ci sono perso! Troppo difficilissimissimo per me...  :)

PPS. Se creo un'applicazione gambas con i tuoi componenti poi per farlo girare in un altro PC devo installare anche quelli? (scusa la domanda sciocca, credo che la risposta sia "sì", però meglio chiedere onde evitare sorprese)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: gb.textpro
« Risposta #12 il: 20 Novembre 2010, 04:06:27 »
Penso che tu ti riferisca alle Costanti :)

In GridBox tutte le Costanti risiedono nella Classe statica Grid, per quello non hai trovato nulla in GridBox.

In pratica nella parte di codice dove dichiari le Property inserisci una riga di codice per ogni Costante che vuoi utilizzare:

Codice: vb [Seleziona]
Public Const Nome As Integer = 0
Public Const Maiuscolo As Integer = 1
Public Const Minuscolo As Integer = 2
Public Const SoloPrimaLetteraMaiuscolo = 3

E voila', nella finestrella di aiuto dei simboli ti appariranno le varie Costanti. Dopodiche' nel codice farai in questo modo:

Codice: vb [Seleziona]
Me.TextPro01.Case = Me.TextPro01.Maiuscolo


Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #13 il: 20 Novembre 2010, 14:20:12 »
Ora ho capito...

In GridBox mi ero impallato nella sottocartella VirtualClass (perché lì avevo letto i nomi delle costanti...) però non riuscivo a capire come si ricollegavano alla GridBox... In pratica Grid richiama quelle che sono specificate in VirtualClass, ecc. Comunque per me rimane troppo complicato. :hard: Appena ho un po' di tempo dovrò studiarlo per bene...

Tornando alla TextPro, io volevo fare una cosa di questo tipo: anziché delle variabili, volevo usare delle proprietà in sola lettura...

Cioè: anziché scrivere...
Me.TextPro01.Case = Me.TextPro01.Maiuscolo

poter scrivere direttamente...
Me.TextPro01.Case.Maiuscolo

PS. intanto ho aggiunto le costanti pubbliche come mi hai consigliato! Ho usato lo stesso approccio che hai usato tu per la GridBox, ...ho dichiarato una proprietà di sola lettura, che si rifà alle costanti pubbliche scritte in un'apposita classe (mi sembrava più idoneo, per dare un ordine migliore).

PPS. visto che a volte alcune proprietà hanno degli interi tremendi da ricordare (ad esempio: solo_numeri = 15)... volevo trasformare il valore della proprietà da Integer a String... e far comparire tali proprietà, nella griglia delle proprietà dell'Ide di Gambas, a mò di combobox... Ho visto sulla guida che dovrei usare una {Lista[]}... ho provato crearla, ma il risultato che ho ottenuto è stato: "Nessuno" (tra le opzioni della combobox).

PPPS. Ho modificato la searchbox --> come searchpro, perché ho aggiunto i settaggi della textpro. Chiaramente ogni volta che Milio aggiornerà l'originale searchbox io dovrei aggiornare anche la searchpro (cosa che non penso avrò tempo di fare, di volta in volta)... Quindi consiglio tutti di NON usare la searchpro nei propri progetti (ma la searchbox!). Io l'ho messa solo a scopo informativo/didattico.  :)
« Ultima modifica: 20 Novembre 2010, 16:24:21 da perseo »

Offline perseo

  • Maestro Gambero
  • ****
  • Post: 264
    • Mostra profilo
Re: gb.textpro
« Risposta #14 il: 20 Novembre 2010, 21:14:10 »
Stavo pensando che potrebbe essere utile munire la textpro di una form volante per la scelta di simboli particolari, ad esempio consultabile con la pressione del tasto F1... Magari potrebbe essere utile inserire caratteri tipo: È, À, Ò, Ù, Ì (e magari non tutti sanno che si possono inserire attivando il "Caps Lock" e premendo le accentate minuscole...), oppure altri caratteri particolari tipo: ñ, α, β, γ, δ...