Newsgroup: it.comp.lang.visual-basic
Titolo: [BS] Alcune idee --difficile un subject...--

Ciao a tutti.
Ci sono un certo numero di cose che fanno le applicazioni che sarebbe
bello poter includere nelle proprie, ma tante volte che da impazzire
troppo e si lascia stare. Oppure non si trova una soluzione.
Ad esempio, mi vengono in mente alcune cose:
- una barra tipo Office. Come si fa a fare una barra che limita l'area
disponibile alle altre applicazioni? Ne vorrei fare 2, una per il mio
megaapplicativoglobalesupermondiale su cui lavoro da tanto tempo e una
per fare un clone di icq, perche' il programma ufficiale della
Mirabilis mi ha veramente scassato la cippa. Su come realizzare questo
non ho assolutamente idea, mentre grazie a un'escamotage mi sono fatto
un'idea di come funziona il "nascondi automaticamente". Io lo farei
cosi': quando la barra perde il focus, viene mossa di un pixel alla
volta fuori dallo schermo finche' non rimangono solo un paio di pixel,
a significare che la barra e' ancora presente su quel lato dello
schermo. Non so se sia gestito dal sistema operativo il nascondere la
barra, ma direi proprio che funziona in quel modo. Sapete come si fa a
fare la barra? Per nasconderla --ma la mia non sara' nascondibile
=)--, come fareste?
- una feature che mi piace tanto di Winamp, ad esempio, e' che quando
lo avvicini al bordo dello schermo per meno di 10 pixel, "salta" e si
aggancia al bordo/angolo dello schermo. Non e' che ci voglia la scala
a farlo, se uno si accontenta di risultati mediocri, perche' si lavora
sul mousemove, pero' si ha un flicker davvero sgradevole mentre si
trattiene agganciata la finestra all'angolo. Io avrei avuto la
--malata?-- idea di subclassare la finestra principale e di
intervenire *a quel punto* sui wm_mousemove --o quello che sono--. Che
ne dite? Ci sono soluzioni alternative?
- Ho scritto un programma per analizzare fotomicrografie di
laboratorio che, fondamentalmente, ha 2 funzioni. Una delle 2 funzioni
e' quella di disegnare dei cerchietti colorati sulla fotografia in
esame e l'altra funzione e' quella di tracciare linee a mano libera,
un po' come disegnare con una matita ricalcando un disegno su un
foglio di carta semitrasparente (infatti questa funzione serve per
misurare la lunghezza della coda dei pollini germinati, che ottengo
contando i pixel che compongono la linea). Per quanto riguarda i
cerchietti, ho trovato una soluzione elegante che mi permette anche di
cancellarli, mentre per il tracciamento di linee sono nei casini,
perche' il mousemove perde un sacco di punti, a meno di non muovere il
cursore *MOLTO* lentamente. Come faccio ad essere *SICURO* che mi
arrivino le coordinate di tutti i punti toccati dal mouse? Pensavo che
subclassando la finestra principale potrei essere molto piu' sicuro di
ricevere tutti gli eventi mousemove e che, magari, i punti che perdo
siano causati dalla lentezza della visualizzazione della picturebox
che uso. Eventualmente, vi posso incollare qualche riga di codice se
sono stato troppo nebuloso.
- ogni tanto mi capita di aver *davvero* bisogno di qualche variabile
globale, perche' e' davvero necessario avere un posto dove mettere un
po' di dati accessibili da qualsiasi punto dell'applicazione. Una
alternativa potrebbe essere una classe con dentro i dati e qualche
metodo per accedere r/w: c'e' un modo un po' furbo per decidere quando
e' effettivamente il caso di farlo? Fare una classe in VB magari non
e' tanto lungo, pero' non e' neanche banale, credo.
- le assert qualcuno le usa? sono una cosa bella e impossibile tipo
l'ingegneria del software?
Penso di aver detto abbastanza stupidaggini per oggi =)
Fatemi sapere cosa ne pensate...
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-V --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD

 Fatemi sapere cosa ne pensate...
... che usi troppe classi ;-)
engioi.

 che limita l'area disponibile alle altre applicazioni?
Per ora ti rispondo solo alla prima domanda, anzi, ad una parte della
prima domanda.
Devi utilizzare la funzione SHAppBarMessage.
Ciao.

e' tanto lungo, pero' non e' neanche banale, credo.
]zac]

Devi utilizzare la funzione SHAppBarMessage.
E' gia' qualcosa. Me la segno.
Grazie.


end type
Ottimo, davvero ottimo.
Non avevo pensato a dichiarare pubblico un... una... dunque... ok, un
tipo composto con tutte le variabili globali dentro.
Grazie per il consiglio.


... che usi troppe classi ;-)
Troppo poche, vorrai dire: ancora nessuna =)
Pero' prima di avventurarmi in questa branchia malsana della
programmazione voglio essere sicuro che ne valga la pena :)
Saluti e grazie


 E' gia' qualcosa. Me la segno.
Quando leggerai la documentazione vedrai che e' gia' tanto ;-)
Ciao.

Se ti va di giocare ho appena inserito nel mio sito i sorgenti di un programma
che ho scritto nel 99 (e mai terminato realmente; non sono riuscito a capire se
serviva, comunque funzia senza problemi...) che consiste in una barra a
scomparsa (lato sx dello schermo) con dentro un componente tipo 'sfoglia per
cartelle'.
Buon diverimento...
Dimenticavo...
Dal programma si esce con ESC...
Il tasto destro del mouse ti da informazioni sull'elemento selezionato...
F1 ti parla di me :)
--
GbC
http://www.chiappori.net
--

disponibile alle altre applicazioni
Ti invio l'esempio presente in VBJ 30.
Personalmente, come dice il proverbio "1 barra va bene, 2 sono una folla", 3
non se ne parla neanche.
Ciao

arrivino le coordinate di tutti i punti toccati dal mouse?
hookando il mouse, non c'è altra scelta. Se inserisci il tuo programma
nella catena degli hook del mouse, il driver dovrà chiedere al tuo
programma cosa ne pensa dello spostamento del mouse prima di metterlo
effettivamente in atto. Ossia: anche se il programma è lento, il mouse
rallenterà per stargli dietro :)
Gli hook si registrano con SetWindowsHookEx, cosa brutta brutta brutta è
che pare serva una dll (non una specifica... una a caso, fatta da te
appositamente per questo scopo... devo ripetere per la millesima volta
quant'è doloroso fare DLL in VB? :) per agganciare il mouse a livello di
sistema anzichè di uno specifico thread, ma credo che un hook a livello
di thread ti possa bastare... ("questo tipo di hook dovrebbe bastare a
chiunque..." :)
-- 
Posted from 158.43.128.104 by way of 
smtp2.libero.it
 [193.70.192.52] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Quando leggerai la documentazione vedrai che e' gia' tanto ;-)
La cosa mi spaventa =)
Comunque ci guardero' presto.
Nel frattempo, ho ricevuto una classe via mail da un amico qui del
gruppo che sto provando: mi ha causato un mezzo major crash del
sistema, ma sto cercando di capirne il motivo :)
E' gia' un'ottima base di partenza :)


cartelle'.
Lo scarico subito e gli do' un'occhiata.
Casomai, quando avro' fatto il merge di tutte le informazioni che ho
raccolto, daro' i miei sorgenti :) In fondo, sto risparmiando un sacco
di tempo grazie a voi che sarebbe davvero da rabbino non farlo :P


debug).
Capito. Quindi almeno un'occhiatina, a dargliela, non sarebbe male.
Penso che daro' una sfogliata ad Hardcore Visual Basic di nuovo :)
Grazie anche a te.


Non č semplice fare il caffč...
La gestione della barra č piuttosto complicata, ma funziona bene.
Il resto sono stupidate...


La gestione della barra è piuttosto complicata, ma funziona bene.
Bene. Spero di riuscire nell'impresa, anche se i tempi che ho, per 
farlo, sono lunghi a piacere e quindi posso prendermela comoda.
Per ora, grazie.


 > trattiene agganciata la finestra all'angolo.
WinAmp non una una finestra normale, quindi il movimento della finestra
stessa non lo gestisce windows, ma lo gestisce WinAmp con l'evento mousemove
su di una bitmap che fa da caption. Se il pulsante del mouse è premuto,
decide se è il caso di spostare la finestra oppure no.
E qui sta la finezza: la finestra è spostabile solo se la variabile che
contiene la posizione assume un valore che dista dal bordo dello schermo
almeno 10 pixel. In caso contrario, viene aggiornato il valore della
variabile, ma non viene mossa la finestra. Quindi fino ai 10 pixel, lui
aggiorna la variabile ma non muove la finestra dal bordo, oltre sposta la
finestra tutto di un botto di 10 pixel e comincia a gestire lo spostamento
in modo normale.
Nell'evento mouseup, se questa variabile contiene un valore di offset dal
bordo minore dei 10 fatidici pixel, la variabile viene azzerata e tanti
saluti fino al prossimo mousedown.
Se vuoi usare una finestra normale, è più scomodo perchè il movimento della
finestra lo decide Windows e non tu. Invece di sbatterti col subclassing,
perchè non emuli tutto come fa WinAmp?
Ciao
*Roby*

perchè non emuli tutto come fa WinAmp?
Ecco, come faccio ad emulare tutto?


un minimo di speranza che la cosa funzioni... :)
sul sito comune rovi un articolo d un progetto che ti spiega come intercettare lo spostamento della
form... ti giochi con i valori ottenuti, con la grandezza della form e con la grandezza dell'area
del desktop e puoi arrivare alla soluzione...
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

 Se subclasso la finestra principale
In questo caso non ti posso aiutare. Mai subclassato nulla finora.
Ciao
*Roby*

GetCursorPos.
Guardero' anche questa, ma prima provo a limitarmi a gestire l'evento
mousemove del form, che dovrebbe forse essere gia' sufficiente --certo
che, se durante il trascinamento del mouse l'utente passa su un
controllo col piffero che il mousemove del form funziona...--.


sul sito comune rovi un articolo d un progetto che ti spiega come intercettare lo spostamento della
Grazie Moreno: vado --quasi-- subito a vedere :)


controllo col piffero che il mousemove del form funziona...--.
Sě, ma in origine non volevi muovere la form? In tal caso tale evento non č sufficiente, quindi devi
subclassare la form ed intercettare il messaggio WM_MOVE (v. esempio dell'articolo sul subclassing -
SC)


 Sě, ma in origine non volevi muovere la form? In tal caso tale evento non
č sufficiente,
E' sufficiente se usi la GetCursorPos. Ti salvi la posizione sul mousedown e
poi stai in polling sull'api fino a che non ricevi un mouseup. Un bel
doevents nel ciclo di polling, ed il gioco č fatto.
Ciao
*Roby*