' Rapid-Q by William Yu (c)1999-2000 . ' ================================================================================ ' Upload_il_tuo_script_su_Rapidq.it ' Come_disegno_dei_grafici_sulla_form_ Porre elementi grafici direttamente su un componente QForm è un po' confondente per chi è appena all'inizio del lavora con la programmazione della GUI di Rapid-Q. Sebbene il form ha molti metodi per disegnare le primitive grafiche ( punti, linee, cerchi) direttamente su se stesso, queste sembrano non lavorare correttamente o non del tutto. Questo perchè i metodi grafici dell'oggetto QForm non determinano un aggiornamento dell'immagine del form da sole. Al fine di mostrare qualsiasi primitiva grafica sul form, queste devono essere disegnate dentro l'aggiornamento (refresh) dell'immagine del form. Inoltre, qualsiasi grafico disegnato su un form non-modal deve essere all'interno dell'evento refresh o non riappariranno correttamente se il form viene nascoto e poi rimostrato. Permettere alle istruzioni grafiche di apparire sul form Il componente QForm continee un evento che è attivato ogni volta che l'immagine del form viene aggiornata, o disegnata. Questo evento viene chiamato OnPaint. Colleghiamo le istruzioni grafiche all'evento OnPaint mediante l'assegnazione di una procedura SUB chiamata dall'evento. Ecco un esempio: DECLARE SUB MyDrawSub CREATE MyForm AS QFORM OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub ' all graphic methods for MyForm ' are placed in this SUB END SUB MyDrawSub è una SUB che contiene le procedure grafiche che disegnano direttamente agendo sul componente MyForm. Essa viene assegnata all'evento OnPaint del componente MyForm. Questo tipo di collegamento all'evento assicura che tutte le primitive grafiche eseguite sul form sono sempre mostrate sul form. Disegnare Pixels e Linee L'elemento grafico più piccolo su uno schermo di computer è il pixel. Il componente QForm ha un metodo , chiamato Pset, che permette di impostareil colore di qualsiasi singolo pixel sul form. Ecco un esempio: MyForm.Pset ( 10, 20, &H0000FF ) Esso cambia il pixel messo 10 punti sopra il lato sinistro della area client e 20 punti in basso dal margine superiore dell'area client impostandolo con colore rosso. Per evitare di calcolare e poi disegnare in sequenza una serie di pixel consecutivi sul form, QForm ha un metodo, chiamato Line, che disegna una linea di pixels. Ecco un esempio: MyForm.Line ( 20, 15, 100, 110, &H0000FF ) Esso disegna una linea rossa attraverso il form, iniziando da 20 punti dal lato sinistro del form e 15 punti dal margine superiore dell'area client del form e continuando attraverso il form fino a 100 punti dal lato sinistro del form e 110 punti dal margine superiore del form. Ecco un esempio: DECLARE SUB MyDrawSub CREATE MyForm AS QFORM ClientWidth = 200 ClientHeight = 100 OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub MyForm.Pset ( 10, 10, &H0000FF ) MyForm.Pset ( 10, 20, &H0000FF ) MyForm.Pset ( 20, 30, &H0000FF ) MyForm.Pset ( 20, 40, &H0000FF ) MyForm.Line ( 5, 5, 190, 5, &HFF0000) MyForm.Line ( 100, 90, 190, 30, &HFF0000) END SUB Esso produce la seguente immagine sul desktop: [Pset and Line example] Fare cerchiIl componente QForm ha un metodo, chiamato Circle, che disegna una forma circolare sul form. Invece di definire il centro ed il raggio del cerchio, il metodo QForm.Circle vuole che si definiscano i limiti dell'area in cui disegnare il cerchio. Questo rende più facile essere certi che il cerchio disegnato resti nella apposita area del form. Ecco un esempio: MyForm.Circle ( 1, 1, 200, 100, &HFF0000, &H00FF00 ) Esso disegna un cerchio sul form che è contenuto in una area definita che ha il lato sinistro a 1 punto da lato sinistro del form, il lato superiore ad 1 punto in basso dal lato superiore del form, il lato destro a 200 punti dal lato sinistro del form, e il lato inferiore a 100 punti dal lato superiore del form. Il cerchio ha un bordo di colore blu ( Hex# FF0000 ) e riempito di colore verde ( Hex# 00FF00 ). Ecco un esempio: DECLARE SUB MyDrawSub CREATE MyForm AS QFORM ClientWidth = 200 ClientHeight = 100 OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub MyForm.Circle ( 1, 1, 200, 100, &HFF0000, &H00FF00 ) MyForm.Circle ( 75, 25, 125, 75, &H00000, &HFFFFFF ) END SUB Esso produce questa immagine sul desktop: [Circle example] Rettangoli, vuoti o pieniIl componente QForm ha 2 metodi per disegnare forme rettangolari sul form. Questi 2 metodi sono Rectangle e FillRect. Entrambi i metodi richiedono che una area delimitata sia definita per disegnarci dentro il rettangolo, ed entrambi richiedono un colore da usare per disegnare il rettangolo. La differenza tra i 2 metodi è che Rectangle disegna un rettangolo solo come contorno (perimetro), mentre FillRect disegna un rettangolo pieno del colore specificato. Ecco 2 esempi di codice: MyForm.Rectangle ( 5, 5, 10, 10, &H000000 ) MyForm.FillRect ( 5, 5, 10, 10, &H000000 ) Entrambi disegnano un rettangolo sullo schermo con il lato sinistro a 5 punti da margine sinistro del form e il lato superiore a 5 punti in basso dal lato superiore del form, il lato destro a 10 punti dal margine sinistro del form ed il lato inferiore a 10 punti dal lato superiore del form. Il metodo Rectangle disegna solo una linea nera delimitante l'area rettangolare mentre FillRect disegna un rettangolo nero pieno. Ecoc un esempio: DECLARE SUB MyDrawSub CREATE MyForm AS QFORM ClientWidth = 200 ClientHeight = 100 OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub MyForm.Rectangle ( 10, 10, 190, 90, &H000000 ) MyForm.FillRect ( 75, 25, 125, 75, &H00FF00 ) END SUB Esso produce la seguente immagine sul desktop: [Rectangle example] Colorare dentro le lineeI cerchi ed i quadrati sono carini, ma cosa fare se necessitiamo di altri tipi di forme? O.K., tu hai immaginato come disegnare la forma sul form con forza bruta e molte chiamate Pset e Line, ma tu devi riempire tale forma. Nessun problema. Se puoi disegnare la linea esterna sul form, puoi riempirla con il metodo Paint. Paint inizia dal punto specificato e riempe con il colore precisato, fino a quando non incontra il colore definito come delimitatore. Ecco il codice: MyForm.Paint ( 10, 10, &HFFFFFF, &H000000 ) Esso inizierà a riempire la forma dal punto a 10 punti dal margine sinistro del form e 10 punti dal margine superiore del form e si diffonde a raggiera, riempendo con il colore bianco ( &HFFFFFF ) tutti i pixels fino ad incontrare il margine di pixel di colore nero( &H000000 ). Ecco un esempio: DECLARE SUB MyDrawSub CREATE MyForm AS QFORM ClientWidth = 200 ClientHeight = 100 OnPaint = MyDrawSub ShowModal END CREATE SUB MyDrawSub MyForm.Line ( 100, 10, 190, 90, &H000000 ) MyForm.Line ( 190, 90, 10, 90, &H000000 ) MyForm.Line ( 10, 90, 100, 10, &H000000 ) MyForm.Paint ( 100, 50, &HFFFFFF, &H000000 ) END SUB Esso produce questa immagine sul desktop: [Paint example] ' =============================================================================== ' 2003 Holyguard.net - 2007_Abruzzoweb