Capitolo 50. MioGrid Rich Text                                                                                                                                                                                               

 50.1 Costruzione 

Il MioGrid puo' ospitare anche altri comandi, come per esempio Rich Text Boxes e Check Boxes. Ecco un esempio di quello che si puo' ottenere:

                                                                                                                                                                                                                  

Per realizzare questo obiettivo cominciamo dal database. Qui dovremo inserire due nuovi campi, uno per tener conto della Check Box  e l'altro per il path del File RTF da caricare nella apposita casella del MioGrid. Ecco la nuova struttura della Tabella "IMMAGINI" di "PICFILE.MDB"

 

A questo punto possiamo iniziare l'Eesercizio creando una  nuova Cartella "ESERCIZIO_47_ADO_MioGrid_Rich_Text".

Copiamo in questa cartella integralmente il contenuto della Cartella "SOLUZIONE_46_ADO" che utilizzeremo come grezzo per il nostro Project1.

 50.2 Il Form IMASK1

Modifichiamo ora il grezzo "IMASK1" (figlio dell'"IMASK1" del Capitolo precedente) in modo che prenda quest'aspetto:

 

Vediamo l'impianto:

- le prime cinque colonne dovranno ospitare i seguenti campi di "IMAFILE": "IMACODI", "IMANOME", "IMATIPO", "DATAGG", "IMANETTO".

- le due successive Colonne, a nome "CELL6" e "CEK6" serviranno a mostrare il Check Box, la "Cell6" operante solo da contenitore.

- le due successive Colonne, a nome "CELL7" e "PIC7" contenente "IMA7" serviranno a mostrare le immagini, come spiegato nel Capitolo precedente.

- la colonna successiva, a nome "RICH8" servira' a mostrare il Rich Text Box. E' una Text Box, quindi non ha quindi bisogno di Colonna contenitore.

- le due successive Colonne, a nome "CELL9" e "TXT9" serviranno a mostrare una casella di testo per un metodo alternativo alla Check Box. La "Cell9" opera solo da contenitore. Questo modo permette di avere un buon comando sul posizionamento della Casella "TXT9"

Il Form Load va adattato solo per  tener conto delle nove colonne. Ecco il relativo frammento:

'posizione
'--------------------
MioTop = 700
Mioleft = 700
MioHeight = 600

MioCol = 9
MioRow = 6

colw1 = 800
colw2 = 2000
colw3 = 900
colw4 = 900
colw5 = 1000
colw6 = 600
colw7 = 1500
colw8 = 3000
colw9 = 600

La Sub "PREPARAGRID" va modificata per la nuova situazione. Eccola:

Sub preparaGrid()

'top MioGrid
'--------------
bSelet(0).Top = MioTop

'bSelettori
'-----------------
For i = 1 To MioRow
bSelet(i).Top = bSelet(0).Top + i * MioHeight
Next

For i = 0 To MioRow
bSelet(i).Height = MioHeight
Next

For i = 0 To MioRow
bSelet(i).Left = Mioleft
Next

'headers
'------------------
For i = 1 To MioCol
Header(i).Top = MioTop
Next
Header(8).Top = MioTop

For i = 1 To MioCol
Header(i).Height = MioHeight
Next
Header(8).Height = MioHeight

Header(1).Width = colw1
Header(1).Left = bSelet(0).Left + bSelet(0).Width
Header(1).Caption = "Code"

Header(2).Width = colw2
Header(2).Left = Header(1).Left + colw1
Header(2).Caption = "Descrizione"

Header(3).Width = colw3
Header(3).Left = Header(2).Left + colw2
Header(3).Caption = "Tipo"

Header(4).Width = colw4
Header(4).Left = Header(3).Left + colw3
Header(4).Caption = "Data"

Header(5).Width = colw5
Header(5).Left = Header(4).Left + colw4
Header(5).Caption = "Netto/Kg"

Header(6).Width = colw6
Header(6).Left = Header(5).Left + colw5
Header(6).Caption = "Top"

Header(7).Width = colw7
Header(7).Left = Header(6).Left + colw6
Header(7).Caption = "Immagine"

Header(8).Width = colw8
Header(8).Left = Header(7).Left + colw7
Header(8).Caption = "Descrizione"

Header(9).Width = colw9
Header(9).Left = Header(8).Left + colw8
Header(9).Caption = "Top"

'celle
'------------------
For i = 1 To MioRow
Cell1(i).Top = bSelet(i).Top
Cell1(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Cell2(i).Top = bSelet(i).Top
Cell2(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Cell3(i).Top = bSelet(i).Top
Cell3(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Cell4(i).Top = bSelet(i).Top
Cell4(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Cell5(i).Top = bSelet(i).Top
Cell5(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Cell6(i).Top = bSelet(i).Top
Cell6(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Cek6(i).Top = bSelet(i).Top + 200
Next

For i = 1 To MioRow
Cell7(i).Top = bSelet(i).Top
Cell7(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Pic7(i).Top = bSelet(i).Top
Pic7(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Rich8(i).Top = bSelet(i).Top
Rich8(i).Height = MioHeight + 3
Next

For i = 1 To MioRow
Cell9(i).Top = bSelet(i).Top
Cell9(i).Height = MioHeight + 3
Next

'incrementi
'------------------
bCol(1).Top = Cell1(6).Top + Cell1(6).Height + 100
For i = 2 To MioCol * 2
bCol(i).Top = bCol(1).Top
Next

bCol(1).Left = Mioleft + colw1 / 2 - 150
bCol(2).Left = bCol(1).Left + bCol(1).Width + 5

bCol(3).Left = Mioleft + colw1 + colw2 / 2 - 150
bCol(4).Left = bCol(3).Left + bCol(4).Width + 5

bCol(5).Left = Mioleft + colw1 + colw2 + colw3 / 2 - 150
bCol(6).Left = bCol(5).Left + bCol(5).Width + 5

bCol(7).Left = Mioleft + colw1 + colw2 + colw3 + colw4 / 2 - 150
bCol(8).Left = bCol(7).Left + bCol(7).Width + 5

bCol(9).Left = Mioleft + colw1 + colw2 + colw3 + colw4 + colw5 / 2 - 150
bCol(10).Left = bCol(9).Left + bCol(9).Width + 5

bCol(11).Left = Mioleft + colw1 + colw2 + colw3 + colw4 + colw5 + colw6 / 2 - 150
bCol(12).Left = bCol(11).Left + bCol(11).Width + 5

bCol(13).Left = Mioleft + colw1 + colw2 + colw3 + colw4 + colw5 + colw6 + colw7 / 2 - 150
bCol(14).Left = bCol(13).Left + bCol(11).Width + 5

bCol(15).Left = Mioleft + colw1 + colw2 + colw3 + colw4 + colw5 + colw6 + colw7 + colw8 / 2 - 150
bCol(16).Left = bCol(15).Left + bCol(15).Width + 5
bCol(15).Top = bCol(1).Top
bCol(16).Top = bCol(1).Top

bCol(17).Left = Mioleft + colw1 + colw2 + colw3 + colw4 + colw5 + colw6 + colw7 + colw8 + col9 / 2 + 300
bCol(18).Left = bCol(17).Left + bCol(17).Width + 5
bCol(17).Top = bCol(1).Top
bCol(18).Top = bCol(1).Top

'VScroll1
'-----------------
VScroll1.Top = MioTop
VScroll1.Height = MioRow * MioHeight + MioHeight
VScroll1.Left = Mioleft + bSelet(1).Width + colw1 + colw2 + colw3 + colw4 + colw5 + colw6 + colw7 + colw8 + colw9 + 10

'shape1
'---------------
Shape1.Top = MioTop - 20
Shape1.Left = Mioleft - 20
Shape1.Height = MioHeight * (MioRow + 2) + 120
Shape1.Width = bSelet(0).Width + colw1 + colw2 + colw3 + colw4 + colw5 + colw6 + colw7 + colw8 + colw9 + VScroll1.Width + 30

End Sub

Come si vede si e' prevista anche l'inizializzazione dei nuovi Headers e dei nuovi Bottini di Incremento.

Vediamo ora la funzione ausiliaria del "CARICAGRID" :

Function funGrid(Par)

'Formatta Celle
'---------------------------------
Cell1(Par).Left = bSelet(Par).Left + bSelet(Par).Width
Cell1(Par).Width = colw1
Cell1(Par).Alignment = 1

Cell2(Par).Left = Cell1(Par).Left + colw1
Cell2(Par).Width = colw2
Cell2(Par).Alignment = 0

Cell3(Par).Left = Cell2(Par).Left + colw2
Cell3(Par).Width = colw3
Cell3(Par).Alignment = 0

Cell4(Par).Left = Cell3(Par).Left + colw3
Cell4(Par).Width = colw4
Cell4(Par).Alignment = 0

Cell5(Par) = Format(Cell5(Par), "# ###.00")
Cell5(Par).Left = Cell4(Par).Left + colw4
Cell5(Par).Width = colw5
Cell5(Par).Alignment = 1

Cell6(Par).Left = Cell5(Par).Left + colw5
Cell6(Par).Width = colw6
Cek6(Par).Left = Cell6(Par).Left + 150
Cek6(Par).Value = 0

Cell7(Par).Left = Cell6(Par).Left + colw6
Cell7(Par).Width = colw7
Pic7(Par).Left = Cell7(Par).Left
Pic7(Par).Width = colw7
Ima7(Par).Width = colw7
Ima7(Par).Height = MioHeight
Ima7(Par).Picture = LoadPicture("")

Rich8(Par).Left = Cell7(Par).Left + colw7
Rich8(Par).Width = colw8
Rich8(Par).Height = MioHeight
Rich8(Par).Top = Cell7(Par).Top
Rich8(Par).FileName = ""

Cell9(Par).Left = Rich8(Par).Left + colw8
Cell9(Par).Width = colw9
Txt9(Par).Left = Cell9(Par).Left + Cell9(Par).Width / 4
Txt9(Par).Width = 300
Txt9(Par).Height = 300
Txt9(Par).Top = Cell9(Par).Top + Cell9(Par).Height / 4
Txt9(Par).Text = ""

'colore
'----------------------
'funColor (Par)

'GoSub campi
'-----------------------
If Par = 1 Then
If Not ima11.EOF Then
GoSub campi
End If
'---
Else 'Par
'---
ima11.MoveNext
If Not ima11.EOF Then
GoSub campi
Else
ima11.MoveLast
End If
'---
End If 'Par

Exit Function

'campi
'======================================
campi:
Cell1(Par) = CStr(ima11("IMACODI") & "")
Cell2(Par) = CStr(ima11("IMANOME") & "")
Cell3(Par) = CStr(ima11("IMATIPO") & "")
Cell4(Par) = CStr(ima11("DATAGG") & "")
Cell5(Par) = CStr(ima11("IMANETTO") & "")
If CStr(ima11("TOPQUAL") & "") = True Then
Cek6(Par).Value = 1
Else
Cek6(Par).Value = False
End If
Ima7(Par).Picture = LoadPicture(ima11!imapath)
If Len(CStr(ima11("RTFPATH") & "")) > 0 Then
Rich8(Par).LoadFile CStr(ima11("RTFPATH") & ""), rtfRTF
Else
Rich8(Par).FileName = ""
End If
If CStr(ima11("TOPQUAL") & "") = True Then
Txt9(Par).Text = "X"
Else
Txt9(Par).Text = ""
End If

End Function

Per "CELL1" fino a "CELL5" non ci sono commenti. Per la "CELL6" si e' prevista anche la sovrapposizione della "CEK6", cioe' della Check Box che viene spuntata o meno a seconda del valore di "IMA11!TOPQUAL" del record in esame (prima di ogni Row c'e' un "IMA11!MOVENEXT").

La "CELL7" carica normalmente l'Immagine.

La "CELL8" carica un File di tipo ".RTF" che sara' stato preparato a parte con Microsoft Word. E' prevista la possibilita' di un file per ciascun Record di "IMAFILE". Tutti questi ".RTF" andranno collocati, per sempio, nella SottoCartella "IMMAGINI" della Cartella "PICTURES", descitte nel Capitolo precedente. Per questi Files si possono usare i colori ed i caratteri che si vogliono. Io consiglio "CALIBRI" 10 Punti No Spacing, ma si puo' fare come si vuole. Ogni ".RTF" va salvato con un nome che abbia una qualche attinenza con il Record a cui dovra' essere associato: per esempio: "BANANA.RTF" etc. Come per il caso delle Immagini anche qui il campo "RTFPATH" della Tabella memorizza soltanto il "PATH" del File, il File stesso essendo separato dal Database.

 Per la "CELL9" si e' prevista anche la sovrapposizione della "TXT9", cioe' di un'altra TextBox  che viene spuntata con una "X" o meno a seconda del valore di "IMA11!TOPQUAL" del record in esame.

 50.3 Il Form IMASK2

Qui bisogna aggiungere i nuovi campi, la Check Box ed il Rich Text. Ecco il nuovo Form:

L'evento Click del nuovo Bottone Bottone "CMDPATH2" apre il "Common Dialog" che permette di vedere solo i Files .RTF inentificati dal filtro . Il file .RTF scelto viene mostrato nel riquadro Rich Text  "RICHTEXTBOX1" ed il suo percorso viene annotato nellla TextBox "TXTRTFPATH":

In caso che il file non sia compatibile con il comando "RICHTEXTBOX1" si lancia un messaggio e si sbianca la TextBox.

Private Sub cmdPATH2_Click()

Dialog2.Filter = "File RTF (*.rtf)|*.rtf|" & _
"Tutti i Files (*.*)|*.*"
Dialog2.ShowOpen
txtRTFPATH = Dialog2.FileName
On Error GoTo mancartf
RichTextBox1.LoadFile (Dialog2.FileName), rtfRTF
Exit Sub

'mancaimmagine
'----------------------------
mancartf:
titolo = "Attenzione !"
Messaggio = Dialog1.FileName & acapo & "Non e' un File RTF valido !"
Stile = vbOKOnly + vbExclamation ' Definisce pulsanti.
Risposta = MsgBox(Messaggio, Stile, titolo)
txtRTFPATH = ""

End Sub

 50.4 Aggiunta/Modifica/Cancellazione di un Nuovo Record

Per aggiungere, modificare e cancellare records alla Tabella "IMAFILE" le Routines sono le stesse che abbiamo studiato nel Capitolo precedente. Naturalmente bisogna aggiungere i nuovi campi:

Sub IMAtext()

Imask2.txtIMACODI.Text = Format(CStr(ima11("IMACODI") & ""), "### ###.00;;#")
Imask2.txtIMANOME.Text = CStr(ima11("IMANOME") & "")
Imask2.txtDATAGG.Text = CStr(ima11("DATAGG") & "")
Imask2.txtIMATIPO.Text = CStr(ima11("IMATIPO") & "")

Imask2.txtIMAPATH.Text = CStr(ima11("IMAPATH") & "")
Imask2.txtRTFPATH.Text = CStr(ima11("RTFPATH") & "")

Imask2.txtIMANETTO.Text = Format(CStr(ima11("IMANETTO") & ""), "### ###.00;;#")

Imask2.Image1.Picture = LoadPicture(Imask2.txtIMAPATH.Text)

Imask2.RichTextBox1.LoadFile (Imask2.txtRTFPATH.Text), rtfRTF

If ima11!Topqual = True Then
Imask2.Topqual.Value = 1
Else
Imask2.Topqual.Value = 0
End If

'formattazioni euro
'-------------------
Imask2.txtIMANETTO = virformat(Imask2.txtIMANETTO)

End Sub

In "IMAREPLA" occorre prevedere il salvataggio del file "RTF" nel caso lo si sia modificato:

Sub IMArepla()

ima11!imacodi = virvalore(Imask2.txtIMACODI.Text)
ima11!imanome = Left(Imask2.txtIMANOME.Text, 50)
If Len(Trim(Imask2.txtDATAGG.Text)) = 0 Then
ima11!DATAGG = Null
ElseIf IsDate(Imask2.txtDATAGG.Text) Then
ima11!DATAGG = Imask2.txtDATAGG.Text
Else
MsgBox ("Controllare data scheda....")
End If
ima11!IMATIPO = Left(Imask2.txtIMATIPO.Text, 20)
ima11!IMANETTO = virvalore(Imask2.txtIMANETTO.Text)

ima11!imapath = Left(Imask2.txtIMAPATH.Text, 100)
ima11!rtfpath = Left(Imask2.txtRTFPATH.Text, 100)

If Imask2.Topqual.Value = 1 Then
ima11!Topqual = True
Else
ima11!Topqual = False
End If

Imask2.RichTextBox1.SaveFile CStr(ima11("RTFPATH") & ""), rtfRTF

End Sub

 

Sub IMAblank()

Imask2.txtIMACODI = Space(0)
Imask2.txtIMANOME = Space(0)
Imask2.txtDATAGG = Space(0)
Imask2.txtIMATIPO = Space(0)
Imask2.txtIMANETTO = Space(0)

Imask2.txtIMAPATH = Space(0)
Imask2.txtRTFAPATH = Space(0)
Imask2.Topqual.Value = 0

End Sub

50.5 Lettura di un Record

Ecco un esempio di scheda Ortofrutta:

 

 

Fine del Capitolo 50. MioGrid Rich Text