Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Compilazione ActiveX in Gruppo di progetti

Ho aperto un nuovo progetto ActiveX ed ho disegnato il mio bel controllo
utente che contiene una picture box ed un metodo (Plot) che grafica
mediante la Polyline un array di POINTAPI.
Poi ho aperto progetto EXE standard (creando un gruppo di progetti), sul
form ho inserito il controllo utente ed un command button che genera una
array di POINTAPI random ed esegue il metodo Plot del controllo utente.
Infine ho impostato come progetto di avvio l'EXE.
Compilo il tutto, eseguo, e tutto funziona :).
Terminata l'esecuzione, se provo a ricompilare viene visualizzato il
messaggio di errore: "Autorizzazione negata 'C:\...\Plotter.OCX'" e non
termina la compilazione, come se l'ocx fosse ancora in uso.
Se lancio il progetto e lo chiudo senza eseguire il metodo dell'ActiveX,
invece, compila correttamente.
L'unico modo che ho di ricompilare e' chiudere il progetto e riaprirlo.
Se necessario posto un po' di codice ma mi sento di dire che non dipende
da quello...
Qualcuno sa darmi un'indicazione su dove puo' risiedere il problema?
Lokar
W98, VB6, SP5
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

 L'unico modo che ho di ricompilare e' chiudere il progetto e riaprirlo.
prova a chiudere le finestre del progetto (non il progetto)
ciao

 prova a chiudere le finestre del progetto (non il progetto)
Ovviamente non basta...
Lokar.non.ancora.del.tutto.sprovveduto



a me funziona...
mi è venuto un dubbio
non hai  mica aperto 2 vb ?
ciao :)

 ha scritto nel messaggio
news:zmQZ8.4$Rv4....@nreader2.kpnqwest.net...
Lokar help....sarà la settimana ....
fammi capire.... ti sei fatto il controllo
e hai un progetto per testarlo ok?
se c'hai sto progetto hai un riferimento al tuo controllo no?
se ricompili il controllo....devi levarlo dal progetto di test...compilare
...e reinserirlo
è come una dll...se la referenzi ad un progetto aperto e poi in un altro la
modifichi...vb si incazza!
ma è normale no? stai sviluppando con quel ocx/dll e al volo la cambi...vb
non è mandrake ha già "carpito" i metodi proprietà eventi del controllo...se
li cambi lui non sa quali sono i nuovi e vuole che tu tolga la referenza e
la rimetta per lanciare la procedura (sua di vb) di cattura record eventi
proprietà del controllo/dll!!
o non era questo che dicevi????
in qual caso scusa....ferie ...troppo lontane.....

 proprietà del controllo/dll!!
mai sentito parlare della possibilità di poter creare sia activex che .exe
nello stesso progetto ? :))
in questo caso non serve chiudere nulla
ciao

 ha scritto nel messaggio
news:VtRZ8.4434$s74....@twister1.libero.it...
non ti rispondo.....
:-P

 record eventi proprietà del controllo/dll!!
Capisco che ricompilando cambia quanto meno la "data" dell'OCX e che
"potrebbe" essere necessario includere il nuovo ocx (anche se lo fa vb
in automatico aggiornando il progetto una volta chiuso e ri-aperto,
suppongo), non mi spiego pero' perche' la "prima" compilazione
(all'apertura del progetto) e le successive "senza invocare metodi" me
la accetta senza fare una piega!
E' come se l'OCX fosse ancora in uso!
Lokar.ancora.in.alto.mare


Ecco il codice:
Una birra virtuale a chi mi risolve il problema della compilazione,
un'altra a chi trova un modo per ottimizzarlo ;)
'-----------------------
'Begin User Control Code
'Name: ctlPlotter
'-----------------------
Option Explicit
Private Declare Function Polyline Lib "gdi32.dll" (ByVal hdc As Long,
lpPoint As POINTAPI, ByVal nCount As Long) As Long
Private Const MAX_POINT = 15000
Public Type POINTAPI
    X As Long
    Y As Long
End Type
Public Sub Cls()
   UserControl.Cls
End Sub
Public Sub Plot(ByRef lpPoint() As POINTAPI, ByVal nCount As Long)
   Dim i As Long
   Dim Last As Long
   Last = (nCount \ MAX_POINT)
   For i = 0 To Last
      Call Polyline(UserControl.hdc, lpPoint(i * MAX_POINT), _
                    Sgn(Last - i) * MAX_POINT _
                    - (Sgn(Last - i) - 1) * (nCount Mod MAX_POINT))
   Next i
End Sub
Public Sub Render()
   UserControl.Refresh
End Sub
Public Property Get ScaleWidth()
   ScaleWidth = UserControl.ScaleWidth
End Property
Public Property Get ScaleHeight()
   ScaleHeight = UserControl.ScaleHeight
End Property
'---------------------
'End User Control Code
'---------------------
'-------------------------
'Begin Form Code
'Name: frmPlotter
'Command Button: cmdGenera
'User Control: ctlPlotter
'-------------------------
Option Explicit
Dim mValori() As POINTAPI
Dim mPlot() As POINTAPI
Dim vMax As Long
Dim vMin As Long
Dim vPlotMin As Long
Dim vPlotMax As Long
Const LASTVAL = 15000
Private Sub Genera()
   Dim i As Long
   Randomize Time
   mValori(0).Y = 4000 + Int(Rnd() * 500)
   mValori(0).X = i
   vMax = mValori(0).Y
   vMin = vMax
   'Genera una sequenza di punti
   For i = 1 To LASTVAL
      If i * Rnd() Mod 2 = 0 Then
         mValori(i).Y = mValori(i - 1).Y + Int(Rnd() * 5)
      Else
         mValori(i).Y = mValori(i - 1).Y - Int(Rnd() * 5)
      End If
      mValori(i).X = i
      If mValori(i).Y > vMax Then
         vMax = mValori(i).Y
      ElseIf mValori(i).Y < vMin Then
         vMin = mValori(i).Y
      End If
   Next i
   'Ricalcola la posizione in base alla dimensione del controllo
   mPlot(0).X = (mValori(0).X / LASTVAL) * ctlPlot.ScaleWidth
   mPlot(0).Y = ((mValori(0).Y - vMin) / (vMax - vMin)) *
ctlPlot.ScaleHeight
   vPlotMax = mPlot(0).Y
   vPlotMin = vPlotMax
   For i = 1 To LASTVAL
      mPlot(i).X = (mValori(i).X / LASTVAL) * Plot.ScaleWidth
      mPlot(i).Y = ((mValori(i).Y - vMin) / (vMax - vMin)) *
Plot.ScaleHeight
      If mPlot(i).Y > vPlotMax Then
         vPlotMax = mValori(i).Y
      ElseIf mPlot(i).Y < vPlotMin Then
         vPlotMin = mValori(i).Y
      End If
   Next i
End Sub
Private Sub cmdGenera_Click()
   Genera
   ctlPlot.Cls
   ctlPlot.Plot mPlot, LASTVAL
   ctlPlot.Render
End Sub
Private Sub Form_Load()
   ReDim mValori(0 To LASTVAL)
   ReDim mPlot(0 To LASTVAL)
   Genera
End Sub
Private Sub Form_Unload(Cancel As Integer)
   Erase mValori
End Sub
'-------------
'End From Code
'-------------
Lokar
