Newsgroup: it.comp.lang.visual-basic
Titolo: Tracciare Rettangoli con mouse sullo Screen

Due richieste, se possibile:
come è possibile disegnare con il mouse
un rettangolo sullo schermo una volta che 
la propia applicazione è stata minimizzata o resa 
invisibile? Mi spiego meglio: non mi interessa la 
tecnica per il disegno vera e propia (che credo si 
faccia con CreateDC, SelecObject ecc), ma come si 
può cliccare e muoversi senza generare eventi sulle 
finestre che stanno sotto, creando invece
un rettangolo vuoto sullo schermo ed 
al tempo stesso (o quando il rettangolo è stato 
disegnato) far sapere alla propia applicazione 
da dove il mouse era partito e dove è arrivato.
come si fà inoltre a cancellare il rettangolo appena 
disegnatosi prima di disegnare il successivo,
per evitare che ad ogni movimento di pixel di mouse
si generino una miriade di rettangoli uno dietro all'altro?
Sto facendo uno Screen Capture, vi sarei grato per 
qualche consiglio.
NOTA: ho cercato degli ocx su Internet ma ho
      trovato solo un ocx della Lead che  
      implica l'uso di altri 5 o 6 files (scartato)
      ed un ocx della Marble che essendo shareware 
      ha dei Nag e non permette poi di salvare il contenuto 
      del rettangolo 
Andrea                                         

da dove il mouse era partito e dove è arrivato.
La soluzione più semplice è quella di crearti una form vuota che porterai a
tutto schermo, con borderstyle = vbNone.
Ci copierai il DC dello schermo con BitBlt() e poi lavorerai su quello.
Un consiglio, Metti Autoredraw del form a True, una volta copiato il DC,
salvalo come immagine con SavePicture Form1.Image (NON Form1.Picture) e poi
richiamalo con la LoadPicture, in questo modo lo sfondo è fissato e non è
cancellabile (se non con una LoadPicture(""))
Per il problema dei rettangoli o usi delle shapes, per cui poi saprai già
anche la posizione dei vertici o i comandi Line, o meglio le Api MoveToEx()
e Line().
Per le ultime soluzioni, per non disegnare migliaia di rettangoli la
soluzione è un bel CLS prima di ritracciare il rettangolo. Il CLS non
cancella lo sfondo grazie alle operazioni che ho descritto sopra.
Ciao

Grazie Zanna, funziona.
Ora però dopo aver catturato 
- lo Schermo intero,
- la Finestra attiva,
- una Parte dello Schermo tracciando
  un rettangolo con la tecnica da te descritta, 
vorrei aggiungere un ultima funzionalità 
(indubbiamente utile): quella di cattura del
CONTENUTO di una Finestra anche in presenza di 
SCROLLING sia verticale che orizzontale (di
catturatori con scrolling orizzontale per la verità
mi sembra a tuttora di averne visto solo uno, 
neanche SnagIt lo fà).
La cattura del Contenuto che appare sullo schermo 
in quel determinato momento (non oltre lo scrolling,
cioè) non è difficile (già fatto), ma è
 
- l'andare a disegnare un rettangolo (quale è
  l'Api migliore ?) attorno al Contenuto ed 
  all'interno del bordo della Finestra attivata 
  con un click dall'utente, 
- muoverla (credo si usi l'Api ScrollWindowEx) ad 
  un movimento del mouse da parte dell'utente prima 
  verso destra e poi verso il basso (come fà la mia 
  applicazione minimizzata o resa invisibile a sapere 
  che il mouse si sta muovendo non su di essa, ma 
  sullo schermo ?)
- ed infine memorizzarla su una Picturebox (magari 
  memorizzando su di essa ogni nuova singola linea che
  appare dopo aver attivato lo scrolling)
che presenta diverse difficoltà, e comunque richiede ora
di "lavorare" sullo Schermo per davvero, non più su di
una immagine di esso salvata su un Form, anche se ora
non c'è piu bisogno di disegnare il famigerato 
rettangolo con il Mouse (caso tutt'ora IRRISOLTO  :-)  )
ma penso che sarà sufficiente l'Api Rectangle (anche quì
speriamo di trovargli e passargli le coordinate del 
Contenuto della Finestra in questione, in modo esatto).
Consigli, "dritte" o esempi, anche 
per singole parti della programmazione di questa 
"Cattura con Scrolling", sono AMPIAMENTE RICHIESTI.
NB:
questo messaggio sulla "Cattura con scrolling"
verrà postato anche come nuovo Thread più sotto,
con il titolo "CATTURARE una Finestra con Scrolling" 
Andrea
 

Andrea                                         
Grazie Zanna, funziona.
