Newsgroup: it.comp.appl.access
Titolo: Metodo Circle->Bug->Trucco

Da una precedente discussione su questo gruppo, è emerso che il metodo
Circle dei report, in alcuni casi lavora in maniera inspiegabilmante errata.
Grazie all'aiuto di alcuni consigli di Daniele "Cidi", sv "SC", Davide
"DavideN" ho elaborato questa Sub che sostituisce il metodo Circle
passandogli praticamente gli stessi parametri. In questo modo gli archi
vengono disegnati tramite spezzate di rette. Il mio problema è così risolto
ma sono sempre aperto ad eventuali consigli, critiche e suggerimenti.
Grazie a tutti
Ciao
Silvio
Public Sub TracciaArco(rpt As Report, x, y, R, Optional Colore _
, Optional Inizio = 0, Optional Fine = 6.28318530717959)
'In alcuni casi il metodo Circle (per disegnare archi nei report)
'dà risultati errati (almeno in Access 2000 SP-1/2/3)
'Questo errore è stato rilevanto anche grazie a Daniele "Cidi",
' sv "SC", Davide "DavideN" di it.comp.appl.access
'Questa routine serve a disegnare correttamente l'arco
'spezzandolo in segmenti (con il metodo Line) oppure
'a disegnarlo per punti (con il metodo PSet)
'Inoltre risolve il problema del paramtero "Aspetto" del metodo Circle che,
'se non è definito, disegna SEMPRE un cerchio ROTONDO
'anche quando sarebbe corretto disegnare un'ellisse (vedi metodo Scale)
Const Passo = 128 'è il passo (in quanti tratti spezzo l'arco)
Dim Beta As Double
    If IsMissing(Colore) Then Colore = rpt.ForeColor
rpt.CurrentX = x + R * Cos(Inizio)
rpt.CurrentY = y + R * Sin(Inizio)
For Beta = Inizio To Fine Step (Fine - Inizio) / Passo
    rpt.Line -(x + R * Cos(Beta), y + R * Sin(Beta)), Colore
    'ho provato con i punti al posto delle linee ma il risultato
    'è graficamente peggiore
    'Rpt.PSet (R * Cos(Beta), R * Sin(Beta))
Next Beta
    'quest'ultima riga serve a finire l'arco nel caso il ciclo For non
    'faccia l'ultimo tratto (causa arrotodamenti)
    rpt.Line -(x + R * Cos(Fine), y + R * Sin(Fine)), Colore
End Sub

 ha scritto nel messaggio
news:btcagl$5ir4d$1...@ID-171909.news.uni-berlin.de...

Ciao Silvio
Bentornato e auguri.
Ho copiaincollato  la tua nuova sub al posto della vecchia e.....mi apre un
rpt vuoto, forse, sbaglio qualcosa?
Ciao Daniele

 un rpt vuoto, forse, sbaglio qualcosa?
Ben ritrovato Daniele "Cidi"!!!
Sono un po' depresso: ho risistemato l'esempio iniziale (dal quale era nato
tutto) e lo posto in coda a questo messaggio. Fa un pasticcio incredibile!
Non me ne ero accorto perché in realtà a me servono piccoli archi di cerchio
(pochi gradi) di grande raggio. Stranamente Access esegue correttamente
l'arco superiore (quello che mi serve) ma se fai il cerchio completo (che a
me NON serve) ti fa gli altri archi in posizioni strane. Boh! Per me il
problema è risolto sperando che non nasca qualche esigenza che farà
comparire l'errore.
Grazie
Ciao
Silvio
Per completezza riporto la procedura completa per creare il report (con il
codice modificato):
- aprire un nuovo report in visualizzazione struttura
- nascondere tutte le intestazioni e i piè di pagina
- impostare a Zero tutti i margini
- impostare la pagina in orizzontale
- impostare la larghezza del report a 28 cm
- aprire il modulo del report, incollare questo codice ed aprire il report
   in anteprima
Option Compare Database
Option Explicit
Const AltezzaReport = 11328
Private Sub Corpo_Print(Cancel As Integer, PrintCount As Integer)
    Dim rpt As Report
    Set rpt = Me
    rpt.Scale (-1400, 975)-(1400, -975)
    'rpt.Circle (0, -300), 300, RGB(0, 0, 0) '<-NERO
    Call TracciaArco(rpt, 0, -300, 300, RGB(0, 0, 0)) '<-NERO
    'rpt.Circle (0, -11300), 11300, RGB(0, 0, 255) '<-BLU
    Call TracciaArco(rpt, 0, -11300, 11300, RGB(0, 0, 255)) '<-BLU
    'rpt.Circle (0, -11500), 11500, RGB(255, 0, 0) '<-ROSSO
    Call TracciaArco(rpt, 0, -11500, 11500, RGB(255, 0, 0)) '<-ROSSO
'NOTA: con questi archi, invece, funziona bene
'    Call TracciaArco(rpt, 0, -300, 300, RGB(0, 0, 0), 1.3, 1.8) '<-NERO
'    Call TracciaArco(rpt, 0, -11300, 11300, RGB(0, 0, 255), 1.3, 1.8)
     '<-BLU
'    Call TracciaArco(rpt, 0, -11500, 11500, RGB(255, 0, 0), 1.3, 1.8)
     '<-ROSSO
End Sub
Private Sub Report_Open(Cancel As Integer)
    Me.Section(0).Height = AltezzaReport
End Sub
