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 SubArgomenti 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: |