Reports

4.19 Incorniciare le pagine di un report
  Roberto
E possibile disegnare delle cornici nelle pagine di un report richiamando la funzione CreaCornice a fronte dell'evento "Su pagina" del report.

La funzione, che va memorizzata in un modulo del database, ha il seguente codice VBA:
Public Sub CreaCornice(UnitàMisura As Integer, Spessore As Integer, Colore As Long, _
CorreggiX1 As Single, CorreggiY1 As Single, CorreggiX2 As Single, CorreggiY2 As Single, Raggio As Single)
'
' Crea un riquadro nella pagina di un report.
' Il riquadro può avere gli angoli arrotondati (Raggio <> 0)
' oppure può avere gli angoli acuti (Raggio = 0).
'
If UnitàMisura < 1 Or UnitàMisura > 7 Then
   ' Se il valore dell'unità di misura non è valido, esci dalla Sub
    MsgBox "Errore Unità di Misura", vbCritical, "Sub CreaCornice"
    Exit Sub
End If
CodeContextObject.ScaleMode = UnitàMisura 'imposta unità di misura
CodeContextObject.DrawWidth = Spessore 'imposta lo spessore della cornice in pixel
Dim PiGreco As Double
PiGreco = 3.14159265359 ' definisci la costante pi greco
If Raggio <> 0 Then ' se Raggio <> 0 traccia una cornice con gli angoli arrotondati
  ' traccia arco di 90° in alto a sinistra
    CodeContextObject.FillStyle = 1 ' imposta lo stile di riempimento a trasparente
    CodeContextObject.Circle (CodeContextObject.ScaleLeft + CorreggiX1 + Raggio, _
    CodeContextObject.ScaleTop + CorreggiY1 + Raggio), Raggio, Colore, PiGreco / 2, PiGreco
  ' traccia linea retta orizzontale in alto
    CodeContextObject.FillStyle = 2 ' imposta lo stile di riempimento a linea orizzontale
    CodeContextObject.Line (CodeContextObject.ScaleLeft + CorreggiX1 + Raggio, CodeContextObject.ScaleTop + CorreggiY1)- _
    (CodeContextObject.ScaleWidth - (CorreggiX2 + Raggio), CodeContextObject.ScaleTop + CorreggiY1), Colore
  ' traccia arco di 90° in alto a destra
    CodeContextObject.FillStyle = 1 ' imposta lo stile di riempimento a trasparente
    CodeContextObject.Circle (CodeContextObject.ScaleWidth - (CorreggiX2 + Raggio), _
    CodeContextObject.ScaleTop + CorreggiY1 + Raggio), Raggio, Colore, 0, PiGreco / 2
  ' traccia linea retta verticale a destra
    CodeContextObject.FillStyle = 3 ' imposta lo stile di riempimento a linea verticale
    CodeContextObject.Line (CodeContextObject.ScaleWidth - CorreggiX2, CodeContextObject.ScaleTop + CorreggiY1 + Raggio)- _
    (CodeContextObject.ScaleWidth - CorreggiX2, CodeContextObject.ScaleHeight - (CorreggiY2 + Raggio)), Colore
  ' traccia arco di 90° in basso a destra
    CodeContextObject.FillStyle = 1 ' imposta lo stile di riempimento a trasparente
    CodeContextObject.Circle (CodeContextObject.ScaleWidth - (CorreggiX2 + Raggio), _
    CodeContextObject.ScaleHeight - (CorreggiY2 + Raggio)), Raggio, Colore, 3 * PiGreco / 2, 0
  ' traccia linea retta orizzontale in basso
    CodeContextObject.FillStyle = 2 ' imposta lo stile di riempimento a linea orizzontale
    CodeContextObject.Line (CodeContextObject.ScaleLeft + CorreggiX1 + Raggio, CodeContextObject.ScaleHeight - CorreggiY2)- _
    (CodeContextObject.ScaleWidth - (CorreggiX2 + Raggio), CodeContextObject.ScaleHeight - CorreggiY2), Colore
  ' traccia arco di 90° in basso a sinistra
    CodeContextObject.FillStyle = 1 ' imposta lo stile di riempimento a trasparente
    CodeContextObject.Circle (CodeContextObject.ScaleLeft + CorreggiX1 + Raggio, _
    CodeContextObject.ScaleHeight - (CorreggiY2 + Raggio)), Raggio, Colore, PiGreco, 3 * PiGreco / 2
  ' traccia linea retta verticale a sinistra
    CodeContextObject.FillStyle = 3 ' imposta lo stile di riempimento a linea verticale
    CodeContextObject.Line (CodeContextObject.ScaleLeft + CorreggiX1, CodeContextObject.ScaleTop + CorreggiY1 + Raggio)- _
    (CodeContextObject.ScaleLeft + CorreggiX1, CodeContextObject.ScaleHeight - (CorreggiY2 + Raggio)), Colore
Else 'se Raggio = 0 traccia un rettangolo
    CodeContextObject.FillStyle = 1 ' imposta lo stile di riempimento a trasparente
    CodeContextObject.Line (CodeContextObject.ScaleLeft + CorreggiX1, CodeContextObject.ScaleTop + CorreggiY1)- _
    (CodeContextObject.ScaleWidth - CorreggiX2, CodeContextObject.ScaleHeight - CorreggiY2), Colore, B
End If
End Sub
Argomenti della funzione
UnitàMisura Variabile intera che indica l'unità di misura che verrà usata per passare gli argomenti CorreggiX1, CorreggiY1, CorreggiX2, CorreggiY2 e Raggio. Può assumere uno dei seguenti valori: 1 = Twip, 2 = Punto, 3 = Pixel, 4 = Carattere (orizzontale = 120 twip per unità; verticale = 240 twip per unità), 5 = Pollice, 6 = Millimetro, 7 = Centimetro.
Spessore Variabile intera che indica lo spessore della cornice espresso in pixel.
Colore Variabile intera lunga che indica il colore della cornice: i valori possibili sono quelli previsti da Access per le proprietà Colore sfondo, Colore bordo ecc.
CorreggiX1 Variabile a singola precisione che indica di quante unità dista l'angolo superiore sinistro della cornice dal bordo sinistro della pagina.
CorreggiY1 Variabile a singola precisione che indica di quante unità dista l'angolo superiore sinistro della cornice dal bordo superiore della pagina.
CorreggiX2 Variabile a singola precisione che indica di quante unità dista l'angolo inferiore destro della cornice dal bordo destro della pagina.
CorreggiY2 Variabile a singola precisione che indica di quante unità dista l'angolo inferiore destro della cornice dal bordo inferiore della pagina.
Raggio Variabile a singola precisione che indica di quante unità è il raggio di curvatura degli angoli della cornice: se il raggio è uguale a zero, verrà disegnata una cornice con gli angoli acuti.

E' possibile disegnare più di una cornice in una pagina ed è possibile avere cornici diverse per pagine diverse.
Nel database di esempio allegato a questa FAQ nella prima pagina viene tracciata una doppia cornice blue con angoli acuti intorno all'intestazione di report ed una cornice rossa con gli angoli arrotondati intorno al corpo della pagina; nelle altre pagine viene disegnata una cornice rossa con gli angoli arrotondati intorno al corpo della pagina.
Per realizzare questo a fronte dell'evento "Su pagina" del report viene utilizzato il seguente codice VBA:

Private Sub Report_Page()
If Page = 1 Then ' se è la prima pagina

    '***************************
    '* CORNICI DELLE PRIMA PAGINA *
    '***************************
    
    ' Cornice esterna blue con angoli acuti nell'intestazione del report
        ' Unità di misura = 6 -> Millimetri
        ' Spessore cornice = 12 pixel
        ' Colore cornice = 16711680 -> blue
        ' Correttivo di X1 = 0 mm
        ' Correttivo di Y1 = 2 mm
        ' Correttivo di X2 = 15 mm
        ' Correttivo di Y2 = 257 mm
        ' Raggio = 0 mm -> angoli acuti
    Call CreaCornice(6, 12, 16711680, 0, 2, 15, 257, 0)
    
    ' Cornice interna blue con angoli acuti nell'intestazione del report
        ' Unità di misura = 6 -> Millimetri
        ' Spessore cornice = 2 pixel
        ' Colore cornice = 16711680 -> blue
        ' Correttivo di X1 = 1 mm
        ' Correttivo di Y1 = 3 mm
        ' Correttivo di X2 = 16 mm
        ' Correttivo di Y2 = 258 mm
        ' Raggio = 0 mm -> angoli acuti
    Call CreaCornice(6, 2, 16711680, 1, 3, 16, 258, 0)
    
    ' Cornice rossa con angoli arrotondati nel corpo del report
        ' Unità di misura = 6 -> Millimetri
        ' Spessore cornice = 12 pixel
        ' Colore cornice = 255 -> rosso
        ' Correttivo di X1 = 1 mm
        ' Correttivo di Y1 = 27 mm
        ' Correttivo di X2 = 16 mm
        ' Correttivo di Y2 = 6 mm
        ' Raggio = 4 mm -> angoli arrotondati
    Call CreaCornice(6, 12, 255, 1, 27, 16, 6, 4)
    
Else ' se NON è la prima pagina

    '**************************
    '* CORNICE DELLE ALTRE PAGINE *
    '**************************
    ' Cornice rossa con angoli arrotondati nel corpo del report
        ' Unità di misura = 6 -> Millimetri
        ' Spessore cornice = 12 pixel
        ' Colore cornice = 255 -> rosso
        ' Correttivo di X1 = 1 mm
        ' Correttivo di Y1 = 1 mm
        ' Correttivo di X2 = 16 mm
        ' Correttivo di Y2 = 6 mm
        ' Raggio = 4 mm -> angoli arrotondati
    Call CreaCornice(6, 12, 255, 1, 1, 16, 6, 4)
End If
End Sub

Download:
 
  CornicePagina.zip (26Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.