DECLARE FUNCTION LoadImage Lib "user32" ALIAS "LoadImageA" (hInst AS LONG,_ ByVal lpsz AS STRING, dwImageType AS LONG,_ dwDesiredWidth AS LONG, dwDesiredHeight AS LONG,_ dwFlags AS LONG) AS LONG $Include "rapidq.inc" DECLARE SUB Brush1 DECLARE SUB Brush2 DECLARE SUB Brush3 DECLARE SUB Brush4 DECLARE SUB Brush5 DECLARE SUB Brush6 DECLARE SUB Brush7 DECLARE SUB Brush8 DECLARE SUB Brush9 DECLARE SUB FormPaint Declare Sub KeyDown (Key As Word,_ Shift As Integer) DECLARE SUB NewClick_ (sender AS QMENUITEM) DECLARE SUB OpenClick DECLARE SUB TraceOpenClick DECLARE SUB SaveAsClick_ (sender AS QMENUITEM) DECLARE SUB HelpClick_ (sender AS QMENUITEM) DECLARE SUB PrinterClick_ (sender AS QMENUITEM) Declare Sub Cut_ (sender AS QMENUITEM) Declare Sub PasteTrace_ (Sender AS QMENUITEM) Declare Sub PasteTrace2_ (Sender AS QMENUITEM) Declare SUB MenuUndo_ (sender As QMENUITEM) Declare Sub KeyDown(Key As Word,_ Shift As Integer) Declare Sub MouseDown(Button As Long,_ x As Long, y As Long,_ Sender AS QCanvas) Declare Sub MouseMove (x As Long,_ y As Long,_ Shift As Long,_ Sender AS QCANVAS) Declare Sub MouseUp (Button As Long,_ x As Long, y As Long,_ Sender AS QCanvas) Declare Sub CanvasPaint (Sender As QCanvas) Declare SUB UndoPaint (Sender AS QCANVAS) DIM Image1 AS QIMAGE DIM Image2 AS QIMAGE DIM startx as integer DIM starty as integer DIM endx as integer Dim endy as integer Dim checkbutton as integer Dim Straight$ as string Dim undo$ as string Undo$="good" DIM Brush AS Integer Brush=1 'default brush Dim Source AS QRECT Dim Destination AS QRECT DIM pastecount As integer pastecount=0 CREATE Form AS QFORM Caption = "Ink Draw" KeyPreview=1 'Forces Keystrokes to form Center WindowState=2 AutoScroll=1 OnKeyDown=KeyDown color=&HFFFFFF 'or clWhite CREATE MNUMAIN AS QMAINMENU CREATE FileItem AS QMENUITEM CAPTION = "&File" CREATE NewItem AS QMENUITEM Caption = "New" OnClick = NewClick END CREATE CREATE OpenItem AS QMENUITEM Caption= "Open For Edit" OnClick = OpenClick END CREATE CREATE OpenTraceItem AS QMENUITEM Caption= "Open For Trace" OnClick = OpenClick END CREATE Create SaveItem AS QMenuItem Caption = "Save As" OnClick = SaveAsClick End Create CREATE PrintItem AS QMenuItem Caption = "&Print" Hint = "Print to Default Printer" OnClick = PrinterClick END CREATE END CREATE CREATE EditItem AS QMENUITEM Caption = "Edit" CREATE UndoItem AS QMENUITEM Caption="Undo(Ctrl-Z)" OnClick=MenuUndo END CREATE CREATE CutItem AS QMENUITEM Caption="Cut(Ctrl-X)" OnClick=Cut END CREATE CREATE PasteItem AS QMENUITEM Caption="Paste to Trace(Ctrl-V)" OnClick=PasteTrace END CREATE CREATE PasteItem2 AS QMENUITEM Caption="Paste to Edit(Ctrl-V)" OnClick=PasteTrace2 END CREATE END CREATE CREATE ToolItems AS QMENUITEM Caption="Tools" CREATE MirrorHorizItem AS QMENUITEM Caption="MirrorHoriz" END CREATE END CREATE CREATE BrushesItems AS QMENUITEM Caption="Brushes" CREATE Brush1Item AS QMENUITEM Caption="Brush1" OnClick=Brush1 END CREATE CREATE Brush2Item AS QMENUITEM Caption="Brush2" OnClick=Brush2 END CREATE CREATE Brush3Item AS QMENUITEM Caption="Brush3" OnClick=Brush3 END CREATE CREATE Brush4Item AS QMENUITEM Caption="Brush4" OnClick=Brush4 END CREATE CREATE Brush5Item AS QMENUITEM Caption="Brush5" OnClick=Brush5 END CREATE CREATE Brush6Item AS QMENUITEM Caption="Brush6" OnClick=Brush6 END CREATE CREATE Brush7Item AS QMENUITEM Caption="Brush7" OnClick=Brush7 END CREATE CREATE Brush8Item AS QMENUITEM Caption="Brush8" OnClick=Brush8 END CREATE CREATE Brush9Item AS QMENUITEM Caption="Brush9" OnClick=Brush9 END CREATE END CREATE CREATE HelpItem AS QMENUITEM Caption = "Help" CREATE AboutItem AS QMENUITEM Caption="About" OnClick = HelpClick END CREATE END CREATE END CREATE Create Canvas AS QCANVAS Width=Form.ClientWidth Height=Form.ClientHeight OnMouseDown=MouseDown OnMouseMove=MouseMove OnMouseUp=MouseUp OnPaint=CanvasPaint END CREATE END CREATE 'Insert your initialization code here Dim UndoBitmap as QBitmap UndoBitmap.Height=Canvas.Height UndoBitmap.Width=Canvas.Width Dim ShowBitmap as QBitmap ShowBitmap.Height=Canvas.Height ShowBitmap.Width=Canvas.Width 'showbitmap redraws the form if erased by 'another window Dim TraceBitmap as QBitmap TraceBitmap.Height=Canvas.Height TraceBitmap.Width=Canvas.Width Dim UndoTraceBitmap as QBitmap UndoTraceBitmap.Height=Canvas.Height UndoTraceBitmap.Width=Canvas.Width Form.ShowModal SUB CanvasPaint (Sender AS QCANVAS) If undo$="good" then Sender.Draw(0,0,_ ShowBitmap.BMP) If undo$="undo" then Sender.Draw(0,0,UndoBitmap.BMP) TraceBitmap.Draw(0,0,UndoTraceBitmap.BMP) undo$="good" End if If undo$="paste" then Sender.Draw(0,0,Image1.bmp) TraceBitmap.Draw(0,0,Image1.bmp) End If End Sub SUB KeyDown(Key AS WORD,_ Shift AS INTEGER) print key if shift=256 Then Straight$="straight" if shift=0 Then Straight$="notstraight" if Key=90 Then if shift=1 then undo$="undo" Canvas.repaint end if End if END SUB SUB NewClick Canvas.Color=-1 END SUB Sub MouseDown(Button As Long,_ x As Long,_ y As Long, Sender AS QCanvas) startx=x starty=y checkbutton=1 UndoBitmap.Height=Canvas.Height UndoBitmap.Width=Canvas.Width UndoTraceBitmap.Height=Canvas.Height UndoTraceBitmap.Width=Canvas.Width DIM forwaitx as integer DIM forwaity as integer WITH Destination .Top = 0 .Left = 0 .Right = .Left+UndoBitmap.Width .Bottom = .Top+UndoBitmap.Height END WITH WITH Source .Top = 0 .Left = 0 .Right = Canvas.Width .Bottom = Canvas.Height END WITH UndoBitmap.CopyRect(Destination,_ Canvas, Source) WITH Destination .Top = 0 .Left = 0 .Right = .Left+UndoBitmap.Width .Bottom = .Top+UndoBitmap.Height END WITH WITH Source .Top = 0 .Left = 0 .Right = Canvas.Width .Bottom = Canvas.Height END WITH UndoTraceBitmap.CopyRect(Destination,_ TraceBitmap, Source) End Sub Sub MouseMove(x As Long,y As Long,_ Shift As Long, Sender AS QCANVAS) IF shift=0 then Straight$="notstraight" IF brush=1 Then IF Checkbutton=1 Then Canvas.Line(x,y,x,y,&H000000) TraceBitmap.Line(x,y,x,y,&H000000) END IF END IF IF brush=2 Then IF Checkbutton=1 Then Canvas.FillRect(x,y,x+2,y+2,&H000000) TraceBitmap.FillRect(x,y,x+2,y+2,&H000000) END IF END IF IF brush=3 Then IF Checkbutton=1 Then Canvas.Line(x,y,x,y,&H000000) Canvas.Line(x+3,y+3,x+3,y+3,&H000000) TraceBitmap.Line(x,y,x,y,&H000000) TraceBitmap.Line(x+3,y+3,x+3,y+3,&H000000) END IF END IF IF brush=4 Then IF Checkbutton=1 Then Canvas.Line(x-3,y-3,x-3,y-3,&H000000) Canvas.Line(x,y,x,y,&H000000) Canvas.Line(x+3,y+3,x+3,y+3,&H000000) TraceBitmap.Line(x,y,x,y,&H000000) TraceBitmap.Line(x+3,y+3,x+3,y+3,&H000000) END IF END IF IF brush=5 Then IF Checkbutton=1 Then Canvas.Circle(x,y,x+8,y+8,&H000000,&HFFFFFF) TraceBitmap.Circle(x,y,x+8,y+8,&H000000,&HFFFFFF) sleep=.02 END IF END IF IF brush=6 Then IF Checkbutton=1 Then Canvas.Line (x-2,y+2,x+2,y-2,&H000000) Canvas.Line (x-2,y+2,x+2,y-2,&H000000) TraceBitmap.Line(x-2,y+2,x+2,y-2,&H000000) TraceBitmap.Line(x-2,y+2,x+2,y-2,&H000000) sleep .04 END IF END IF If brush=7 Then If Checkbutton=1 Then Canvas.rectangle(x,y,x+12,y+12,&H000000) Canvas.circle(x,y,x+12,y+15,&HFFFFFF,&HFFFFFF) TraceBitmap.rectangle(x,y,x+12,y+12,&H000000) TraceBitmap.circle(x,y,x+12,y+15,&HFFFFFF,&HFFFFFF) sleep .02 End IF END IF If brush=8 Then If Checkbutton=1 Then Canvas.Line(x,y,x+6,y,&H000000) Canvas.Line(x,y,x-6,y+6,&H000000) Canvas.Line(x,y,x,y-6,&H000000) Canvas.Line(x,y,x,y-6,&H000000) TraceBitmap.Line(x,y,x+6,y,&H000000) TraceBitmap.Line(x,y,x-6,y+6,&H000000) TraceBitmap.Line(x,y,x,y-6,&H000000) TraceBitmap.Line(x,y,x,y-6,&H000000) sleep .05 End IF END IF If brush=9 Then If Checkbutton=1 Then Canvas.Textout(x,y,chr$(129),&H000000,&HFFFFFF) Canvas.Textout(x,y+5,chr$(129),&H000000,&HFFFFFF) TraceBitmap.Textout(x,y,chr$(129),&H000000,&HFFFFFF) TraceBitmap.Textout(x,y+5,chr$(129),&H000000,&HFFFFFF) sleep .02 END IF END IF END IF END SUB SUB MouseUp(Button As Long, x As Long,_ y As Long, Sender AS QCanvas) endx=x endy=y checkbutton=0 If Straight$= "straight" Then IF Brush=1 Then Canvas.Line(Startx,Starty,Endx,Endy,&H000000) TraceBitmap.Line(Startx,Starty,Endx,Endy,&H000000) END IF IF brush=2 Then Canvas.Line(startx,starty,endx,endy,&H000000) Canvas.Line(startx+3,starty+3,endx+3,endy+3,&H000000) TraceBitmap.Line(startx,starty,endx,endy,&H000000) TraceBitmap.Line(startx+3,starty+3,endx+3,endy+3,&H000000) END IF IF brush=3 Then Canvas.Line(startx-3,starty-3,endx-3,endy-3,&H000000) Canvas.Line(startx,starty,endx,endy,&H000000) Canvas.Line(startx+3,starty+3,endx+3,endy+3,&H000000) TraceBitmap.Line(startx-3,starty-3,endx-3,endy-3,&H000000) TraceBitmap.Line(startx,starty,endx,endy,&H000000) TraceBitmap.Line(startx+3,starty+3,endx+3,endy+3,&H000000) END IF IF brush=4 Then Canvas.Line(startx-6,starty-6,endx-6,endy-6,&H000000) Canvas.Line(startx-3,starty-3,endx-3,endy-3,&H000000) Canvas.Line(startx,starty,endx,endy,&H000000) Canvas.Line(startx+3,starty+3,endx+3,endy+3,&H000000) TraceBitmap.Line(startx-6,starty-6,endx-6,endy-6,&H000000) TraceBitmap.Line(startx-3,starty-3,endx-3,endy-3,&H000000) TraceBitmap.Line(startx,starty,endx,endy,&H000000) TraceBitmap.Line(startx+3,starty+3,endx+3,endy+3,&H000000) END IF IF brush=5 Then DIM addx as integer DIM addy as integer addx=endx-startx addy=endy-starty forwaitx=startx forwaity=starty Do counter++ Canvas.Circle(forwaitx,forwaity,forwaitx-8,forwaity-8,&H000000,&HFFFFFF) TraceBitmap.Circle(startx,starty,startx-x,starty-y,&H000000,&HFFFFFF) forwaitx=forwaitx+addx forwaity=forwaity+addy Loop until counter=addx counter= 0 END IF IF brush=6 Then Canvas.Line (startx-2,starty+2,endx+2,endy-2,&H000000) Canvas.Line (startx-2,starty+2,endx+2,endy-2,&H000000) TraceBitmap.Line(startx-2,starty+2,startx+2,starty-2,&H000000) TraceBitmap.Line(startx-2,starty+2,startx+2,starty-2,&H000000) END IF If brush=7 Then Canvas.rectangle(startx,starty,endx+12,endy+12,&H000000) Canvas.circle(startx,starty,endx+12,endy+15,&HFFFFFF,&HFFFFFF) TraceBitmap.rectangle(startx,starty,endx+12,endy+12,&H000000) TraceBitmap.circle(startx,starty,endx+12,endy+15,&HFFFFFF,&HFFFFFF) End IF If brush=8 Then Canvas.Line(startx,starty,endx+6,endy,&H000000) Canvas.Line(startx,starty,endx-6,endy+6,&H000000) Canvas.Line(startx,starty,endx,endy-6,&H000000) Canvas.Line(startx,starty,endx,endy-6,&H000000) TraceBitmap.Line(startx,starty,endx+6,endy,&H000000) TraceBitmap.Line(startx,starty,endx-6,endy+6,&H000000) TraceBitmap.Line(startx,starty,endx,endy-6,&H000000) TraceBitmap.Line(startx,starty,endx,endy-6,&H000000) End IF If brush = 9 then for forwaitx=startx to endx step 5 for forwaity=starty to endy step 5 if forwaitx>startx then if forwaity>starty then Canvas.Textout(forwaitx,forwaity,chr$(129),&H000000,&HFFFFFF) end if end if next forwaitx next forwaity END IF END IF ShowBitmap.Height=Canvas.Height ShowBitmap.Width=Canvas.Width WITH Destination .Top = 0 .Left = 0 .Right = .Left+ShowBitmap.Width .Bottom = .Top+ShowBitmap.Height END WITH WITH Source .Top = 0 .Left = 0 .Right = Canvas.Width .Bottom = Canvas.Height END WITH ShowBitmap.CopyRect(Destination,_ Canvas, Source) Straight$="NotStraight" End Sub SUB OpenClick DIM openDialog AS QOPENDIALOG openDialog.filter = "*.BMP (Bitmap)|*.BMP" IF openDialog.execute THEN ShowBitmap.bmp=(openDialog.fileName) Canvas.Repaint END IF END SUB SUB TraceOpenClick DIM openDialog AS QOPENDIALOG openDialog.filter = "*.BMP (Bitmap)|*.BMP" IF openDialog.execute THEN Image1.Height=1059 Image1.bmp=(openDialog.fileName) If Image1.Height>Form.Height Then Form.Height=Image1.Height End IF END IF call FormPaint undo$="undo" Canvas.repaint END SUB SUB SaveAsClick DIM SaveAsDialog AS QSaveDialog SaveAsDialog.Filter = "*.BMP (Bitmap) |*.BMP" IF SaveAsDialog.Execute THEN TraceBitmap.SaveToFile (SaveASDialog.FileName+".bmp") END IF END SUB SUB FormPaint If pastecount=1 Then Form.Draw(0,0, Image1.BMP) End IF If pastecount=0 then Form.Draw(0, 0, Image1.BMP) END IF pastecount=0 END SUB SUB MenuUndo Undo$="undo" Canvas.Repaint END SUB SUB HelpClick showmessage "Silly Draw Example \r By John Graves" END SUB SUB Cut END SUB SUB PasteTrace pastecount=1 Image1.Handle = Clipboard.GetAsHandle(2) call FormPaint END SUB SUB PasteTrace2 pastecount=1 Image1.Handle = Clipboard.GetAsHandle(2) undo$="paste" Canvas.Repaint END SUB SUB Brush1 Brush=1 END SUB SUB Brush2 Brush=2 END SUB SUB Brush3 Brush=3 END SUB SUB Brush4 Brush=4 END SUB SUB Brush5 Brush=5 END SUB SUB Brush6 Brush=6 END SUB SUB Brush7 Brush=7 END SUB SUB Brush8 Brush=8 END SUB SUB Brush9 Brush=9 END SUB