Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Rendere "persistente" un disegno fatto con API

Quando uso le API per disegnare qualcosa su di un form o su una picture
succede che ogni volta che il disegno viene "sormontato" da un altro
oggetto sullo schermo (ad esempio un form o lo stesso mouse) il disegno si
cancella.
Ad esempio il puntatore del mouse mi crea un "simpatico" effetto
cancellino: la figura sparisce nei punti in cui č passato il puntatore.
La
cosa diventa fastidiosa quando il disegno č su un User Control :-)
C'č il
modo pere rendere "persistente" un disegno?
E' un problema di settare
qualche proprietą del device su cui disegno o serve qualche API ulteriore?
Legato a questo c'č il problema di diegnare sull'oggetto Priter.
Se
disegno una figura con le API su Printer tutto OK. Mi stampa la figura.
Se
aggiungo un'altra figura subito dopo (sullo stesso handle) non mi stampa ne
la prima ne la seconda figura.
E' corretto pensare che si tratti dello
stesso problema?
Grazie!
-- 
Giorgio
--------------------------------
Inviato via 
http://usenet.iol.it

> modo pere rendere "persistente" un disegno?
autoredraw=true
dopo il disegno metti un refresh per fare in modo che il controllo cestisca
bene il tutto
ciao

ciao
--------------------------------
Inviato via 
http://usenet.iol.it
 

ciao
Ciao e grazie
-- 
Giorgio
(mi scuso per
la doppia trasmissione!)


 AutoRedraw=False)
infatti :))
ciao

 AutoRedraw=False)
Infatti doveva essere a True :)
Con AR = True VB disegna "di nascosto" e con Refresh ti fa vedere cosa ha
disegnato fino a quel momento.
Ciao

Ciao
Ciao
-- 
Giorgio


ciao
Ok, ho provato. Solo che funziona
in parte e soprattutto non funzione sull'oggetto Printer (sigh!).
Ora
smanetto un po' e poi vediamo i risultati!
Ciao e grazie
-- 
Giorgio
--------------------------------
Inviato via 
http://usenet.iol.it
 

 paio di settimane :-)
Riesci a riprodurre il problema in poche righe?
Così ci si dà un occhio.
Ciao

Così ci si dà un occhio.
Ci provo!
Dunque...
Un Form con AutoRedraw=False
Una PictureBox
(picDisegno) sul Form con AutoRedraw=False
Una routine nel modulo del
form:
Private Sub DisegnaPoligoni(numPol As Long)
' Disegna un poligono
usando le funzioni API di Windows
' Vertice del poligono/i nel formato
"leggibile"
' dalle API (cioè POINT_TYPE)
Dim PtDisegnato(1 To
MAX_VERTICI) As POINT_TYPE 
Dim i, j As Integer
Dim ... ' un po' di
variabili per le API
' Assegno i vertici
For i = 1 To numPol  ' ripete
per ogni poliogno da disegnare
    For j = 1 To Poligono(i).numPt
PtDisegnato(j).X = (Poligono(i).Pt(j).X *  FattoreDiScala) + Origine.X
PtDisegnato(j).Y = (-Poligono(i).Pt(j).Y *  FattoreDiScala) + Origine.Y
Next j
 
    hPen = CreatePen(PS_SOLID, 0, vbBlue)
' La prossima
istruzione da errore 480!!!
    hOldPen = SelectObject(picDisegno.hDC,
hPen)
' Anche questa!
    hBrush = CreateSolidBrush(vbRed)
' Anche
questa!
    holdBrush = SelectObject(picDisegno.hDC, hBrush)
'
Soprattutto questa!
    hmyRgn = Polygon(picDisegno.hDC, PtDisegnato(1),
Poligono(i).numPt)
    retVal = FillRgn(picCanvas.hDC, hmyRgn, hBrush)
retVal = SelectObject(picDisegno.hDC, hOldPen)
    bool =
DeleteObject(hPen)
    bool = DeleteObject(hmyRgn)
    bool =
DeleteObject(hBrush)
Next i
End Sub
Così le figure vengono
disegnate, ma non sono persistenti.
Se metto (anche da codice) la
proprietà AutoRedraw=True
del Form e della Picture, avvengono gli errori
segnati.
Lo stesso succede scrivendo il codice in un metodo di classe
CPoligono e utilizzando quello (passanddogli i parametri dei vertici e
della Picture su cui disegnare) per disegnare le figure.
Ciao!
