Newsgroup: it.comp.lang.visual-basic
Titolo: [?][API] StretchBlt e scale

Seguendo le indicazioni di Roberto Piazzolla ho utilizzato la suddetta API
per effettuare il resize di una picturebox in un'altra picturebox.
E' andato tutto bene finchè (ma non dovrebbe centrare niente) ho specificato
le impostazioni per l'oggetto printer .. in particolare Printer.ScaleMode =
vbMillimeters (ovviamente tale impostazione ho provato a toglierla)
La StretchBlt utilizza la scala di sistema, quindi i Twips (e non i Pixels)
per cui l'ho utilizzata nel seguente modo
x = StretchBlt(
- Handle del pctBox di destinazione
- Coordinate X, Y di destinazione        'Espresse in Twips
- Larghezza, Altezza di destinazione     'in Twips
- Handle del pctBox di origine
- Coordinate X, Y di origine               'Espresse in Twips
- Larghezza, Altezza di origine             'in Twips
- Tipo di rasterizzazione (SRCCOPY)
Le PictureBox hanno le scale impostate a Twips ...
perchè cacchio devo esprimere le coord X e Y di destinazione in Millimetri
(e non in twips come gli altri parametri) ?
spero di essere stato chiaro ..
Saluti

 La StretchBlt utilizza la scala di sistema, quindi i Twips (e non i
Pixels)
CUT
Non vi preoccupate .. sono solo io che sono un po' tardo .. la scala di
sistema è il Pixel non il Twips ...
Saluti

 in Millimetri (e non in twips come gli altri parametri) ?
Le stampanti lavorano con la scala in millimetri per comodità. I Twips (che
è in pratica sono un sistema per spaccare i pixel in sottoparti logiche) e i
Pixel sono identificazione di unità minima che hanno poco significato con
una stampante. Eventualmente bisognerebbe lavorare ragionando in Dots, ma il
risultato rischia di essere molto variabile visto che una stampante riesce a
fare da 150 a 1200 punti in 2 Cm e mezzo.
Sinceramente non ho mai provato a usare la stretchblt direttamente sulla
stampante, ma in teoria penso dovrebbe convenirti passare la scala in mm
prima e riportarla a posto dopo.
Per fare qualche esperimento, usa una picturebox di passaggio prima di
andare sulla stampante: Setta la scala di questo picturebox in millimetri,
poi dimensionalo della stessa dimensione che vuoi ottenere in stampa, poi
risettalo in pixel e usa la StretchBlt tra la tua picturebox iniziale e
questa di passaggio. Così otterrai una versione "a video" di quello che vuoi
in stampa
A questo punto passa di nuovo a millimetri, e usa direttamente la bitblt
partendo da questa Picturebox intermedia per andare in stampa.
Se provi fammi sapere il risultato, che sono curioso.
Ciao
*Roby*

 sistema è il Pixel non il Twips ...
Ah, ecco. :-)
Ciao
*Roby*

 perchè cacchio devo esprimere le coord X e Y di destinazione in Millimetri
I twips sono una sega mentale di chi ha progettato VB, tanto che in 
VB.NET
non esistono più.
Tutte le funzioni grafiche di sistema lavorano in Pixel.
Puoi evitare di dividere sempre i twips per Screen.TwipsPerPixel* settando
lo scalemode della picture in Pixel.
Oppure usi la PictureBox1.PaintPicture che è un wrapper della StretchBlt()
ma lavora in modo "naturale" con le PictureBox di VB.
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

 ma lavora in modo "naturale" con le PictureBox di VB.
Alla faccia del wrapper ... sarà 30-40 volte più lenta !
Comunque grazie a tutti per i consigli ... ripeto .. sono io il demenzius
che ho confuso la scala predefinita di sitema com Twips al posto di Pixels.
Saluti

 partendo da questa Picturebox intermedia per andare in stampa.
Vorrei evitare questa prova  mi sembra un po' contorta :)
ho visto che è possibile passare la picture come device compatibile
direttamente alla funzione StretchBlt per cui stampare direttamente su
oggetto printer ... non ho provato perchè per la stampa mi affido al metodo
PaintPicture che sembra non avere troppe carenze in termini di prestazioni
applicata all'oggetto Printer.
Grazie ancora

 fare da 150 a 1200 punti in 2 Cm e mezzo.
Rilancio con una fotocompositrice da 5240 LPI (e non è il meglio
in circolazione).
Se fai un filo da 1 pixel ci vuole il microscopio per vederlo...
Questo mi ricorda qualcosa. WODKAAAAA !
Che fine hai fatto, la tipografia ti ha lapidato, dopo che
hai seguito i miei consigli ? :-)))
Bye, G.