--
kaloma
Se usi un CommandButton o una Label allora ti basta mettere
nella proprietà SubHyperlinkAddress uno Spazio.
Ciao.
@Alex
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Ciao Giorgio
Azz... che velocità!
Grazie.
--
kaloma
P.S. A proposito: complimenti per il tuo sito. Insieme a quello del
SitoComune, lo considero una risorsa molto ricca.
Per me, però, non è così semplice. Mi devo studiare con calma il listato (e
lo farò...) perché i miei corposi limiti non mi permettono diversamente
(primo fra tutti la non conoscenza della lingua inglese).
Comunque un sentito grazie.
Ciao.
--
kaloma
copia il codice del Link e inseriscilo in un modulo BAS
Poi nell'evento MouseMove del controllo in oggetto inserisci ...
-------------------------
Private Sub Testo0_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
'Cambia il cursore in manina
MouseCursor IDC_HAND
End Sub
------------------------
Per tornare al puntatore standard nell'evento MouseMove della sezione che
contiene il controllo inserisci
-------------------------
Private Sub Corpo_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Screen.MousePointer = 0
End Sub
-----------------------
Ciao Giorgio
Ciao Giorgio, questo metodo che funziona ha perň dei
problemi che generalmente on si notano, io perň in un'applicazione
Grafica usata ho riscontrato che viene impegnata la memoria
e non liberata correttamente.
Fai una prova cosě:
Metti in una form un controllo immagine e su MouseMove del controllo
immagine applica la modifica dell'ICONA.
Apri Task Manager e vedrai che dopo pochi secondi di smanettamento
all'intyerno del controllo la Memoria va al 100%
Questo problema postato su NG americano mi risposero che č un Bugs
conosciuto, non da me almeno....!!!
Sai notizie in merito...?
@Alex.
Ciao @Alex,
no, non ho notizie in merito, forse era un BUG che č stato risolto perchč ho
fatto la prova e l'utilizzo della CPU rimane a 1% e l'utilizzo della memoria
non si sposta di un byte 185000 su un totale di 785900 con un sacco di roba
aperta e Sql Server in funzione.
Ho OfficeXp Sp2 su Win 2000 prof Sp4
Ciao Giorgio
> Ciao @Alex,
>
> no, non ho notizie in merito, forse era un BUG che è stato risolto perchè ho
> fatto la prova e l'utilizzo della CPU rimane a 1% e l'utilizzo della memoria
> non si sposta di un byte 185000 su un totale di 785900 con un sacco di roba
> aperta e Sql Server in funzione.
>
> Ho OfficeXp Sp2 su Win 2000 prof Sp4
>
> Ciao Giorgio
La cosa è nata e discussa con Lebans, se provi il Demo
Magnifie da lui realizzato e applichi la modifica del Cursore
al suo Demo si verifica l'anomalia in questione.
Anche lui nelle varie spiegazioni al problema ha supportato
l'ipotesi di un Bugs nella sovrapposizione delle cose.
Io ho la stessa configurazione da te indicata, e ho avuto
questi problemi con ARCHIFOTO realizzato qualche tempo fà.
Non ho trovato soluzione se non quella di eliminare la routine
e sftuttare la proprietà SubHyperlinkAddress= " "
con la quale non c'è nessun problema.
Ciao.
Bo!
ho scaricato l'esempio Magnify da
http://www.lebans.com/DownloadFiles/MagnifyVer2.zip
nell'evento MouseMove del corpo maschera ho messo
------------
Private Sub Detail_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
'Cambia il cursore in manina
MouseCursor IDC_HAND
End Sub
-----------
ma la memoria e l'utilizzo della CPU rimane ferma.
Forse l'esempio non è questo o forse devo mettere il cambio del cursore in
un'altro posto ?
Ciao Giorgio
No l'esempio è quello ed è la prova fatta da me
ho fatto anche un test su A97 e piattaforma NT
stesso risultato.....!!!!
Non sò che dire.
Nel mio caso addirittura s'impalla il PC, aspetto qualche
secondo e chiudo tutto...!
Vabbè che devo dire.
Ciao
--
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------
> No l'esempio è quello ed è la prova fatta da me
> ho fatto anche un test su A97 e piattaforma NT
> stesso risultato.....!!!!
> Non sò che dire.
> Nel mio caso addirittura s'impalla il PC, aspetto qualche
> secondo e chiudo tutto...!
> Vabbè che devo dire.
>
Ciao,
E' noto che Access97 impegna il 100% della CPU anche quando non si fa
niente
-------------
ACC: Microsoft Access Shows 100% CPU Utilization During Idle Time
http://support.microsoft.com/default.aspx?scid=kb;en-us;160819&Product=acc97
-------------
e forse non gestisce bene la memoria.
Quello che non ho capito è se a te capita anche con AccessXp.
Ciao Giorgio
> No l'esempio č quello ed č la prova fatta da me
> ho fatto anche un test su A97 e piattaforma NT
> stesso risultato.....!!!!
> Non sņ che dire.
> Nel mio caso addirittura s'impalla il PC, aspetto qualche
> secondo e chiudo tutto...!
> Vabbč che devo dire.
Mhmm ... gatta ci cova: il fatto che A97 dia un problema del genere non
significa che permanga con le versioni successive.
Access '97 combina diverse biricchinate di gestione della memoria che non ho
riscontrato con la versione XP.
Pixel
Certamente, la cosa è risaputa, ma come ti accennavo il paragone
l'ho fatto con entrambe le versioni, per questo non mi torna molto.
Soprattutto perchè a te non dà il problema, ma quello che è anomalo
è che a suo tempo fu proprio Lebans a suggerirmi di eliminare la
chiamata SendMessage per l'Icona.
E fatto come mi suggerì nessun problema.
Non saprei cos'altro aggiungere.
Ho però notato una cosa:
Magnifie aperto normalmente con Sfondo Access Forms ecc...
non dà problemi.
Prova a creare una Form Con uncontrollo Immagine e carica una
BMP(o altro) ad alta risoluzione.
Quindi gioca con il Mouse sopra l'immagine, nella Form Magnifie
si riproduce la sezione.
Quello che noto io è:
1)Visualizzazione a SCATTI ovviamente dovuta alla saturazione
della Memoria(100%)
2)Se muovo velocemente il Mouse insistendo sull'immagine ad un certo
punto mi va in loop e per 5÷10secondi perdo il controllo.
Ho 512Mb di Ram con un 766Mhz W2K(sp4) OfficeXP (sp2) e tutti gli
aggiornamenti esistenti.
Come dicevo tutti questi problemi in effetti non sussistono se non vado su
un'immagine(non ho provato se influenza la risoluzione)
Ciao.
@Alex.
Se rileggi i post ho testato il tutto sia su W2K+O_XP
che WNT+O_97 e il problema persiste.
Forse con il testo che ho spiegato a Giorgio ti può essere
più chiaro la Variabile in ballo.
Ciao.
> Certamente, la cosa è risaputa, ma come ti accennavo il paragone
> l'ho fatto con entrambe le versioni, per questo non mi torna molto.
> Soprattutto perchè a te non dà il problema, ma quello che è anomalo
> è che a suo tempo fu proprio Lebans a suggerirmi di eliminare la
> chiamata SendMessage per l'Icona.
SendMessage ?
la Api usata dall'esempio è
-------------
Declare Function SetCursor Lib "user32" _
(ByVal hCursor As Long) As Long
------------
[CUT]
>
> Prova a creare una Form Con uncontrollo Immagine e carica una
> BMP(o altro) ad alta risoluzione.
> Quindi gioca con il Mouse sopra l'immagine, nella Form Magnifie
> si riproduce la sezione.
fatto, ho caricato l'immagine Castello.jpg e ho messo la manina, ho aperto
Magnify anch'esso con manina, la memoria occupata è 156Mb la CPU 2%.
> Quello che noto io è:
> 1)Visualizzazione a SCATTI ovviamente dovuta alla saturazione
> della Memoria(100%)
> 2)Se muovo velocemente il Mouse insistendo sull'immagine ad un certo
> punto mi va in loop e per 5÷10secondi perdo il controllo.
a me fila tutto liscio.
>
> Ho 512Mb di Ram con un 766Mhz W2K(sp4) OfficeXP (sp2) e tutti gli
> aggiornamenti esistenti.
io ho 767 Mb PIV 2.8 Ghz W2K(sp4) OfficeXP (sp2)
> Come dicevo tutti questi problemi in effetti non sussistono se non vado su
> un'immagine(non ho provato se influenza la risoluzione)
non è che stiamo usando due diversi metodi per impostare il cursore ?
Ciao Giorgio
> non č che stiamo usando due diversi metodi per impostare il cursore ?
>
> Ciao Giorgio
No, ho detto una cavolata....!
lngRet = LoadCursorFromFile(strPathToCursor)
lngRet = SetCursor(lngRet)
Computer a parte, il tuo decisamente piů aggiornato e potente
non vedo altre differenze e sinceramente non credo sia quě il
problema.... elaboro con Photoshop tranquillamente immagini HR
da 30Mb(bmp) quindi se avessi problemi di questo tipo mi accorgerei.
Ammutolito.
Non aggiungo altro se non il ringraziamento per il tempo dedicatomi.
Ciao Giorgio.
@Alex.
aspetta !!, forse è qui la differenza, per mettere la manina non è
necessario leggere un file , viene utilizzato quello predefinito di Windows.
----------------
lngRet = LoadCursorBynum(0&, CursorType)
lngRet = SetCursor(lngRet)
----------------
in questo modo non creo nessun cursore perchè è già definito in memoria.
Se la tua routine continua a leggere il file e a creare un nuovo handle per
il cursore ti credo che prima o poi va in Crash, ad ogni step del mouse
carichi in memoria un nuovo cursore e un nuovo handle !! in questo modo
anche a me continua ad aumentare la memoria occupata.
Prova a fare così: nel form load carichi in memoria il cursore e salvi il
suo Handle in una variabile, nell'evento Mouse_Move lo setti passando
l'handle salvato in precedenza SetCursor(TuoHandleCursore) . Quando chiudi
il form o quando devi cambiare cursore ricordati di liberare la memoria con
DestroyCursor.
anche se non ne hai bisogno ti posto il codice con cui mi funziona
Ciao Giorgio
--------------------------------
Option Compare Database
Option Explicit
Private Declare Function LoadCursorFromFile Lib "user32" Alias _
"LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Declare Function SetCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Private Declare Function DestroyCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Dim MioCur As Long ' Handle cursore
Private Sub Form_Load()
'Carico il cursore
MioCur = LoadCursorFromFile("C:\Winnt\Cursors\harrow.cur")
End Sub
Private Sub Immagine0_MouseMove(Button As Integer, Shift As Integer, x As
Single, Y As Single)
SetCursor MioCur
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Distruggo il cursore
DestroyCursor MioCur
End Sub
----------------------------------
[CUT]
> aspetta !!, forse è qui la differenza, per mettere la manina non è
> necessario leggere un file , viene utilizzato quello predefinito di Windows.
> ----------------
> lngRet = LoadCursorBynum(0&, CursorType)
> lngRet = SetCursor(lngRet)
> ----------------
> in questo modo non creo nessun cursore perchè è già definito in memoria.
>
> Se la tua routine continua a leggere il file e a creare un nuovo handle per
> il cursore ti credo che prima o poi va in Crash, ad ogni step del mouse
> carichi in memoria un nuovo cursore e un nuovo handle !! in questo modo
> anche a me continua ad aumentare la memoria occupata.
>
> Prova a fare così: nel form load carichi in memoria il cursore e salvi il
> suo Handle in una variabile, nell'evento Mouse_Move lo setti passando
> l'handle salvato in precedenza SetCursor(TuoHandleCursore) . Quando chiudi
> il form o quando devi cambiare cursore ricordati di liberare la memoria con
> DestroyCursor.
>
> anche se non ne hai bisogno ti posto il codice con cui mi funziona
> Ciao Giorgio
[CUT]
He....!Si ha sempre bisogno tu tutto....a volte
Allora:
In realtà non uso la Manina ed è per questo che
necessito il Load da File, la tua osservazione però
nonfà una piega, e pensandoci potrebbe realmente essere
il motivo del guaio....!
Faccio una prova come mi hai indicato, mi sembra un'ottima
intuizione, non mi piacciono molto le variabili Public
per queste cose, ma eventualmente uso una STATIC nella
Function l'effetto è il medesimo...!
Ti faccio sapere in serata sicuramente.
quindi a livello di modulo della maschera metti
------------------
Dim MyCur As Long ' Handle cursore
Private Sub Immagine0_MouseMove(Button As Integer, Shift As Integer, x As
Single, Y As Single)
MyCur = PointM("C:\Winnt\Cursors\harrow.cur", MyCur)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Distruggo il cursore
DestroyCursor (MyCur)
End Sub
----------------------------
In questo modo la funzione pubblica è valida per più maschere aperte
simultaneamente
Ciao Giorgio
Senza il salvataggio del handle la CPU è impallata al 100% la
memoria sembra OK ma mi sospende un sacco di processi tra
i quali ovviamente l'aggiornamento Video.
Con la memorizzazione del hendle il carico della CPU si stabilizza
al 50% circa.La cosa positiva è che non si blocca più l'aggiornamento
Video.
Ovviamente continuando a scorrere il Cursore all'interno dell'Immagine.
Anche se non risolto del tutto il mio dubbio, mi pare che a livello intutivo
sia decisamente un
ottimo concetto.
Grazie.
non è una questione di intuito, è lo stesso concetto di quando chiedi della
memoria al sistema operativo *GlobalAlloc* o quando carichi un'icona, queste
vengono memorizzate da qualche parte e quando non servono più bisogna
liberare lo spazio, VBA non può farlo perchè non gli appartengono.
Purtroppo VB e VBA ci hanno abituato a non tener conto di queste situazioni,
chi programma in C sa benissimo che se non libera le risorse o se continua
ad accumulare oggetti in memoria prima o poi il suo programma va in crash e
quando noi usiamo le API con VBA dobbiamo entrare nello stesso ordine di
idee.
>Grazie.
Prego ;-)
Ciao Giorgio
In questo caso non liberiamo nulla, evitiamo di continuare a perdere tempo
a Ricaricare, cosa che si rende inutile poichè allochiamo in Memoria
il valore dell'Hendle.
In ogni caso è solo una puntualizzazione concordo pienamente con i concetti.
> Purtroppo VB e VBA ci hanno abituato a non tener conto di queste
situazioni,
> chi programma in C sa benissimo che se non libera le risorse o se continua
> ad accumulare oggetti in memoria prima o poi il suo programma va in crash
e
> quando noi usiamo le API con VBA dobbiamo entrare nello stesso ordine di
> idee.
Vero in effetti VB/A ci abituano male o meglio noi ci permettiamo il lusso
di non considerare questi impostanti dettagli, ma ovviamente lo strato SW
al quale accedi con le API esula da VB/A, ed è questo che lo rende
potente.
Beh non per nulla i vari ReleaseDC/ReleaseCapture/ReleaseMutex/DeleteDC
ecc..... sono da usare.....! ;-)
Ciao Giorgio bel 3D di ottimo livello tecnico, anche se forse con Access
potrebbe sembrare OT.
Io sono un pò dispiaciuto che su questi NG non si affrontano anche questi
argomenti e spesso sono costretto a spostarmi su NG(USA) con i quali
le difficoltà della lingua spesso non mi rendono la vita semplice...!
Ciao.
@Alex.
magari fosse solo l'handle, un cursore non animato occupa 766 Byte, in 4 o 5
centimetri di spostamento del mouse carichi il cursore in memoria almeno un
centinaio di volte occupando 100 aree da 766 Byte che sono puntate da 100
Handle che occupano altri 4 Byte l'uno, in questo modo si fa presto a
saturare la memoria muovendo il mouse.
> Ciao Giorgio bel 3D di ottimo livello tecnico, anche se forse con Access
> potrebbe sembrare OT.
be non ci ha sgridato nessuno :-)
> Io sono un pò dispiaciuto che su questi NG non si affrontano anche questi
> argomenti e spesso sono costretto a spostarmi su NG(USA) con i quali
> le difficoltà della lingua spesso non mi rendono la vita semplice...!
e tu prova a postarle anche qui, le API le usi in Access. :-)
> Ciao.
> @Alex.
Ciao Giorgio
Perchè consideri che non venga liberata la mamoria con il caricamento del
successivo...??
Concordo che il primo caricamento possa invadere il necessario(766Byte)
ma il 2° anche con il metodo precedente dovrebbe(DEVE) liberare la
precedente
memoria sovrascrivendo il contenuto del nuovo caricamento.
La locazione di memoria impegnata dal Cursore è sempre quella e
l'ottimizzazione
fà si che se non indicizzi un Registro(a livello di Linguaggio Macchina e
quindi
allarghi l'area di memoria fisica) quindi una variabile indicizzata per la
programmazione a basso livello, viene
sovrascritta.(se così non fosse inorridirei allochiamo memoria come in un
registro FILO senza
avergli detto nulla...?)
Questo in oltre è dimostrato dal fatto che se attendo qualche secondo tutto
torna
OK le risorse della CPU a Zero
Come ipotizzi tu chi resetterebbe quanto impegnato.....visto che il mio
Mouse è
ancora li fermo....??
Quello che secondo me avviene è il riempimento del registro istruzioni
che passando per IDE da priorità ad aggiornare i processi principali
e non quello Video.
> e tu prova a postarle anche qui, le API le usi in Access. :-)
Qualche tempo fà(un paio d'anni) ho postato qualche mail sull'argometo
ma visti i partecipanti(NN) ho deviato e per evitare X_POST inutili
ora do per scontato spostarmi.
In effetti entrambe le volte che ho avuto bisogno mi hai dato validi
suggerimenti.
Riprendeò a farlo.
> Qualche tempo fà(un paio d'anni) ho postato qualche mail sull'argometo
> ma visti i partecipanti(NN) ho deviato e per evitare X_POST inutili
> ora do per scontato spostarmi.
> In effetti entrambe le volte che ho avuto bisogno mi hai dato validi
> suggerimenti.
> Riprendeò a farlo.
E vorrei vedere Alessandro :-)
Su ng. come questo si dibatte di sviluppo di Database, annessi e connessi
... direi che può bastare.
Di tanto ho seguito comp-databases-ms-access: francamente di API si tratta
estremamente poco pure lì ...
Pixel
Si in effetti ho premesso che potrebbe essere OT(parzialmente)
ma chi programma a livelli avanzati non puň non usare API
anche con Access, e le problematiche dell'utilizzo delle API
con Access aumentano, e se proponi domande su NG(USA)
dedicati alle API non specificando che usi ACCESS spesso
non risolvi, ma spesso specificandolo vieni SNOBBATO.
Vabbč....!
Ciao.
A parte il fatto che esistono ng. italianissimi in cui si dibatte in maniera
avanzata sull'API di win...
E comunque, insisto, le problematiche annesse e connesse all'API consentono
*d'arricchire* le applicazioni basate su Access ma non sono fondamentali.
Soprattutto considerando che le pochissime davvero utili sono a disposizione
di tutti sul web da anni (commondialog, folders, etc.)
Pixel
Quali....?
Per il resto ritengo l'argomento attinente ad Access anche se non
implicito nell'uso di Database, ma dato che Access raggruppa in se
sia un Database che VBA non è assurdo esporre queste problematiche.
E' assurdo non ritenerle compatibili, poi chi è interessato partecipa
chi no....salta, in fondo no si parla di AUTOMOBILI....!!!
> > A parte il fatto che esistono ng. italianissimi in cui si dibatte in
> maniera
> > avanzata sull'API di win...
> Quali....?
Per esempio it.comp.lang.visual-basic
> Per il resto ritengo l'argomento attinente ad Access anche se non
> implicito nell'uso di Database, ma dato che Access raggruppa in se
> sia un Database che VBA non è assurdo esporre queste problematiche.
> E' assurdo non ritenerle compatibili, poi chi è interessato partecipa
> chi no....salta, in fondo no si parla di AUTOMOBILI....!!!
Certo che non sono incompatibili: lo sarebbero se non fosse possibile
invocarle da Access.
Tuttavia hai fatto una tirata sul discorso "che da queste parti è inutile
postare richieste sull'API di win .. etc." un pochino fuori luogo dato il
tipo di prodotto di cui si dibatte in quest'area.
Pixel
assolutamente no, in questo modo potrei caricare solo un cursore alla
volta.
> La locazione di memoria impegnata dal Cursore è sempre quella e
> l'ottimizzazione
> fà si che se non indicizzi un Registro(a livello di Linguaggio Macchina e
> quindi
> allarghi l'area di memoria fisica) quindi una variabile indicizzata per la
> programmazione a basso livello, viene
> sovrascritta.
L'ottimizzazione di chi? VBA non c'entra nulla nel caricamento del cursore
>(se così non fosse inorridirei allochiamo memoria come in un
> registro FILO senza
> avergli detto nulla...?)
se non la liberi si, e infatti Access ti andava in crash.
C'è di bello che le aree di memoria impegnate vengono associate al processo
in esecuzione (Access) e alla chiusura di esso vengono liberate, ma finchè
l'applicazione (Access) rimane aperta devi pensre tu a liberarle o perlomeno
a non accumularle
> Questo in oltre è dimostrato dal fatto che se attendo qualche secondo
tutto
> torna
> OK le risorse della CPU a Zero
> Come ipotizzi tu chi resetterebbe quanto impegnato.....visto che il mio
> Mouse è
> ancora li fermo....??
la CPU ti torna a 0 perchè non c'è attività ma la memoria non si abbassa di
sicuro.
> Quello che secondo me avviene è il riempimento del registro istruzioni
> che passando per IDE da priorità ad aggiornare i processi principali
> e non quello Video.
>
[CUT]
non devi confondere la variabile VBA in cui memorizzi l'handle che ti viene
restituido da una funzione API con i meccanismi interni di windows, se
funzionasse come dici tu posso solo caricare un cursore alla volta invece ne
posso caricare quanti ne voglio (memoria permettendo)
Prova ques'esempio, carico due cursori e a seconda della posizione x
visualizzo uno o l'altro.
Il tutto va messo in un modulo di classe di una maschera un cui inserirai un
controllo immagine di 20 cm di larghezza.
Ciao Giorgio
----------------------------------
Option Compare Database
Option Explicit
Private Declare Function LoadCursorFromFile Lib "user32" Alias _
"LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Declare Function SetCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Private Declare Function DestroyCursor Lib "user32" _
(ByVal hCursor As Long) As Long
Dim MyCur1 As Long 'Primo cursore
Dim MyCur2 As Long 'Secondo cursore
Private Sub Form_Load()
MyCur1 = LoadCursorFromFile("C:\Winnt\Cursors\harrow.cur")
MyCur2 = LoadCursorFromFile("C:\Winnt\Cursors\hcross.cur")
End Sub
Private Sub Immagine0_MouseMove(Button As Integer, Shift As Integer, x As
Single, Y As Single)
If x < 5000 Then
SetCursor MyCur1
Else
SetCursor MyCur2
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
DestroyCursor (MyCur1)
DestroyCursor (MyCur2)
End Sub
--------------------------------------
BOOL DestroyCursor(HCURSOR hCursor);
The DestroyCursor function destroys a cursor and frees any memory the cursor
occupied. Do not use this function to destroy a shared cursor.
-------------------
che senso avrebbe indicare hCursor se il numero di cursori che si può
caricare è uno solo ?
Ciao Giorgio
Quanto hai detto è corretto, ma da per scontata l'indicizzazione
dei cursori, o meglio l'indicizzazione della locazione di memoria
nella quale è salvato il valore a 32Bit relativo all'indirizzo di memoria
puntata, ti assicuro che è unico.
In questo caso non indicizzo nulla associo all'area CURSORE corrente
il mio Cursore.
La funzione che hai citato DestroyCursor libera la mamoria solo
dopo averla impegnata con CreateCursor, anzi è assolutamente
tassativo non eliminare altri cursori caricati con LoadCursor.
L'area di memoria del CurrentCursor non è indicizzabile solo gli Handle
possono essere associati ad una struttura indicizzata tant'è che
tu passi proprio l'handle di un'ipotetica struttura indicizzata
che possono anche essere 2 Variabili....!
SetCursor prima di impostare il nuovo Cursore con l'Handle
passato salva nello Stack il vecchio Handle e lo ritorna come
valore finita l'operazione, non è possibile che vengano salvati
continuamente Handle in qualche posto, quando lo fai già
tu se memorizzi 2 Cursori.
L'ottimizzazione non è nè quella di VB(che non centra proprio ovviamente)
ma quella dell'utilizzo della memoria, che è a livello ancora più basso
delle
API, per le quali è trasparente anche la gestione Memoria, in quanto
la maggior parte delle operazioni vengono eseguite in una Virtual Menory.
LoadCursorFromFile carica un cursore in memoria, se lo esegui 10 volte viene
alloccata una parte di memoria per ogni singolo cursore.
Questo esempio carica N cursori, quando non č piů possibile caricarli stampa
il numero di di cicli eseguiti e Access comincia a fare cose strane
----------
Sub Prova()
Dim i As Long
For i = 1 To 1000000
If LoadCursorFromFile("C:\Winnt\Cursors\harrow.cur") = 0 Then
Debug.Print i
Exit For
End If
Next
End Sub
-----------
come vedi non memorizzo neanche l'handle del cursore.
Se non ti ho convinto cosě getto la spugna :(
Ciao Giorgio
-----------
Sub Prova()
Dim i As Long
Dim MyCur As Long
For i = 1 To 1000000
MyCur = LoadCursorFromFile("C:\Winnt\Cursors\harrow.cur")
If MyCur = 0 Then
Debug.Print i
Exit For
End If
DestroyCursor MyCur
Next
End Sub
----------
Ciao Giorgio