Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
4 Apr 2007, 17:10
Messaggio
#1
|
|
|
Salve a tutti,
è da un po' che sto giochicchiando con Cocoa e dopo le prime difficoltà (provengo "programmaticamente" da Windows ahimé, anche se il Mac è sempre stato il mio computer personale), ci sto prendendo seriamente gusto. Veniamo subito al sodo ... sto giocando con l'intercettazione degli eventi ... nel caso specifico il click del mouse dentro una NSView. Volevo far si che il punto della NSView dove vado a cliccare, fosse il punto in cui far comparire la classica nuvoletta tipo quando togliamo un elemento dal dock. Bene, vi mostro subito il codice che ho scritto: CODICE - (void)mouseDown:(NSEvent *)theEvent { NSPoint myPoint; myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil]; NSShowAnimationEffect(NSAnimationEffectPoof, myPoint, NSZeroSize, nil, nil, nil); } Il problema sta che il myPoint non viene contestualizzato nella NSView, ma è espresso in coordinate assolute del monitor ... Come faccio a prendere la risoluzione del monitor così da fare una trasformazione di coordinate? Nel frattempo m'era venuta un'altra idea ... con le API di Windows è molto facile "seguire" la posizione del puntatore del mouse ed eventualmente verificare dove vado a cliccare (parlo sempre di coordinate). E' possibile fare sicuramente la stessa cosa anche con Cocoa (se no il mela-shift-4-spazio non funzionerebbe Grazie 1000 anticipatamente a tutti! -------------------- Ci saranno sempre scettici
Ci saranno sempre dubbiosi E ci sarà sempre Apple per dimostrare che si sbagliano! |
|
|
|
|
|
|
|
4 Apr 2007, 17:44
Messaggio
#2
|
|
|
Non so rispondere alla domanda, ma ti suggerisco di guardare il video Session 106 - Taking Advantage of Leopard Features in Cocoa (non so se il link funziona, ma lo trovi facilmente) su ADC on iTunes. Nella sessione viene mostrato come cambieranno le cose con le coordinate a causa della Resolution Independence introdotta in Leopard. Meglio prendere le buone abitudini subito
Ciao Paolo -------------------- |
|
|
|
|
5 Apr 2007, 07:47
Messaggio
#3
|
|
|
La butto lì...
Non puoi farti dare la posizione della tua NSView e calcolare la posizione relativa ad essa? In questo modo non ti dovrebbe servire sapere la risoluzione del monitor. Esempio: posizioneTuaView = {250, 130} puntoClick = {280, 160} puntoClickRispettoAllaView = {280 -250, 160 -130} = {30, 30} Spero di non aver detto una castroneria. ...e naturalmente non è scritta sotto forma di codice. -------------------- |
|
|
|
|
5 Apr 2007, 08:20
Messaggio
#4
|
|
|
La butto lì... Non puoi farti dare la posizione della tua NSView e calcolare la posizione relativa ad essa? In questo modo non ti dovrebbe servire sapere la risoluzione del monitor. Esempio: posizioneTuaView = {250, 130} puntoClick = {280, 160} puntoClickRispettoAllaView = {280 -250, 160 -130} = {30, 30} Spero di non aver detto una castroneria. ...e naturalmente non è scritta sotto forma di codice. Assolutamente, la soluzione più immediata sarebbe proprio quella di conoscere nelle coordinate generali del monitor la posizione dell'origine della mia NSView ... ma come si fa? Ammetto che ieri sera non c'ho giocato affatto ... c'era la Magica che giocava -------------------- Ci saranno sempre scettici
Ci saranno sempre dubbiosi E ci sarà sempre Apple per dimostrare che si sbagliano! |
|
|
|
|
5 Apr 2007, 09:27
Messaggio
#5
|
|
|
CODICE - (void)mouseDown:(NSEvent *)theEvent { NSPoint myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil]; NSShowAnimationEffect(NSAnimationEffectPoof, myPoint, NSZeroSize, nil, nil, nil); } Chi e' self? Ovvero, a quale classe appartiene questo metodo? il metodo [ miavista convertPoint: miopunto fromView: nil ]; traduce le coordinate del punto miopunto dalle coordinate della finestra nelle coordinate di miavista. Se miavista NON è la vista di interesse, non funziona bene. Ho il sospetto che self sia, ad esempio, qualche altro oggetto (che so, la finestra, eccetera). convertPoint: è il metodo da utilizzare ai tuoi scopi. Ogni altra soluzione (finestra, coordinate, eccetera) prospettata nelle risposte, è solo reinventare la ruota. -------------------- |
|
|
|
|
5 Apr 2007, 09:30
Messaggio
#6
|
|
|
Assolutamente, la soluzione più immediata sarebbe proprio quella di conoscere nelle coordinate generali del monitor la posizione dell'origine della mia NSView ... ma come si fa? Ammetto che ieri sera non c'ho giocato affatto ... c'era la Magica che giocava Dalla documentazione Apple: CITAZIONE bounds
- (NSRect)bounds Returns the receiver’s bounds rectangle, which expresses its location and size in its own coordinate system. The bounds rectangle may be rotated; use the boundsRotation method to check this. -------------------- |
|
|
|
|
5 Apr 2007, 18:38
Messaggio
#7
|
|
|
Salve a tutti, è da un po' che sto giochicchiando con Cocoa e dopo le prime difficoltà (provengo "programmaticamente" da Windows ahimé, anche se il Mac è sempre stato il mio computer personale), ci sto prendendo seriamente gusto. Veniamo subito al sodo ... sto giocando con l'intercettazione degli eventi ... nel caso specifico il click del mouse dentro una NSView. Volevo far si che il punto della NSView dove vado a cliccare, fosse il punto in cui far comparire la classica nuvoletta tipo quando togliamo un elemento dal dock. Bene, vi mostro subito il codice che ho scritto: CODICE - (void)mouseDown:(NSEvent *)theEvent { NSPoint myPoint; myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil]; NSShowAnimationEffect(NSAnimationEffectPoof, myPoint, NSZeroSize, nil, nil, nil); } Il problema sta che il myPoint non viene contestualizzato nella NSView, ma è espresso in coordinate assolute del monitor ... Come faccio a prendere la risoluzione del monitor così da fare una trasformazione di coordinate? Secondo quanto credo di aver capito dalla documentazione Apple se fai una cosa come CODICE [[self window] convertBaseToScreen:myPoint]; otteni le coordinate dello schermo, cosa che è richesta da NSShowAnimationEffect() Nel frattempo m'era venuta un'altra idea ... con le API di Windows è molto facile "seguire" la posizione del puntatore del mouse ed eventualmente verificare dove vado a cliccare (parlo sempre di coordinate). E' possibile fare sicuramente la stessa cosa anche con Cocoa (se no il mela-shift-4-spazio non funzionerebbe Grazie 1000 anticipatamente a tutti! Io ho visto che la posizione del mouse in coordinate schermiche la puoi ottenere con CODICE [NSEvent mouseLocation]
-------------------- iMac G4 700Mhz che va a Cacao, Carbone e Acqua
|
|
|
|
|
6 Apr 2007, 08:39
Messaggio
#8
|
|
|
Io ho visto che la posizione del mouse in coordinate schermiche la puoi ottenere con CODICE [NSEvent mouseLocation] Grazie Tom, solo che intercetto l'evento quand'ho a che fare con un'istanza di classe ... che ne so ... metto una NSView su una finestra cui collego una mia custon class nella quale implemento il metodo che mi permette di accedere agli eventi del mouse. Ma in un'area potenzialmente vuota dello schermo? Per il problema delle coordinate grazie a tutti ... effettivamente ho risolto con una CODICE myPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
myPoint = [[self window] convertBaseToScreen:myPoint]; -------------------- Ci saranno sempre scettici
Ci saranno sempre dubbiosi E ci sarà sempre Apple per dimostrare che si sbagliano! |
|
|
|
|
![]() ![]() |
| Titolo discussione | Risposte | Autore discussione | Visite | Ultima azione | |||
|---|---|---|---|---|---|---|---|
![]() |
4 | monegasque | 97 | 12 December 2008 - 21:56 Ultimo messaggio di: sirguich_ |
|||
![]() |
3 | Bezier | 167 | 9 September 2008 - 11:46 Ultimo messaggio di: poweruser |
|||
![]() |
4 | NSLuca | 251 | 4 August 2008 - 14:25 Ultimo messaggio di: NSLuca |
|||
![]() |
11 | marg | 970 | 2 July 2008 - 07:11 Ultimo messaggio di: marg |
|||
![]() |
4 | germinara | 238 | 22 June 2008 - 13:29 Ultimo messaggio di: sirguich_ |
|||
![]() |
2 | sirguich_ | 230 | 9 June 2008 - 22:14 Ultimo messaggio di: sirguich_ |
|||
![]() |
10 | Ale93 | 278 | 1 June 2008 - 22:15 Ultimo messaggio di: Ale93 |
|||
![]() |
11 | Cpu86 | 555 | 23 March 2008 - 10:14 Ultimo messaggio di: Cpu86 |
|||
![]() |
2 | nutsmuggler | 358 | 12 March 2008 - 15:17 Ultimo messaggio di: nutsmuggler |
|||
![]() |
10 | marg | 424 | 25 February 2008 - 21:10 Ultimo messaggio di: marg |
|||
![]() |
4 | Gojca | 242 | 25 February 2008 - 17:37 Ultimo messaggio di: Gojca |
|||
![]() |
11 | Lorenzo | 569 | 17 February 2008 - 20:08 Ultimo messaggio di: Lorenzo |
|||
|
Versione Lo-Fi | Oggi è il: 8 January 2009 - 18:02 |
| IP.Board Skin Developed By Creative Networks | ||