Newsgroup: it.comp.lang.visual-basic
Titolo: ? print Line circle

Vorrei stampare un rettangolo con gli angoli smussati come Shape1.shape=
VbShapeRoundedRectangle
Posso farlo con Printer.print.circle?
Esiste un altro modo?
Grazie in anticipo a coloro che avranno tempo e pazienza da dedicarmi
un saluto cordiale
paolo

 Esiste un altro modo?
Io mi sono scritto questa e la uso su quasi tutti i miei report, puoi usarla
sia sull'oggetto printer che su una picture e se ti serve disegna anche
l'ombra (spero non sia troppo lungo come codice da postare). L'unico
appunto: mi e' capitato una volta con un driver di una stampante HP Laserjet
4 che fosse mooolto lento a stampare.
Public Type POINTAPI
    X As Long
    Y As Long
End Type
Private Type LOGPEN
     lopnStyle As Long
     lopnWidth As POINTAPI
     lopnColor As Long
End Type
Private Declare Function RoundRect Lib "GDI32" (ByVal hDC As Long, ByVal x1
As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long, ByVal X3 As
Long, ByVal Y3 As Long) As Long
Private Declare Function CreatePenIndirect Lib "GDI32" (lpLogPen As LOGPEN)
As Long
Private Declare Function SelectObject Lib "GDI32" (ByVal hDC As Long, ByVal
nObject As Long) As Long
Private Declare Function DeleteObject Lib "GDI32" (ByVal hObject As Long) As
Long
Sub draw_box(miooggetto, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As
Long, ByVal y2 As Long, Optional ByVal bordi_arrotondati As Integer = False,
Optional ByVal diametrox_angolo As Long = 300, Optional ByVal
diametroy_angolo As Long = 300, Optional ByVal ombra As Integer = False)
    Dim miohdc
    Dim ret
    Dim twx As Double
    Dim twy As Double
    Dim xc As Long
    Dim yc As Long
    Dim xxc As Double
    Dim yyc As Double
    Dim lP As LOGPEN
    Dim pnt As POINTAPI
    Dim hndPen As Long
    Dim oldPen As Long
    If bordi_arrotondati Then
        miohdc = miooggetto.hDC
        xxc = 60
        yyc = 60
        If TypeOf miooggetto Is PictureBox Then
            twx = Screen.TwipsPerPixelX
            twy = Screen.TwipsPerPixelY
        Else
            twx = miooggetto.TwipsPerPixelX
            twy = miooggetto.TwipsPerPixelY
        End If
        If twx > 0 Then
            x1 = Int(x1 / twx + 0.5)
            x2 = Int(x2 / twx + 0.5)
            diametrox_angolo = Int(diametrox_angolo / twx + 0.5)
            xxc = Int(xxc / twx + 0.5)
        End If
        If twy > 0 Then
            y1 = Int(y1 / twy + 0.5)
            y2 = Int(y2 / twy + 0.5)
            diametroy_angolo = Int(diametroy_angolo / twy + 0.5)
            yyc = Int(yyc / twy + 0.5)
        End If
        If ombra Then
            pnt.X = 1
            lP.lopnColor = GRAY
            lP.lopnStyle = PS_SOLID
            lP.lopnWidth = pnt
            hndPen = CreatePenIndirect(lP)
            oldPen = SelectObject(miohdc, hndPen)
            For xc = 0 To xxc
                For yc = 0 To yyc
                    ret = RoundRect(miohdc, x1, y1, x2 + xc, y2 + yc,
diametrox_angolo, diametroy_angolo)
                Next yc
            Next xc
            oldPen = SelectObject(miohdc, oldPen)
            ret = DeleteObject(hndPen)
        End If
        ret = RoundRect(miohdc, x1, y1, x2, y2, diametrox_angolo,
diametroy_angolo)
    Else
        miooggetto.Line (x1, y1)-(x2, y2), , B
    End If
End Sub
Spero ti possa servire. Ciao
Fabio
http://www.codice.it


Scusa manca la definizione delle costanti per gli stili.....
'  Stili penna
Const PS_SOLID = 0
Const PS_DASH = 1                    '  -------
Const PS_DOT = 2                     '  .......
Const PS_DASHDOT = 3                 '  _._._._
Const PS_DASHDOTDOT = 4              '  _.._.._
Const PS_NULL = 5
Const PS_INSIDEFRAME = 6
Const PS_USERSTYLE = 7
Const PS_ALTERNATE = 8
Const PS_STYLE_MASK = &HF
Fabio
http://www.codice.it

 Posso farlo con Printer.print.circle?
Disegni il rettangolo con .Line, incompleto agli angoli.
Poi disegni un settore di cerchio con .Circle in modo che crei l'angolo
smussato.
Sě, ma devi fare 3 conti con raggio e centro.

Grazie mille per la vostra cortesia.
Ciao a presto
paolo