Attribute VB_Name = "ModuloGestReportControl"
Option Explicit


'QUESTO MI SERVER QUANDO PERSONALIZZO I PARAMETRI DEI REPORTCONTROL _
 HO FATTO QUESTO IN MODO DA POTER AGGIUNGERE I PARAMETRI SENZA DOVER _
 MODIFICARE OGNI VOLTA LA FUNZIONE "SetReportControl"
Public Type PropertyReportControl
   NumColumns As Byte
   RowsHeight As Byte
End Type
Public gtPropertyReportControl As PropertyReportControl


Public mArrayReportAppoggio() As String


Public Sub ReportInsCol(pCtrlRpt As ReportControl, pColName As String, pParameter As String, _
                        Optional pCheckCol As Boolean, Optional pChecked As Byte, Optional pEditabile As Boolean, _
                        Optional pSoloRinomina As Boolean, Optional pColonna As Integer, Optional pAllineamento As Long, _
                        Optional pMaxLenTesto As Integer, Optional pSelTestoOnEdit As Boolean)
   'I valori del parametro pChecked sono: 0 = Non Checcato; 1 = Checcato; 2 = Libero, dipende dal valore passato in fase di caricamento del ReportControl
   
   Dim Column As ReportColumn
   Dim vTypeCol As String
   Dim vWidthCol As Long
   Dim vResizable As Boolean
   Dim vIndexCol As Byte
   
   'La struttura del TAG è la seguente: _
      Tipo campo (1,1) = S=Stringa; N=Numerico _
      Decimali   (2,1) = Numero dei decimali da impostare (0 (zero) se il campo è stringa) _
      Check      (3,1) = T = True; F = False (colonna di tipo Check) _
      Checked    (4,1) = T = True; F = False (indica se le righe devo essere spuntate o meno ("T" or "F")

   vTypeCol = Mid(pParameter, 1, 1)
   vWidthCol = CLng(Mid(pParameter, 2, 3))
   vResizable = IIf(Mid(pParameter, 5, 1) = "T", True, False)
   
   With pCtrlRpt
   
      If pSoloRinomina = False Then
         vIndexCol = .Columns.Count

         'Adds a new ReportColumn to the ReportControl's collection of columns, growing the collection by 1.
         Set Column = .Columns.Add(vIndexCol, pColName, vWidthCol, vResizable)
      Else
         vIndexCol = pColonna
         
         Set Column = .Columns(vIndexCol)
         Column.Caption = pColName
         Column.Resizable = vResizable
      End If
      
      
      'Questi DEVONO stare qui e in questa sequenza altrimenti le colonne nascoste NON saranno visibili!!!
         Column.AutoSize = vResizable
         Column.Width = vWidthCol
      '//////////////////////////////////////
      
      Select Case vTypeCol
         Case "S":   Column.Alignment = xtpAlignmentVCenter + pAllineamento: Column.Tag = "S0"       'Stringa
         Case "N":   Column.Alignment = xtpAlignmentVCenter + xtpAlignmentRight + pAllineamento: Column.Tag = "N0"   'Numerico Generico (intero)
         Case "€":   Column.Alignment = xtpAlignmentVCenter + xtpAlignmentRight + pAllineamento: Column.Tag = "N" & Trim(Str(pred_DecimaliImp)) 'Importi
         Case "Q":   Column.Alignment = xtpAlignmentVCenter + xtpAlignmentRight + pAllineamento: Column.Tag = "N" & Trim(Str(pred_DecimaliQta)) 'Quantità
         Case "P":   Column.Alignment = xtpAlignmentVCenter + xtpAlignmentRight + pAllineamento: Column.Tag = "N2"   'Percentuali (2 decimali fissi)
         Case "D":   Column.Alignment = xtpAlignmentVCenter + xtpAlignmentCenter + pAllineamento: Column.Tag = "D0" 'Campo Data
      End Select
      ''Per i Campi NON Stringa imposto il minimo di larghezza consentito che è il Width passato alla funzione
      'If vTypeCol <> "S" Then
      '   Column.MinimumWidth = vWidthCol
      'End If
      
      'Controllo se è una colonna CHECK
      If pCheckCol = True Then
         'Column.Tag = Column.Tag & "T" & IIf(pChecked = True, "T", "F")
         Column.Tag = Column.Tag & "T" & Trim(Str(pChecked))
         Column.Icon = 5032
         'COLUMN_CHECK = Column.Index
      Else
         Column.Tag = Column.Tag & "FF"
      End If
      
      Column.Editable = pEditabile
      
      
      If pMaxLenTesto > 0 Then Column.EditOptions.MaxLength = pMaxLenTesto 'Blocca la digitazione al numero massimo dei Caratteri impostato
      Column.EditOptions.SelectTextOnEdit = pSelTestoOnEdit 'Se TRUE seleziona il testo della cella quando ci si entre in editazione (tipo un TextBox)
      
      
      'Qui controllo che se la colonna è nascosta allora elimino la possibilita di filtrare per questa colonna
      'If vWidthCol = 0 Then Column.Filtrable = False
      If vWidthCol = 0 Then Column.Filterable = False
   End With
   
End Sub

Public Function ReportInsRow(pCtrlRpt As ReportControl, pRecord As String, _
                             Optional pUpdateRow As Boolean, Optional pRow As Integer, _
                             Optional pHeaderFooter As Byte, Optional pParent As ReportRecord) As ReportRecord
   Dim Record As ReportRecord
   Dim i As Byte
   Dim pNumCampi As Byte
   Dim vApp As String
   Dim ValoriCampi() As String
   'Dim vVal As String
   Dim vChecked As Boolean
   
   Dim Item As ReportRecordItem
   'Dim vColCheck As Byte
   
   On Error GoTo GestErr
   
   With pCtrlRpt
      
      'Adds a new Record to the ReportControl's collection of records, this record will
      'automatically be attached to a row and displayed with the Populate method
      If pUpdateRow = False Then
         If pHeaderFooter = 1 Then
            Set Record = .HeaderRecords.Add()
         ElseIf pHeaderFooter = 2 Then
            Set Record = .FooterRecords.Add()
         Else
            If pParent Is Nothing Then
                'Set Record = wndReportControl.Records.Add()
                Set Record = .Records.Add()
            Else
                Set Record = pParent.Childs.Add()
            End If
            
         End If
         'Set Record = .FooterRecords.Add() 'Qui per aggiungere una riga nel Footer
      Else
         'In caso di modifica di un record lo rimuovo e lo ricreo nella stessa posizione
         If pHeaderFooter = 1 Then
            .HeaderRecords.RemoveAt (pRow)
            Set Record = .HeaderRecords.Insert(pRow)
         ElseIf pHeaderFooter = 2 Then
            .FooterRecords.RemoveAt (pRow)
            Set Record = .FooterRecords.Insert(pRow)
         Else
            .Records.RemoveAt (pRow)
            Set Record = .Records.Insert(pRow)
         End If
      End If
      
      
      vApp = Replace(Trim(pRecord), "¦", "")
      pNumCampi = Len(Trim(pRecord)) - Len(vApp)
      
      ReDim ValoriCampi(pNumCampi) 'Dimensiono la matrice
      ValoriCampi = Split(pRecord, "¦")
      For i = 0 To UBound(ValoriCampi) - 1
         
         'If InStr(1, .Columns(i).Tag, "#PREZZO#") > 0 Then
         If Mid(.Columns(i).Tag, 1, 1) = "N" Then
            
            'vVal = FormattaNumero(CDbl(ValoriCampi(i)), pred_DecimaliImp, 1)
            'Record.AddItem CDbl(FormattaNumero(CDbl(ValoriCampi(i)), CByte(Mid(.Columns(i).Tag, 2, 1)), 1))
            Record.AddItem CDbl(NonNullo(ValoriCampi(i), True))
         
         Else
            
            'Controllo se è una Colonna CHECK
            If Mid(.Columns(i).Tag, 3, 1) = "T" Then
            
               Set Item = Record.AddItem("")
               'Adds a checkbox to the item
               Item.HasCheckbox = True
               'Item.TristateCheckbox = True
               'Determine if the chekbox will have a checkmark based on the value of Checked
               If Mid(.Columns(i).Tag, 4, 1) = "0" Then
                  vChecked = False  'significa che nella colonna è stato previsto che tutti record NON siano spuntati
               ElseIf Mid(.Columns(i).Tag, 4, 1) = "1" Then
                  vChecked = True   'significa che nella colonna è stato previsto che tutti record SIANO spuntati
               ElseIf Mid(.Columns(i).Tag, 4, 1) = "2" Then
                  vChecked = IIf(ValoriCampi(i) = "T", True, False) 'Qui passo il valore presente nel campo
               End If
               Item.Checked = vChecked
               'Sets the group caption
               'Item.GroupCaption = "Check State: Checked"
               Item.GroupCaption = IIf(Item.Checked = True, "Selezionati: SI", "Selezionati: NO")
               Item.GroupPriority = IIf(Item.Checked, 0, 1)
               Item.SortPriority = IIf(Item.Checked, 0, 1)
'               LblNumSelez.Caption = LblNumSelez.Tag & vbNewLine & CLng(Trim(Replace(LblNumSelez.Caption, LblNumSelez.Tag, ""))) + 1
               
            Else
               
               'vVal = ValoriCampi(i)
               Record.AddItem ValoriCampi(i)
               
            End If

         End If
         
         'Record.AddItem vVal
      
      Next i
      Erase ValoriCampi
      
      
      Set ReportInsRow = Record
      
   End With
   
   
GestErr:
   If Err.Number <> 0 Then
      'Debug.Print ""
      If pCtrlRpt.Columns.Count <> UBound(ValoriCampi) Then
         MsgBox "ATTENZIONE!" & vbNewLine & _
                "Riscontrata anomalia nella stringa [" & pRecord & "]." & vbNewLine & _
                "Accertarsi che nessun campo contenga il seguente carattere: '¦'", vbCritical
      Else
         MsgBox "ATTENZIONE!" & vbNewLine & _
                "Riscontrata anomalia nella stringa [" & pRecord & "].", vbCritical
      End If
   End If
   On Error GoTo 0
   
End Function

'Public Sub ReportInsFixedRow(pCtrlRpt As ReportControl, pRecord As String, _
'                             Optional pUpdateRow As Boolean, Optional pRow As Integer)
'   Dim Record As ReportRecord
'   Dim i As Byte
'   Dim pNumCampi As Byte
'   Dim vApp As String
'   Dim ValoriCampi() As String
'   'Dim vVal As String
'   Dim vChecked As Boolean
'
'   Dim Item As ReportRecordItem
'   'Dim vColCheck As Byte
'
'   On Error GoTo GestErr
'
'   With pCtrlRpt
'
'      'Adds a new Record to the ReportControl's collection of records, this record will
'      'automatically be attached to a row and displayed with the Populate method
'      If pUpdateRow = False Then
'         Set Record = .HeaderRecords.Add()
'         'Set Record = .FooterRecords.Add() 'Qui per aggiungere una riga nel Footer
'      Else
'         'In caso di modifica di un record lo rimuovo e lo ricreo nella stessa posizione
'         .Records.RemoveAt (pRow)
'         Set Record = .HeaderRecords.Insert(pRow)
'      End If
'
'
'      vApp = Replace(Trim(pRecord), "¦", "")
'      pNumCampi = Len(Trim(pRecord)) - Len(vApp)
'
'      ReDim ValoriCampi(pNumCampi) 'Dimensiono la matrice
'      ValoriCampi = Split(pRecord, "¦")
'      For i = 0 To UBound(ValoriCampi) - 1
'
'         'If InStr(1, .Columns(i).Tag, "#PREZZO#") > 0 Then
'         If Mid(.Columns(i).Tag, 1, 1) = "N" Then
'
'            'vVal = FormattaNumero(CDbl(ValoriCampi(i)), pred_DecimaliImp, 1)
'            'Record.AddItem CDbl(FormattaNumero(CDbl(ValoriCampi(i)), CByte(Mid(.Columns(i).Tag, 2, 1)), 1))
'            Record.AddItem CDbl(NonNullo(ValoriCampi(i), True))
'
'         Else
'
'            'Controllo se è una Colonna CHECK
'            If Mid(.Columns(i).Tag, 3, 1) = "T" Then
'
'               Set Item = Record.AddItem("")
'               'Adds a checkbox to the item
'               Item.HasCheckbox = True
'               'Item.TristateCheckbox = True
'               'Determine if the chekbox will have a checkmark based on the value of Checked
'               If Mid(.Columns(i).Tag, 4, 1) = "0" Then
'                  vChecked = False  'significa che nella colonna è stato previsto che tutti record NON siano spuntati
'               ElseIf Mid(.Columns(i).Tag, 4, 1) = "1" Then
'                  vChecked = True   'significa che nella colonna è stato previsto che tutti record SIANO spuntati
'               ElseIf Mid(.Columns(i).Tag, 4, 1) = "2" Then
'                  vChecked = IIf(ValoriCampi(i) = "T", True, False) 'Qui passo il valore presente nel campo
'               End If
'               Item.Checked = vChecked
'               'Sets the group caption
'               'Item.GroupCaption = "Check State: Checked"
'               Item.GroupCaption = IIf(Item.Checked = True, "Selezionati: SI", "Selezionati: NO")
'               Item.GroupPriority = IIf(Item.Checked, 0, 1)
'               Item.SortPriority = IIf(Item.Checked, 0, 1)
''               LblNumSelez.Caption = LblNumSelez.Tag & vbNewLine & CLng(Trim(Replace(LblNumSelez.Caption, LblNumSelez.Tag, ""))) + 1
'
'            Else
'
'               'vVal = ValoriCampi(i)
'               Record.AddItem ValoriCampi(i)
'
'            End If
'
'         End If
'
'         'Record.AddItem vVal
'
'      Next i
'      Erase ValoriCampi
'
'   End With
'
'
'GestErr:
'   If err.Number <> 0 Then
'      'Debug.Print ""
'      If pCtrlRpt.Columns.Count <> UBound(ValoriCampi) Then
'         MsgBox "ATTENZIONE!" & vbNewLine & _
'                "Riscontrata anomalia nella stringa [" & pRecord & "]." & vbNewLine & _
'                "Accertarsi che nessun campo contenga il seguente carattere: '¦'", vbCritical
'      Else
'         MsgBox "ATTENZIONE!" & vbNewLine & _
'                "Riscontrata anomalia nella stringa [" & pRecord & "].", vbCritical
'      End If
'   End If
'   On Error GoTo 0
'
'End Sub


Public Sub PopolaListColonne(pCtrlRpt As ReportControl, pCtrlLst As Object)
   Dim i As Integer
   
   pCtrlLst.Clear
   With pCtrlRpt
      pCtrlLst.AddItem "[Ricerca libera]"
      pCtrlLst.ItemData(pCtrlLst.NewIndex) = -1
      
      For i = 0 To .Columns.Count - 1
         'Aggiungo il nome delle SOLE colonne VISIBILI
         If .Columns(i).Width > 0 Then
            pCtrlLst.AddItem .Columns(i).Caption
            pCtrlLst.ItemData(pCtrlLst.NewIndex) = i 'questo indica la colonna esatta da considerare in caso di filtro specifico _
                                                      (questo mi evita problemi nel caso di colonne nascoste!)
         End If
      Next i
   End With
End Sub

'Public Sub StampaReportControl(pCtrlRpt As ReportControl, pIntestazione As String, pTitolo As String, pLandscape As Boolean)
'
'      With pCtrlRpt
'
'         'Controllo che ci siano righe da stampare
'         If .Records.Count = 0 Then Exit Sub
'
'   ' &d     Date in short format (as specified by Regional Settings in Control Panel)
'   ' &D     Date in long format (as specified by Regional Settings in Control Panel)
'   ' &t     Time in the format specified by Regional Settings in Control Panel
'   ' &T     Time in 24-hour format
'   ' &p     Current page number
'   ' &P     Total number of pages
'   ' &b     The text immediately following these characters as centered.
'   ' &b&b   The text immediately following the first "&b" as centered, and the text following the second "&b" as right-justified.
'   ' &w     Window title
'   ' &&     A single ampersand (&)
'   ' \n     new line marker
'
'         '.PrintPreview False
'         '.PrintPreviewExt True, 150, 0, 50, 0
'         '.PrintOptions.marginLeft = 180
'         .PrintOptions.Landscape = pLandscape 'FALSE = Verticale; TRUE = Orizzontale
'         '.PrintOptions.Header.TextCenter = True
'         '.PrintOptions.Header.FormatString = "&b"
'         '.PrintOptions.Header.FormatString = "&b Procedura Aggiorna Listini" & vbNewLine & "Secondo Rigo" & vbNewLine & "Terzo Rigo" & vbNewLine & "Quarto Rigo"
'         .PrintOptions.Header.FormatString = "&b " & pIntestazione
'         .PrintOptions.Header.Font.Size = 10
'         .PrintOptions.RepeatHeaderRows = False
'
'   '      .PrintOptions.Footer.FormatString = "Pag. &p di &P"
'   '      .PrintOptions.Footer.Font.Size = 9
'   '      .PrintOptions.RepeatFooterRows = True
'
'         .PrintOptions.Footer.FormatString = "www.primosoftware.it &b Pagina &p di &P &b Stampa del &d"
'         .PrintOptions.Footer.Font.Name = CSSApp.gFontNameApp
'         .PrintOptions.Footer.Font.Size = 8
'         .PrintOptions.RepeatFooterRows = True
'
'         .PrintOptions.MarginTop = 5
'         .PrintOptions.MarginBottom = 5
'
'         .PrintPreviewOptions.Title = pTitolo
'
'         '.ShowRowNumber True
'         '.ShowPrintPageSetup 'Visualizza la pagina di configurazione (in pratica sono gli stessi parametri settabili con .PrintOptions)
'
'         '.SetWatermarkBitmapFromFile "D:\ProgettiVB\PRIMO\Files\Ext\logo_novisoft.jpg", 100 'Immagine di filigrana
'         '.WatermarkAlignment = xtpReportWatermarkStretch 'allineamento dell'immagine di filigrana
'         '.PaintManager.PrintWatermark = True
'
'         '.PrintGroupRowIcon = False
'         .PaintManager.PrintPageRectangle = False 'Bordo di chiusura del controllo
'
'         '.PreviewMode = True
'         '.PrintReport
'
'         '.PrintPreviewExt True, 150, 0, 50, 0
'         .PrintPreview True
'         '.PrintReport2 True
'      End With
'
'End Sub

Public Function ReportAddGroupRecord(Records As ReportRecords, Caption As String) As ReportRecord
'    Dim Record As ReportRecord, Item As ReportRecordItem
'    Set Record = Records.Add
'    Dim Button As ReportItemButton
'
'    Record.AddItem Caption
'    Set Item = Record.AddItem("")
'    Item.Editable = False
'         Item.Bold = True
'         Item.ForeColor = ForeColorObbligo
'    Record.AddItem ""
'
'
'        Set Button = Item.ItemControls.AddButton(-1)
'        Button.Alignment = xtpReportItemControlLeft
'        Button.SetIconIndex xtpReportItemButtonStateNormal, 1
'        Button.SetIconIndex xtpReportItemButtonStatePressed, 2
'        Button.SetSize 32, 0
'
'        Set Button = Item.ItemControls.AddButton(-1)
'        Button.Alignment = xtpReportItemControlLeft
'        Button.SetIconIndex xtpReportItemButtonStateNormal, 1
'        Button.SetIconIndex xtpReportItemButtonStatePressed, 2
'        Button.SetSize 32, 0
'        Button.Enable = False
'
'    Set ReportAddGroupRecord = Record
End Function

Public Sub ReportMergeRecord(pCtrlRpt As ReportControl, _
                             pRecFrom As Long, pRecTo As Long, pColFrom As Long, pColTo As Long)
    pCtrlRpt.Records.MergeItems pRecFrom, pRecTo, pColFrom, pColTo
End Sub

Public Sub ReportAddItemButton(pItem As ReportRecordItem, pCommand() As String, pWidth As Byte)
   'Dim Record As ReportRecord
   'Dim Item As ReportRecordItem
   Dim vButton As ReportItemButton

   Dim i As Byte
   For i = 0 To UBound(pCommand)
      Set vButton = pItem.ItemControls.AddButton(-1)
      vButton.Alignment = xtpReportItemControlRight
      vButton.SetIconIndex xtpReportItemButtonStateNormal, CLng(pCommand(i, 0))
      vButton.SetIconIndex xtpReportItemButtonStatePressed, CLng(pCommand(i, 0))
      vButton.setSize pWidth, 0
      'vButton.Themed = True
      'vButton.Caption = "Abb"
      'vButton.CaptionColor = vbGreen
      'vButton.Font.Bold = True
      'vButton.Font.Size = 15
   Next i
    
'''        'Add item
'''        Set Item = Record.AddItem("Row - " & Record.Index + 1 & ", Column - " & i + 1)
'''        Item.Editable = True
'''        'Add button "Alignment"
'''        Set Button = Item.ItemControls.AddButton(-1)
'''        'Button.Alignment = xtpReportItemControlLeft
'''        Button.Alignment = xtpReportItemControlRight
'''        Button.SetIconIndex xtpReportItemButtonStateNormal, 1
'''        Button.SetIconIndex xtpReportItemButtonStatePressed, 2
'''        Button.SetSize 22, 0
'''        'Add button "Color"
'''        Set Button = Item.ItemControls.AddButton(-1)
'''        Button.Alignment = xtpReportItemControlRight
'''        Button.SetIconIndex xtpReportItemButtonStateNormal, 5
'''        Button.SetIconIndex xtpReportItemButtonStatePressed, 6
'''        Button.SetSize 22, 0
'''        'Add button "Bold"
'''        Set Button = Item.ItemControls.AddButton(-1)
'''        Button.Alignment = xtpReportItemControlRight
'''        Button.SetIconIndex xtpReportItemButtonStateAll, 4
'''        Button.CaptionColor = 255
'''        Button.SetSize 22, 0
End Sub

Public Sub ImpostaWidthCommandReport(pRptCtrl As ReportControl, pColCmd As Byte, pWidthCmd As Integer)
   'Questa funzione server per dare una larghezza identica a tutti i command persenti in una data colonna _
    E' nata perchè sui report che contengono command quando si va in stampa non mi piace che si devano i _
    command e quindi non essendoci la proprietà Visible uso la width per nasconderli e poi rivisualizzarli
   
   Dim i As Integer
   Dim Y As Integer
   
   With pRptCtrl
      For i = 0 To .Records.Count - 1
         For Y = 0 To .Records(i).Item(pColCmd).ItemControls.Count - 1
            .Records(i).Item(pColCmd).ItemControls(Y).Width = pWidthCmd
         Next Y
      Next i
   End With
   
End Sub


'Public Sub ImpostaWidthCol(pRptCtrl As ReportControl, pNomeForm As String)
'   'con questa routine leggo eventuali dimensioni delle colonne della griglia passata nei parametri. _
'   inoltre serve ance il nome della form che eventualmente può essere composto anche dal nome della _
'   griglia nel caso siano presenti più report control nella stessa form
'
'
'   Dim i As Integer
'   Dim vWidth As String
'
'   'qui salvo la larghezza delle colonne in modo che ognuno può personalizzarsela come vuole
'   With pRptCtrl
'      For i = 0 To .Columns.Count - 1
'         If .Columns(i).Width > 0 Then
'            vWidth = ReadINI(pNomeForm, "WD_COL_" & i, IniSetGrid)
'            If IsNumeric(vWidth) Then
'               If vWidth > 0 Then
'                  .Columns(i).Width = CLng(vWidth)
'               End If
'            End If
'         End If
'      Next i
'   End With
'
'End Sub


Public Sub SetGlyphsReportControl(pReport As ReportControl)
   'Personalizzare le ICONE interne del ReportControl
   
   'QUESTA E' L'UNICA CONDIZIONE CHE FUNZIONA!!!! _
    IL PROBLEMA E' CHE SI AZZERANO TUTTE LE ICONE LEGATE ALLA GRIGLIA _
    E PERTANTO VANNO RICREATE SENCONDO LO SCHEMA SEGUENTE:
      '0  MENO
      '1  PIU
      '2  CHECK NON FLAGGATO ABILITATO
      '3  CHECK FLAGGATO ABILITATO
      '4  CHECK NON FLAGGATO DISABILITATO
      '5  CHECK FLAGGATO DISABILITATO
      '6  FRECCIA DX
      '7  FRECCIA SX
      '8  FRECCIA SX
      '9  LUCCHETTO CHIUSO
      '10 LUCCHETTO APERTO
      '11 ICONA ASCENDENTE
      '12 ICONA DISCENDENTE
   With pReport
      .PaintManager.Glyphs.RemoveAll
      .PaintManager.Glyphs.AddIcons MDIForm1.ImageManagerGlyphs.Icons
   End With
      
   'LE SEGUENTI ISTRUZIONI NON FUNZIONANO!!!!
      '.PaintManager.Glyphs.LoadIcon App.Path & "\icons\NOCHECK.PNG", 2, xtpImageNormal 'CHECK NON FLAGGATO ABILITATO
      '.PaintManager.Glyphs.LoadIcon App.Path & "\icons\NOCHECK.PNG", 3, xtpImageNormal 'CHECK NON FLAGGATO ABILITATO
      
      '.PaintManager.Glyphs.AddIcon ImageManagerGlyphs.Icons.GetImage(2, 24).Handle, 2, xtpImageNormal 'CHECK NON FLAGGATO ABILITATO
      '.PaintManager.Glyphs.AddIcon ImageManagerGlyphs.Icons.GetImage(3, 24).Handle, 3, xtpImageNormal 'CHECK NON FLAGGATO ABILITATO
      
End Sub

Public Function FindByRecord(pReport As ReportControl, pColonna As Byte, pCodice As String) As Integer
   'questa funzione ricerca sulla colonna passata nel parametro il codice indicato _
    e ne restituisce la posizione
   Dim pRec As ReportRecordItem
   
   On Error GoTo GestErr
   
   With pReport
      If .Records.Count > 0 Then
         'cerco nella colonna dell'ID se già esiste un Record con l'ID passato come Parametro
         Set pRec = .Records.FindRecordItem(0, .Records.Count - 1, pColonna, pColonna, 0, 0, pCodice, xtpReportTextSearchExactPhrase)

         If Len(Trim(pRec.Value)) > 0 Then
            'Qui prendo la descrizione
            FindByRecord = .Records(pRec.Record.Index).Index
         End If
         Exit Function
      End If
   End With
   
GestErr:
   FindByRecord = -1
End Function

Public Sub PopolaArrayGrigliaAppoggio(RptCtrl As ReportControl, pColCodice As Integer, pOnlySelected As Boolean)
   Dim i As Integer
   
   Erase mArrayReportAppoggio
      
   With RptCtrl
      If pOnlySelected Then
      
'SOLO LE RIGHE SELEZIONATE
         If .SelectedRows.Count > 0 Then
            For i = 0 To .SelectedRows.Count - 1
               Call AddArrayElement(mArrayReportAppoggio, .SelectedRows(i).Record.Item(pColCodice).Value)
            Next i
         End If
   
      Else
      
'TUTTE LE RIGHE VISIBILI
         If .Rows.Count > 0 Then
            For i = 0 To .Rows.Count - 1
               Call AddArrayElement(mArrayReportAppoggio, .Rows(i).Record.Item(pColCodice).Value)
            Next i
         End If
      
      End If
   End With
End Sub


Public Sub ColoraRigaReportControl(pGrid As ReportControl, pRow As Integer, pColore As Long, _
                                   Optional pForecolor As Boolean, Optional pFontItalic As Boolean, _
                                   Optional pFontBold As Boolean, _
                                   Optional pIsRow As Boolean)
   Dim i As Integer
         'Dim pRpt As ReportControl
   'il parametro pIsRow indica se devo colorare la ROW oppure il RECORD


   With pGrid
      
      For i = 0 To .Columns.Count - 1
         'Colore Sfondo/Testo
            If pColore <> 0 Then
               If pForecolor = False Then
                  If Not pIsRow Then
                     .Records(pRow).Item(i).BackColor = pColore
                  Else
                     .Rows(pRow).Record.Item(i).BackColor = pColore
                  End If
                  
               Else
                  If Not pIsRow Then
                     .Records(pRow).Item(i).ForeColor = pColore
                  Else
                     .Rows(pRow).Record.Item(i).ForeColor = pColore
                  End If
                  
               End If
            End If
         
         'FontItalic
         'If pFontItalic = True Then pRpt.Records(pRow).Item(i).Bold
         
         'FontBold
         If pFontBold = True Then
            If Not pIsRow Then
               .Records(pRow).Item(i).Bold = pFontBold
            Else
               .Rows(pRow).Record.Item(i).Bold = pFontBold
            End If
         End If
      Next i
      
   End With

End Sub

Public Sub ColoraColonnaReportControl(pGrid As Object, pCol As Byte, pColore As Long, _
                                      Optional pForecolor As Boolean, Optional pFontItalic As Boolean, Optional pFontBold As Boolean)
   Dim i As Long
         'Dim pRpt As ReportControl

   With pGrid
      
      For i = 0 To .Records.Count - 1
         'Colore Sfondo/Testo
            If pColore <> 0 Then
               If pForecolor = False Then
                  .Records(i).Item(pCol).BackColor = pColore
               Else
                  .Records(i).Item(pCol).ForeColor = pColore
               End If
            End If
         
         'FontItalic
         'If pFontItalic = True Then pRpt.Records(pRow).Item(i).Bold
         
         'FontBold
         If pFontBold = True Then .Records(i).Item(pCol).Bold = pFontBold
      Next i
      
   End With

End Sub


Public Sub InizializzaReportControl(pRptCtrl As ReportControl, _
                                    Optional pFormName As String, Optional pFormCaption As String)
   Dim vFontName As String
   Dim vFontSize As String
   Dim vFontBold As Boolean
   Dim vFontItalic As Boolean

   Dim vNewCaption As String
   Dim vPos As Byte
   
   
   vPos = InStr(1, pFormCaption, "\")
   If vPos > 0 Then
      'Pulisco la Caption della Form togliendo dalla " \ " in poi
      vNewCaption = Trim(Mid(pFormCaption, 1, vPos - 1))
   Else
      vNewCaption = pFormCaption
   End If


   With pRptCtrl
      '.VisualTheme = xtpReportThemeOffice2013
      .VisualTheme = CSSApp.gCtrlVisualTheme
      .PaintManager.GridLineColor = vbWhite '&HC0C0C0
'      'Qui svuoto e azzero il controllo
'      .ClearContent
'      .Columns.DeleteAll

      'If pRpt.Name = "Griglia" Then
         '.PaintManager.ColumnStyle = xtpColumnResource ' xtpColumnExplorer 'imposta lo STILE GRAFICO!!
         '.VisualTheme = xtpReportThemeOffice2003
'.Icons.LoadBitmap App.path & "\Files\Images\toolbar\5072.png", 1, xtpImageNormal
      'Else
      '   .PaintManager.ColumnStyle = xtpColumnShaded  'imposta lo STILE GRAFICO!!
      'End If
      
      .PaintManager.NoItemsText = "Nessun elemento da visualizzare" 'There are no Items to show
      
      '.PaintManager.CaptionFont.Bold = True
      '.PaintManager.CaptionFont.Weight = 50
      .PaintManager.VerticalGridStyle = xtpGridSmallDots
      .PaintManager.HorizontalGridStyle = xtpGridSmallDots
      '.PaintManager.FreezeColsDividerStyle = xtpReportFreezeColsDividerBold
      .PaintManager.FreezeColsDividerColor = vbHighlight
      
      'QUESTE RIGHE LE HO DOVUTE DUPLICARE ANCHE IN ALTRI PUNTI PERCHè SE IMPOSTATE PRIME DELLA PROPRIETA' "PaintManager.ColumnStyle" non hanno alcun effetto!!! Questo dalla release 16.3.0 dei Codejock
      '''.PaintManager.TextFont.Name = CSSApp.gFontNameApp
      '''.PaintManager.TextFont.Size = 11


      'vFontName = ReadINI(pFormName & vNewCaption, "FONT_NAME", IniSetGrid)
         .PaintManager.TextFont.Name = IIf(Len(Trim(vFontName)) > 0, vFontName, CSSApp.gFontNameApp)
      'vFontSize = ReadINI(pFormName & vNewCaption, "FONT_SIZE", IniSetGrid)
         .PaintManager.TextFont.Size = IIf(IsNumeric(vFontSize) = True, vFontSize, CSSApp.gFontSizeApp)
      'vFontBold = IIf(ReadINI(pFormName & vNewCaption, "FONT_BOLD", IniSetGrid) = "T", True, False)
         .PaintManager.TextFont.Bold = vFontBold
      'vFontItalic = IIf(ReadINI(pFormName & vNewCaption, "FONT_ITALIC", IniSetGrid) = "T", True, False)
         .PaintManager.TextFont.Italic = vFontItalic

      
      .SetCustomDraw xtpCustomMeasureRow 'questo mi serve per far funzionare l'evento MeasureRow per impostare l'altezza delle righe

      .AllowColumnSort = False 'Blocco la possibilità di ordinamento perchè altrimenti mi sballa la posizione dell'ultima riga vuota
      .AllowColumnRemove = False 'Blocco la possibilità di ordinamento perchè altrimenti mi sballa la posizione dell'ultima riga vuota
      .AllowColumnReorder = False
      
      '.PaintManager.ExpandText
      
      '.PaintManager.FixedRowHeight = False 'combinata con la proprità delle singole colonne [ .Columns(0).Alignment = xtpAlignmentWordBreak ] consente di adattare la cella in altezza in base al proprio contenuto
'      .FullColumnScrolling = True 'questa propeità consente di spostarsi tra le celle in senso orizzonatale quando si preme INVIO

'      .CreateRowNumberColumn 10 'crea la colonna del numero di riga 'NON FUNZIONA BENE. Da verificare
'      .ShowRowNumber True 'visualizza la colonna col numero di riga 'NON FUNZIONA BENE. Da verificare

      '''NOTA: se inserisco queste proprietà si rallenta tutto!
         '''.ScrollMode = xtpReportScrollModeBlock
         '''.FullColumnScrolling = True
                       
'NB: QUESTO LO RIMUOVO PERCHè ALTRIMENTI NON SI VEDE IL FILTRO IN INTESTAZIONE DI COLONNA _
     (SE IN ALCUNI CASI MI SERVE COME AD ESEMPIO LA GRIGLIA NELLA FormAPP LO ASSOCIO NEL CODICE DELLA FORM)
      '.Icons = MDIForm1.ImageManager.Icons
                       
                       
      .AutoColumnSizing = False 'se FALSE consente di far comparire la scrollbar orizzontale
      .FocusSubItems = True
      
   End With
End Sub

