$include "windows.inc"
$TYPECHECK on
DECLARE SUB fdown(button AS LONG , x AS LONG , y AS LONG , shift AS INTEGER)
DECLARE SUB fpaint(sender AS QFORM)
DECLARE SUB pdown(but AS LONG , x AS LONG , y AS LONG , _
    shift AS INTEGER , sender AS QPANEL)
DECLARE SUB pup(button AS LONG , x AS LONG , y AS LONG , _
    shift AS INTEGER , sender AS QPANEL)
DECLARE SUB pmove(x AS LONG , y AS LONG , _
    shift AS INTEGER , sender AS QPANEL)
DECLARE SUB keydown(key AS LONG , sender AS QFORM)
DECLARE SUB fkeyup(sender AS QFORM)
DECLARE SUB operations
DECLARE SUB bezbuttonclick
DECLARE SUB polyclick
DIM drag AS INTEGER
DIM pbez AS pointapi
DIM curves AS INTEGER
DIM curve AS QMEMORYSTREAM
DIM i AS INTEGER
DIM a AS INTEGER
DIM hdc AS LONG
DIM fkey AS INTEGER
DIM sx(2000) AS INTEGER
DIM sy(2000) AS INTEGER
DIM btypes(2000) AS BYTE
DIM btype AS INTEGER
btype = 1
DIM bezier? AS INTEGER
bezier? = 0
DIM form AS QFORM
form.keypreview = 1
form.OnMouseDown = fdown
form.OnKeyDown = keydown
form.OnKeyUp = fkeyup
form.OnPaint = fpaint
DIM ptl(600) AS QPANEL
DIM bezbutton AS QLABEL
DIM polybutton AS QLABEL
polybutton.Caption = "Drawing Poly-Lines"
polybutton.Width = .5 * form.ClientWidth
polybutton.Height = 20
polybutton.OnClick = polyclick
polybutton.Parent = form
bezbutton.Parent = form
bezbutton.Caption = "Change To_
    Bezier Curves"
bezbutton.Width = .5 * form.ClientWidth
bezbutton.Left = polybutton.Width
bezbutton.Height = 20
bezbutton.OnClick = bezbuttonclick

form.ShowModal
SUB polyclick
    bezier? = 0
    polybutton.Caption = "Drawing Poly-Lines"
    bezbutton.Caption = "Change to Bezier Curves"
END SUB

SUB bezbuttonclick
    bezbutton.Caption = "Drawing Bezier Curves"
    polybutton.Caption = "Change to PolyLines"
    bezier? = 1
END SUB

SUB fdown(button AS LONG , x AS LONG , y AS LONG , _
        shift AS INTEGER)

    ptl(i).Parent = form
    ptl(i).Color = &h0000ff
    ptl(i).Width = 9
    ptl(i).Height = 9
    ptl(i).Left = x
    ptl(i).Top = y
    ptl(i).OnMouseDown = pdown
    ptl(i).OnMouseUp = pup
    ptl(i).OnMouseMove = pmove
    ptl(i).Visible = 1
    ptl(i).Enabled = 1

    pbez.x = x
    pbez.y = y
    ptl(i).tag = curve.Position
    curve.writeudt pbez


    IF i > 0 AND bezier? = 0 THEN
        btypes(i + 1) = PT_LINETO
    ELSE

        btypes(i + 1) = PT_BEZIERTO
    END IF


    i ++
    IF btype = 1 THEN
        btypes(i) = PT_MOVETO

    END IF
    btype = 0
    operations
END SUB
SUB pdown
    drag = 1
END SUB

SUB pup
    drag = 0
END SUB

SUB pmove
    IF drag = 1 THEN
        sx(sender.tag + 1) = SCREEN.MouseX - sender.Left
        sy(sender.tag + 1) = SCREEN.MouseY - sender.Top

        sender.Left = SCREEN.MouseX - form.Left - 8
        sender.Top = SCREEN.MouseY - form.Top - 28
'        sx(sender.TabOrder + 1) = SCREEN.MouseX - form.Left - 8
'        sy(sender.sender.TabOrder + 1) = SCREEN.MouseY - form.Top - 28


        pbez.x = sender.Left
        pbez.y = sender.Top
        DIM old AS INTEGER
        old = curve.Position
        curve.Position = sender.tag
        curve.writeudt pbez
        curve.Position = old
        form.Repaint
        operations
    END IF


END SUB

SUB operations
    hdc = getdc(form.Handle)
    'polybezier(hdc,curve.pointer,i)
    PolyDraw(hdc , curve.pointer , btypes(1) , i)
    releasedc(hdc , form.Handle)
END SUB

SUB fpaint
    operations

END SUB

SUB keydown
    IF key = 17 THEN
        fkey = key
    END IF
    IF key = 13 THEN
        DIM k AS INTEGER
        DO

            ptl(k).Visible = 0
            ptl(k).Enabled = 0
            k ++
        LOOP UNTIL k = i


        btype = 1

    END IF
END SUB


SUB fkeyup

END SUB


