Newsgroup: it.comp.lang.vo-clipper
Titolo: Copia porzione di schermo in Harbour

Salve a tutti,
ho difficoltà a trovare un modo, un'api di windows, una qualsiasi funzione
per harbour o fwh che mi faccia copiare o salvare una porzione di schermo
per poi ripristinarla. 
Sapete dirmi qualcosa? Grazie
-------------------------------------------------------
Messaggio inviato da 
http://www.sandlab.org/newsgroup/
Accesso gratuito via web ai Newsgroup

 Sapete dirmi qualcosa?
Come prima cosa dovresti chiederti perché vuoi salvare una porzione di 
schermo. Non è una cosa che normalmente si fa in Windows.
In ogni modo, questa porzione deve far parte di una finestra oppure può 
essere anche esterna alla tua applicazione?
Per questo secondo caso al momento non mi viene in mente niente. Se vuoi 
copiare una finestra nella clipboard puoi utilizzare la funzione WndCopy().
EMG
--
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg
The EMG Music page:         
http://www.emagsoftware.it/emgmusic
 

 copiare una finestra nella clipboard puoi utilizzare la funzione WndCopy().
//------------------------------------
In effetti messa così la cosa non ha senso, oltretutto se non si chiarisce
a cosa possa servire tale operazione neanche consente di individuare
soluzioni alternative.
In realtà  l'operazione di copia dovrebbe servire ad eliminare durante lo
spostamento di un puntatore a croce di un mini CAD le linee che man mano
si generano durante il movimento di quest'ultimo con il mouse. (quello che
succede più o meno con i cursori!)
La soluzione attualmente utilizzata è quella di ridisegnare gli oggetti
con un Paint() della windows, ma è evidente che tale soluzione rallenta
notevolmente le operazioni di disegno man mano che questo aumenta di
dimensioni.
Un'altra soluzione che mi viene in mente in questo momento è quella di
utilizzare una windows trasparente sulla quale disegnare i soli puntatori
ed eseguire un refresh() della sola finestra trasparente man mano che
questi cambiano di posizione!
Potrebbe funzionare? 
Grazie EMG


 succede piů o meno con i cursori!)
Veramente non mi risulta che i cursori lascino tracce quando vengono 
spostati. Se stai utilizzando una gestione custom del cursore hai invece 
pensato all'uso del meccanismo standard magari con un apposito .CUR?


 The EMG Music page:         
http://www.emagsoftware.it/emgmusic
 
Ok EMG la situazione è questa:
hai avuto modo di dare un'occhiata ad un qualsiasi CAD (meglio ancora
AutoCAD che è lo standard)?
Poco male, normalmente questi strumenti nel disegnare le varie entità
grafiche (linea, polilinea, archi ecc.) eseguono le operazioni in maniera
interattiva, ovvero nel caso del cerchio per esempio, il software chiede
di cliccare in un punto dello schermo per definire il centro, dopodichè
mam mano che muovi il puntatore (cursore in modo improprio) viene
rappresentato l'ggetto cerchio.
Bene è proprio in questa fase che ho necessità per ogni spostamento del
mouse di ripristinare l'area di schermo precedente (quella appena prima
del click del  centro) per poi ridisegnare, con le nuove dimensioni del
raggio, incrementate dallo spostamento del mouse (puntatore a croce due
linee perpedicolari sullo schermo che a loro volta devono essere
aggiornate man mano che viene spostato il mouse), il nuovo cerchio.
In questa situazione capisci bene che un repaint (quello che faccio
attualmente) di tutti gli oggetti disegnati comporta un rallentamento
della procedura, ancora più evidente dopo aver implementato la gestione
dei raster con la FreeImage, che fra l'altro funziona benissimo, anche
grazie ai tuoi suggerimenti. 
Spero di averti inquadrato il problema e quindi il perchè della necessità
di salvare l'area per poi rispristinarla. Per intenderci un po quello che
facevano le istruzioni in basic POKE E PEEK, fra l'altro utilizzate anni
fa in una procedura simile e che speravo di trovare ancora oggi in qualche
API di windows!
Grazie Emanuele GAMMONE


 rappresentato l'ggetto cerchio.
Capito. Quello che devi fare non è di salvare porzioni di schermo o creare 
finestre trasparenti bensì, semplicemente, di cancellare il vecchio cerchio 
prima di disegnare il nuovo. Per fare questo potresti utilizzare il disegno 
in XOR oppure il disegno con il colore dello sfondo (non sono un esperto in 
queste tecniche).


 EMG

//------------------------
Esatto! ed è proprio quello che faccio, in questo modo però quando
ripristino con il colore dello sfondo, se interseco altre entità grafiche
(linee, cerchi ecc.) anche quest'ultime vengono in qualche modo modificate
nei punti di intersezione.
Grazie EMG
Saluti Emanuele Gammone
PS. Sul sito poi scaricarti il demo di Pegaso.mur per farti un'idea di
quello che succede con questo approccio.
Netinsoft:     
http://www.netinsoft.it


 nei punti di intersezione.
Certo, per questo ti consigliavo la tecnica dell'XOR che consente di 
annullare il disegno semplicemente rieseguendolo.


 EMG

//---------------
Ok EMG non mi resta altro che provare questa tecnica. Grazie
Saluti Emanuele Gammone
