|
Dim objImage As Image
Dim WithEvents MovingObject As Image 'Copia il puntatore sulla variabile del tipo giusto 'ottenendo un'istanza "illegale" del controllo: 'NOTA: lpImageMove = ObjPtr(ControlloImage) CopyMemory objImage, lpImageMove, 4 Set MovingObject = objImage 'Rilascia l'istanza 'illegale' delcontrollo senza 'decrementare il reference-countDeve essere sempre eseguito!! 'NON usare Set objImage = Nothing. CRASH!!! CopyMemory objImage, 0&, 4 'La cosa interessante e' che la variabile MovingObject cosi' 'ottenuta e' perfettamente utilizzabile per ricevere gli 'eventi grazie alla dichiarazione WithEvents. 'A questo punto se vogliamo creare una classe "standard" 'riutilizzabile per lo spostamento di controlli Image 'basta inserire un metodo pubblico nella classe '(ad esempio Create()) che prende in input un puntatore 'Long alla Image ottenuto con ObjPtr() ed usarlo per 'creare un vero oggetto Image sensibile agli eventi come 'nell'esempio. 'Con un piccolo sforzo in piu' e' addirittura possibile 'implementare un sistema standard per il 'trascinamento-riposizionamento di controlli '(almeno di quelli intrinseci di VB, come Label, TextBox, 'ecc.) su un Form a run-time: basta aggiungere il supporto 'per gli altri controlli nella classe. 'Per scaricare il codice completo con un esempio pratico 'per VB5 e VB6, 'http://www.beginend.com/vbasic/files/tipsfiles/move.zip |