Newsgroup: it.comp.appl.access
Titolo: Puntatore mouse tipo (+) Autocad

E' possibile avere un puntator mouse tipo autocad:
linea verticale e orizzontale incrociate.
Come si assegna un puntatore diverso al mouse.
Ho provato con:
 DoCmd.Hourglass  1
 DoCmd.Hourglass 3
 DoCmd.Hourglass 7
 DoCmd.Hourglass 9
   DoCmd.Hourglass 11
  ma ho sempre la clessidra.
  Sto (sicuramente) sbagliando codice!!
By By

 wrote in message 39A93586...@usa.net...

Il codice che hai usato non serve per dare un aspetto diverso al puntatore
del mouse in modo permanente, ma è un codice che funziona in situazioni
transitorie ed è legato ad altre esecuzioni, (come anche la proprietà
MousePointer) posso solo indicarti un Ng molto frequentato (ti serve un po
di inglese) it.comp.appl.access magari li trovi qualche cosa
Ciao e buon lavoro


N.b. Ti sei sbagliato a digitare il sito, poichè quello indicato è
quello in cui stiamo scrivendo.
By By

 Come si assegna un puntatore diverso al mouse.
Con i soli strumenti di access non e' possibile, devi usare qualche API.
Qui sotto ti posto delle rouitine che permettono di farlo.
HAi due possibilita':
1 - usare una icina standard di windows. Nel tuo caso ti consiglio IDC_CROSS. 
2 - creare un tuo puntatore (tuo.cur). in questo caso devi distribuirlo con
l'mdb 
In entrambi casi devi sfruttare l'evento Su mouse spostato del controllo nel
quale vuoi visualizzare un cursore diverso.
A seconda che sfrutti un cursore standard o uno tuo, le due chiamate sono:
1 - MouseCursor (IDC_CROSS)
2 - PointM ("C:\path\tuo.cur")
'*********** Code Start  ************
'Code Courtesy of
'Terry Kreft
'
'Icone standard di windows
Public Const IDC_APPSTARTING = 32650&
Public Const IDC_ARROW = 32512&
Public Const IDC_CROSS = 32515&
Public Const IDC_IBEAM = 32513&
Public Const IDC_ICON = 32641&
Public Const IDC_NO = 32648&
Public Const IDC_SIZE = 32640&
Public Const IDC_SIZEALL = 32646&
Public Const IDC_SIZENESW = 32643&
Public Const IDC_SIZENS = 32645&
Public Const IDC_SIZENWSE = 32642&
Public Const IDC_SIZEWE = 32644&
Public Const IDC_UPARROW = 32516&
Public Const IDC_WAIT = 32514&
Declare Function LoadCursorBynum Lib "user32" Alias "LoadCursorA" _
  (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Declare Function LoadCursorFromFile Lib "user32" Alias _
  "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Declare Function SetCursor Lib "user32" _
  (ByVal hCursor As Long) As Long
Function MouseCursor(CursorType As Long)
  Dim lngRet As Long
  lngRet = LoadCursorBynum(0&, CursorType)
  lngRet = SetCursor(lngRet)
End Function
Function PointM(strPathToCursor As String)
  Dim lngRet As Long
  lngRet = LoadCursorFromFile(strPathToCursor)
  lngRet = SetCursor(lngRet)
End Function
'*********** Code End  ************
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------

 wrote in message 39AC223B...@usa.net...

Scusami tanto:
comp.databases.ms-access
Ciao Ivan

Thank you, proverň.
Inoltre:
1)Il puntatore Cross di window penso sia
quello piccolino a croce, mi serviva quello grande
con le due linee che attraversano tutto lo schermo
(proprio come in Autocad).Sai se esiste qualcosa
di simile?
E' possibile, inoltre, invece di fare riferimento al percorso C: ecc
mettere il mio puntatore al posto di uno di Access (es. il n 7).
Cosě mi sarebbe sufficiente scrivere Screen.MousePointer = 7
ed ho il mio puntatore.
Il puntatore (icona mouse) č un file bmp, gif altro e dove si trova?
(riposterň)
Se so dove si trova dopo posso metterci il mio con lostesso nome?
By By

In merito al codice assegnazione puntatore ho risolto con:
Scree.MousePointer = n
n = 0        (freccia) Impostazione predefinita di Access
n = 1        Freccia
n = 3         I  con due punte sopra e sotto
n = 7         ---  con due punte sinistr. e destra (?--->)
n = 11      Clessidra
Devo ancora risolvere il tipo puntatore.
Access dove tiene i puntatori?
By By

 ed ho il mio puntatore.
Quelli standard, probabilmente sono contenuti in una qualche libreria, quindi
non e' possibile modificarli.


 un controllo; il tutto gestendo l'evento Su mouse spostato.
In effetti a  tale soluzione ci avevo pensato e provato,
solo che ho riscontrato subito un problema:
Le coordinate del mouse, quando passo sopra i controlli
che ho nella form, non li leggo piů, per poi riprenderli
una volta che con il mouse esco dal controllo.
Avevo anche pensato di integrare le nuove coordinate
del controllo con quelle della form, solo che ho molti controlli
su parecchie maschere e quindi il lavoro č lunghissimo e poi
basta che sposto o aggiungo un controllo e devo di nuovo
rifare il codice sull' evento mouse del controllo.
Possibile che non riesco ad avere le coordinate in modo
puro, senza essere disturbate dai controlli che ho sulla form.
Inoltre, proprio per questo fatto, lo stesso puntatore che
dovrebbe spostare le linee, trovandosi proprio sopra l'incrocio
delle due linee, nello spostamento verticale ed orizzontale
scorrendo sopra tali linee riperde di nuovo le coordinate e
quindi non sposta le stesse.
By BY

 puro, senza essere disturbate dai controlli che ho sulla form.
Di sicuro c'e' una API che puo' aiutarti, ma sei proprio sicuro che ne valga la
pena?
Onestamente non riesco a capire quale utilitita' ci sia ad avere un simile
puntatore per una form di Access.
-- 
Federico
-----------------------------------
L'amatriciana con la fontina non e'
l'amatriciana, e' un'altra ricetta.
-----------------------------------

 wrote in message 39AD42F3...@usa.net...

Mi dispiace, ma non ti so aiutare, comunque credo ce ci sei quasi
Ciao, fammi sapere

 puntatore per una form di Access.
Nella form andrò ad inserire poi dei disegni a scala diversa quindi potrò tramite il
puntatore sapere da un disegno grande (che non mi entra a video) qual'è la posizione
rispetto ad un disegno più piccolo (che invece posso vedere tutto).
By By






Non ho capito molto, ma fa lo stesso ;-)
Stamattima avevo avevo un po' di tempo, cosi' ho scritto sta roba.
Incolla tutto il codice seguente nel modulo della form in questione (spero ti
serva solo in una form), poi per ogni controllo della stessa, nella finestra
delle proprieta', all'evento Su mouse spostato, scrivi:
=f_MoveLine()
Aggiungi due linee:
- una vert. con nome lnX (posizione: 0,0)
- una oriz. con nome lnY (posizione: 0,0)
la dimensione non ha importanza.
--------------------------------------------------------
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Declare Function GetCursorPos Lib "User32" (lpPoint As POINTAPI) As
Long
Private Declare Function GetClientRect Lib "User32" (ByVal hWnd As Long, lpRect
As RECT) As Long
Private Declare Sub ClientToScreen Lib "User32" (ByVal hWnd As Long, lpPoint As
POINTAPI)
Private Declare Function GetDC% Lib "User32" (ByVal hw%)
Private Declare Function ReleaseDC% Lib "User32" (ByVal hw%, ByVal hDC%)
Private Declare Function GetDeviceCaps% Lib "Gdi32" (ByVal hDC%, ByVal
iCapability%)
Private Const WU_LOGPIXELSX = 88
Private Const WU_LOGPIXELSY = 90
Private Function f_MoveLine()
    Dim Pt As POINTAPI
    Dim PtCl As POINTAPI
    Dim PtRect As RECT
    GetCursorPos Pt
    GetClientRect Me.hWnd, PtRect
    PtCl.X = PtRect.Left
    PtCl.Y = PtRect.Top
    ClientToScreen Me.hWnd, PtCl
    Me.lnX.height = Me.WindowHeight
    Me.lnX.Left = (Pt.X - PtCl.X) * f_TwipsPerPixelX
    Me.lnY.width = Me.WindowWidth
    Me.lnY.Top = (Pt.Y - PtCl.Y) * f_TwipsPerPixelY
End Function
Private Function f_TwipsPerPixelX()
    Dim lngDC As Long
    Dim lngPixelsPerInchX As Long
    Const nTwipsPerInch = 1440
    lngDC = GetDC(0)
    lngPixelsPerInchX = GetDeviceCaps(lngDC, WU_LOGPIXELSX)
    lngDC = ReleaseDC(0, lngDC)
    f_TwipsPerPixelX = nTwipsPerInch / lngPixelsPerInchX
End Function
Private Function f_TwipsPerPixelY()
    Dim lngDC As Long
    Dim lngPixelsPerInchY As Long
    Const nTwipsPerInch = 1440
    lngDC = GetDC(0)
    lngPixelsPerInchY = GetDeviceCaps(lngDC, WU_LOGPIXELSY)
    lngDC = ReleaseDC(0, lngDC)
    f_TwipsPerPixelY = nTwipsPerInch / lngPixelsPerInchY
End Function
--------------------------------------------------------


 Non ho capito molto, ma fa lo stesso ;-)
Immagina un disegno in pianta di un edificio su
un foglio di carta da 50cm x 50cm.
Su tale foglio io riesco a vedere bene come sono
organizzati i locali solo che se mi metto a guardarlo
tramite un cartone bucato con un foro da 20cm x 27cm
(moniter 14'') devo scorrere sotto il foro il
foglio grande per poter vedere le varie parti.
Quindi quando io sto vedendo una determinata parte
non mi rendo piů conto di dove mi trovo rispetto
al tutto. Cioč (se l'edificio č un rettangolo) sono sopra,
sotto, a destra ecc.
Allora se mi faccio un foglio di solo 5cm x 5cm con lo
stesso disegno ma con proporzioni piu piccole io ho
posso vedere su tale foglio tutto il disegno. Basta
relazionare (tramite un puntatore a croce) la posizione su
quello piccolo con quello grande.
Sul piccolo vedo la posizione rispetto all'edificio.
Sul grande vedo il punto esatto.

(spero ti serva solo in una form)
Perché?
Devo usare molte form
Basta ricopiare il codice su tutte.
O ci sono problemi? ( a parte quello inerente
l'inserimento della funzione su tutti i controlli)
By By

Stavo pensando, in riferimento alla impostazione del
tuo codice (per quanto riguarda l'uso di un'unica funzione),
se era possibile creare lo stesso senza usare riferimenti a librerie
etc..
Siccome per spostare le due linee nell'evento mousespostato
della sezione corpo vado a scrivere il seguente
codice:
Me!LinaVerticale.Left = X
Me!LineaOrizzontale.Top = Y
Considerando che
(sempre che le due linee abbiano posizione 0,0)
per ogni controllo sull'evento Mousespostato
affinchè le coordinate del mouse, poiché sono quelle
relative al controllo e non più quelle del corpo, dovrei
aggiungere la distanza sinistra e superiore di ogni controllo
alle variabili X è Y dell'evento mousespostato del controllo stesso.
In codice
 Me!LinaVerticale.Left = Controllo.Left +   X del controllo (variabile data dall'evento
mousemove)
 Me!LineaOrizzontale.Top = Controllo.Top  + Y del controllo (variabile data dall'evento
mousemove)
Quindi mi serve una funzione pubblica del tipo:
Function MiaFunzione (CC = controllo_di_ogni_evento , XX= la_x_di_ogni_evento, YY=
la_y_di_ogni_evento)
Me!LinaVerticale.Left = CC.Left + XX
Me!LineaOrizzontale.Top = CC.Top + YY
end function
Solo che non so come si creano in pratica le variabili oggetto
e se poi basta inserire la funzione dentro l'evento mousemove
e poi in automatico alla variabile oggetto CC viene assegnato proprio
l'oggetto di quell'evento.
Che ne pensi?
E' possibile?
(posterò per il tipo di funzione)
By By


Chiarissimo, grazie.


 l'inserimento della funzione su tutti i controlli)
Si va bene, ma non e' un bel lavoro. Vedro' cosa posso fare.


 E' possibile?
credo di si.
copia la seguente routine nel modulo della maschera.
sub s_Line (ctl as control , X as single, Y as single)
   Me!LinaVerticale.Left = ctl.Left + X
   Me!LineaOrizzontale.Top = ctl.Top + Y
end sub
per ogni controllo presente nella maschera scrivi:
s_Line me.nomeControllo, X, Y
nell'evento su mouse spostato, ad esempio se il controllo si chiama cmdPippo,
avrai:
Private Sub cmdPippo_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
    s_Line Me.cmdPippo, X, Y
End Sub
per quanto riguarda il corpo, nel solito evento scrivici direttamente
Private Sub Corpo_MouseMove(Button As Integer, Shift As Integer, X As Single, Y
As Single)
   Me!LinaVerticale.Left = X
   Me!LineaOrizzontale.Top =  Y
End Sub
FAmmi sapere
Per quanto riguarda le barre di scorrimento, non credo tu possa intercettarle,
quindi non credo sia possibile creare in access qualcosa di simile alla
funzione Pan dei programmi di grafica.
In altrenativa potresti dividere la form in pagine (oriz e vert) e quando il
puntatore si avvicina al margine della pagina visualizzata ti sposti nella
pagina adiacente. LA soluzione che non mi piace molto (avresti dei problemi sui
margini), ma dacci uno sguardo.


 By By
Ho riguardato il codice, effettivamente ci sono dei problemi con le barre di
scorrimento, nel senso che le coordinate del puntatore sono assolute e non
relative alla nuova posizione della form (quando scorre).
In definitiva lascia perdere, mi spiace.


 In definitiva lascia perdere, mi spiace.
Sigh!!!!
Ognuno ha la sua croce, io pure quella di Autocad
Il puntatore a croce di autocad
vivrà per sempre solo sulla mia tomba.

Proverò il tutto quanto prima
 Thank you
ByBy