Rapid-Q Documentation by William Yu (c)1999-2000 | Appendix A: QCANVAS

# QCANVAS Component

  QCanvas is an empty image for painting on. Instead of loading your images, you must draw them on the QCanvas.
  QCanvas Properties

  Field | Type | R/W | Default | Support

  Align | INTEGER | RW | alNone | W
  | Align determines how the control aligns within its parent control.
  ClientHeight | INTEGER | RW |  | W
  ClientWidth | INTEGER | RW |  | W
  Color | INTEGER | RW |  | WXG
  CopyMode | INTEGER | RW | cmBlackness | W
  Cursor | INTEGER | RW | crDefault | W
  Enabled | INTEGER | RW | True | WXG
  Font | QFONT | W |  | W
  Height | INTEGER | RW |  | WXG
  Hint | STRING | RW |  | W
  Left | INTEGER | RW | 0 | WXG
  Parent | QFORM/QPANEL/QTABCONTROL | W |  | WXG
  Pixel | 2D ARRAY of INTEGER | RW |  | WXG
  PopupMenu | QPOPUPMENU | W |  | W
  ShowHint | INTEGER | RW | False | W
  Tag | INTEGER | RW |  | WXG
  Top | INTEGER | RW | 0 | WXG
  Width | INTEGER | RW |  | WXG
  Visible | INTEGER | RW | True | WXG

  QCanvas Methods

  Method | Type | Description | Params | Support

  Circle | SUB (x1%, y1%, x2%, y2%, c%, fill%) | Draw & Fill Circle | 6 | WXG
  CopyRect | SUB (D, Image, S) | D and S are QRECTs, Image can be a QImage, QCanvas, or QBitmap | 3 | W
  | Example (copies QIMAGE to canvas at 10,10):

  > DIM Destination AS QRECT
  > DIM Source AS QRECT
  > DIM Image AS QIMAGE
  > Image.BMP = "whatever.bmp"
  > SUB CanvasPaint (Sender AS QCANVAS)
  > WITH Destination
  > .Top = 10
  > .Left = 10
  > .Right = .Left+Image.Width
  > .Bottom = .Top+Image.Height
  > END WITH
  > WITH Source
  > .Top = 0
  > .Left = 0
  > .Right = Image.Width
  > .Bottom = Image.Height
  > END WITH
  > Sender.CopyRect(Destination, Image, Source)
  > END SUB
  > DIM Canvas AS QCANVAS
  > Canvas.OnPaint = CanvasPaint

  Draw | SUB (x%, y%, BMP) | Draw Bitmap on Canvas | 3 | WG
  | Details: BMP can be any BMP property from QBitmap, QImage, QImageList, etc. any component with a BMP property is fine. Examples:

  > DIM Image1 AS QIMAGE
  > Image1.BMP = "whatever.bmp"
  > DIM Image2 AS QBITMAP
  > Image2.BMP = "whatever.bmp"
  > SUB CanvasPaint (Sender AS QCANVAS)
  > Sender.Draw(0, 0, Image1.BMP)
  > Sender.Draw(50, 50, Image2.BMP)
  > END SUB
  > DIM Canvas AS QCANVAS
  > Canvas.OnPaint = CanvasPaint

  FillRect | SUB (x1%, y1%, x2%, y2%, c%) | Draws & Fills a rectangle | 5 | WXG
  Line | SUB (x1%, y1%, x2%, y2%, c%) | Draws a line | 5 | WXG
  Paint | SUB (x%, y%, c%, borderc%) | Fill Region | 4 | WXG
  Pset | SUB (x%, y%, c%) | Pixel plot | 3 | WXG
  Rectangle | SUB (x1%, y1%, x2%, y2%, c%) | Draws a rectangle | 5 | WXG
  Repaint | SUB | Force repainting | 0 | W
  Rotate | SUB (xOrigin%, yOrigin%, Angle%) | Rotates entire canvas at specified origin | 3 | W
  RoundRect | SUB (x1%, y1%, x2%, y2%, x3%, y3%, c%) | Draws & Fills a rounded rectangle | 7 | W
  StretchDraw | SUB (Rect AS QRECT, BMP) | Draw image and stretch to fit inside Rect | 2 | W
  TextHeight | FUNCTION (Text$) AS WORD | Returns the height, in pixels, of Text$ string | 1 | W
  TextWidth | FUNCTION (Text$) AS WORD | Returns the width, in pixels, of Text$ string | 1 | W
  TextRect | SUB (Rect AS QRECT, x%, y%, S$, fc%, bc%) | Write text, and clip within region Rect | 6 | W
  TextOut | SUB (x%, y%, S$, fc%, bc%) | Writes text to image | 5 | WXG

  QCanvas Events

  Event | Type | Occurs when... | Params | Support

  OnClick | VOID | User clicked on canvas | 0 | WXG
  OnDblClick | VOID | User double clicked on canvas | 0 | W
  OnMouseDown | SUB (Button%, X%, Y%, Shift%) | Mouse button held down | 4 | WXG
  OnMouseMove | SUB (X%, Y%, Shift%) | Mouse moves | 3 | WXG
  OnMouseUp | SUB (Button%, X%, Y%, Shift%) | Mouse button is released | 4 | WXG
  OnPaint | VOID | Receives WM_PAINT message | 0 | WXG

  QCanvas Examples

      '  Pixel by pixel credit scroller for Rapid-Q by William Yu

      DIM Canvas AS QCanvas
      DIM Form AS QForm
      DIM Timer1 AS QTimer
      DIM Font AS QFont
      DIM Y AS INTEGER
          Y = -20

      SUB Resize
        Canvas.Height = Form.ClientHeight
        Canvas.Width = Form.ClientWidth
      END SUB

      SUB Paint
        Canvas.Textout (65,Y-30,"Beware the power of Rapid-Q!", &H00FF00, 0)
        Canvas.Textout (30,Y,"Credit Scroller written in Rapid-Q by William Yu", &HFFFFFF, 0)
      END SUB

      SUB TimerOver
        Timer1.Interval = 1  '' Can't go any lower!
        Y = Y + 1            '' Pixel by pixel!
        Paint
      END SUB

      Form.Width = 400
      Form.Height = 200
      Form.Center
      Form.Color = 0

      Font.Name = "Arial"
      Font.Size = 12
      Font.Color = &H00FF00
      Canvas.Parent = Form
      Canvas.Font = Font
      Canvas.Color = 0
      Canvas.OnPaint = Paint

      Timer1.Interval = 1
      Timer1.OnTimer = TimerOver

      Form.Onresize = Resize
      Form.ShowModal

  Prev Component | Contents | Next Component