' Rapid-Q by William Yu (c)1999-2000 . ' ================================================================================ ' Upload_il_tuo_script_su_Rapidq.it ' Grafica_avanzata Come detto nella precedente sezione 'Grafica_semplice', una primitiva grafica (linea, forma o altro) per essere disegnata direttamente sul form deve essere posta dentro un evento 'refresh' per mostrarla correttamente sul form. Per il codice seguente dovrò usare continuamente l'evento OnPaint. I files grafici presentano molti formati differenti. I formati un po' più usati su cui ci possiamo concentrare e che possiamo trovare nella rete internet sono: GIF, JPEG, PCX, TIFF, PNG, e BMP. Rapid-Q può lavorare direttamente con il formato BMP ( bitmapped ) senza aver bisogno di alcun programma o librerie esterni. Il programma 'paint' di Windows crea immagini bitmapped e permette di usarle facilmente per creare grafici da usare per le tue applicazioni. Mettere una Bitmap sul Form Il componente QForm contiene un metodo, chiamato Draw, che metterà una immagine bitmapped direttamente sul form. Il metodo Draw non può accedere ad un file bitmap direttamente dal disco. La immagine bitmap deve prima essere caricata in un componente quale una QBitmap e un gestore della bitmap viene passato al metodo Draw. Come nel seguente esempio: DECLARE SUB MyDrawSub DIM MyBMP AS QBitmap MyBMP.BMP = 'pic.bmp' CREATE MyForm AS QFORM OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub MyForm.Draw ( 1, 1, MyBMP.BMP ) END SUB Il componente impiegabile, MyBMP, viene creato e localizzato con la immagine bitmap 'pic.bmp'. Questa immagine è inclusa con il codice sorgente di esempio che può essere trovato al sito webRapid-Q. Il metodo MyForm.Draw prenderà l'immagine dal componente MyBMP e la porrà sull'angolo in alto a sinistra della bitmap localizzata al punto 1 point sul form a partire da sinistra e dall'alto. Draw è una copia della immagine senza alcuna distorsione o incorniciamento (clipping). Questo significa che l'immagine può coprire altri grafici o persino causare l'apparizione della barra di scorrimento (scrollbars) se il form è troppo piccolo per la immagine. Il codice suesposto produrrà la seguente immagine sullo schermo: [example of QForm.Draw] Ridimensionare una Bitmap sul Form Il componente QForm contiene un metodo, chiamato StretchDraw, che prenderà una immagine bitmapped, la ridimensiona alle dimensioni necessarie, è poi pone l'immagine ridimensionata sul form. Il metodo DrawStretch non può accedere ad un file bitmap direttamente dal disco. La bitmap deve essere prima caricata in un componente quale QBitmap e il gestore della bitmap viene passato al metodo Draw. Vedere il codice seguente: DECLARE SUB MyDrawSub DIM MyBMP AS QBitmap DIM MyArea AS QRect MyBMP.BMP = 'pic.bmp' MyArea.Left = 1 MyArea.Top = 1 MyArea.Right = 300 Myarea.Bottom = 200 CREATE MyForm AS QFORM OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub MyForm.StretchDraw ( MyArea, MyBMP.BMP ) END SUB Il metodo MyForm.DrawStretch accetta l'area definita da MyArea e il gestore dell'immagine per la bitmap 'pic.bmp' da MyBMP e ridimensiona la bitmap per riempire il form alle dimensioni impostate da MyArea. L'immagine originale 'pic.bmp' è 200 pixels orizzontali per 200 pixels verticali. L'area definita da MyArea 300 pixels orizzontali ( da 1 a 300 ) per 200 pixels verticali (da 1 a 200 ). L'immagine finale che appare sul form è della stessa altezza dell'originale ma è del 50% più ampia a causa del remapping di 200 pixels su 300 pixels. Il codice suesposto produrrà la seguente immagine sullo schermo: [example of QForm.StretchDraw] Porre un pezzo di Bitmap sul Form Sai, che la immagine 'pic.bmp' è abbastanza interessante, ma vorrei porre la colonna di pietre direttamente di fronte alla persona della immagine. Perchè non incorniciamo solo quel pezzo dell'immagine e la mettiamo sul form? Fortunatamente, il componente QForm ha il metodo, chiamato CopyRect che fa giusto questo per noi. CopyRect ritaglierà una sezione rettangolare da una immagine bitmap e la metterà sulla area indicata del nostro form. Il metodo CopyRect non può accedere direttamente ad un file bitmap file dal disco. La bitmap deve essere prima caricata in un componente quale QBitmap ed il nome del componente stesso viene passato al metodo CopyRect. Vedere il codice di esempio mostrato qui: DECLARE SUB MyDrawSub DIM MyBMP AS QBitmap DIM DstArea AS QRect DIM SrcArea AS QRect MyBMP.BMP = 'pic.bmp' DstArea.Left = 1 DstArea.Top = 1 DstArea.Right = 75 DstArea.Bottom = 110 SrcArea.Left = 100 SrcArea.Top = 75 SrcArea.Right = 175 SrcArea.Bottom = 185 CREATE MyForm AS QFORM OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub MyForm.CopyRect ( DstArea, MyBMP, SrcArea ) END SUB I due componenti QRect definiscono la area di destinazione sul form dove la sezione della immagine viene disegnata, e la area sorgente sulla immagine dove la sezione sarà tagliata. Diversamente dagli altri metodi che disegnano bitmap, il nome per il componente bitmap viene passato a CopyRect invece della proprietà .BMP del componente. Il codice suesposto produrrà la seguente immagine sullo schermo: [example of QForm.CopyRect] Se una differente sezione dell'immagine deve essere usata poi basta cambiare le dimensioni della area fonte dell'immagine SrcArea ( fonte di QRect ). Se la sezione della bitmap deve essere mostrata in una altra posizione sul form poi cambiare la area di destinazione DstArea ( QRect di destinazione). ' =============================================================================== ' 2003 Holyguard.net - 2007_Abruzzoweb