Simulate input/Mouse: Difference between revisions

Simulate input/Mouse in FreeBASIC
(Simulate input/Mouse in FreeBASIC)
Line 138:
}
</lang>
 
=={{header|FreeBASIC}}==
Código sacado de https://www.freebasic.net/forum/
<lang freebasic>#include "fbgfx.bi"
#define rect 4
 
Windowtitle "Mouse events"
Screen 19,32
Dim Shared As Integer xres, yres
Screeninfo xres, yres
 
Type box
As Single x, y, z
As String caption
As Uinteger textcol, boxcol
End Type
 
Dim Shared As box label(rect,1)
Dim Shared As box button(rect,1)
Dim Shared As Boolean flag
Dim Shared As fb.event e
Dim As Uinteger background = Rgb(100,100,100)
 
Sub thickline(x1 As Double, y1 As Double, x2 As Double, y2 As Double,_
thickness As Double, colour As Uinteger, im As Any Pointer = 0)
Dim p As Uinteger = Rgb(255, 255, 254)
If thickness < 2 Then
Line(x1,y1)-(x2,y2), colour
Else
Dim As Double h = Sqr((x2-x1)^2+(y2-y1)^2), s = (y1-y2)/h, c = (x2-x1)/h
For x As Integer = 1 To 2
Line im,(x1+s*thickness/2,y1+c*thickness/2)-(x2+s*thickness/2,y2+c*thickness/2),p
Line im,(x1-s*thickness/2,y1-c*thickness/2)-(x2-s*thickness/2,y2-c*thickness/2),p
Line im,(x1+s*thickness/2,y1+c*thickness/2)-(x1-s*thickness/2,y1-c*thickness/2),p
Line im,(x2+s*thickness/2,y2+c*thickness/2)-(x2-s*thickness/2,y2-c*thickness/2),p
Paint im,((x1+x2)/2, (y1+y2)/2), p, p
p = colour
Next x
End If
End Sub
 
Function inbox(p1() As box, p2 As box) As Integer
Type pt2d : As Single x, y : End Type
Type ln2d : As pt2d v1, v2 : End Type
#macro isleft(L,p)
-Sgn((L.v1.x-L.v2.x)*(p.y-L.v2.y) - (p.x-L.v2.x)*(L.v1.y-L.v2.y))
#endmacro
Dim As Single n1 = p1(rect,0).z
Dim As Integer index, nextindex
Dim send As ln2d
Dim As Integer n, wn = 0
For n = 1 To 4
index = n Mod 5 : nextindex = (n+1) Mod 5
If nextindex = 0 Then nextindex = 1
send.v1.x = p1(index,n1).x : send.v2.x = p1(nextindex,n1).x
send.v1.y = p1(index,n1).y : send.v2.y = p1(nextindex,n1).y
If p1(index,n1).y <= p2.y Then
If p1(nextindex,n1).y > p2.y Then
If isleft(send,p2) > 0 Then wn += 1
End If
Else
If p1(nextindex,n1).y <= p2.y Then
If isleft(send,p2) < 0 Then wn -= 1
End If
End If
Next n
Return wn
End Function
 
Sub draw_box(p() As box, col As Uinteger, pnt As String = "paint", im As Any Pointer = 0)
Dim As Integer index, nextindex
Dim As Single n1 = p(rect,0).z
Dim As Double xc, yc
For n As Integer = 1 To 4
xc += p(n,n1).x : yc += p(n,n1).y
index = n Mod 5 : nextindex = (n+1) Mod 5
If nextindex = 0 Then nextindex = 1
thickline(p(index,n1).x,p(index,n1).y, p(nextindex,n1).x,p(nextindex,n1).y,4,col,im)
Next n
xc /= Ubound(p) : yc /= Ubound(p)
If pnt = "paint" Then Paint(xc,yc), col, col
End Sub
 
Sub highlightbox(box() As box, mp As box, col As Uinteger)
box(rect,0).z = 1
If inbox(box(),mp) Then draw_box(box(),col,"dont_paint")
End Sub
 
Sub checkbox(box() As box,mp As box)
flag = True
label(rect,1).caption = box(rect,1).caption
label(rect,1).textcol = box(rect,1).textcol
label(rect,1).boxcol = box(rect,1).boxcol
End Sub
 
Sub drawbox(x As Integer, y As Integer, box()As box, boxlength As Integer, _
boxheight As Integer, col As Uinteger, highlight As Uinteger, caption As String)
Dim As box startpoint
startpoint.x = x : startpoint.y = y
Dim As Integer mmx, mmy
Getmouse mmx, mmy
Dim As box mouse
mouse.x = mmx : mouse.y = mmy
box(rect,1).boxcol = col
box(rect,1).caption = caption
Dim As Uinteger outline, count = 1
outline = Rgb(255,255,255)
For x As Integer = 1 To 4
Select Case x
Case 1
box(1,count).x = startpoint.x
box(1,count).y = startpoint.y
Case 2
box(2,count).x = box(1,count).x + boxlength
box(2,count).y = box(1,count).y
Case 3
box(3,count).x = box(2,count).x
box(3,count).y = box(2,count).y + boxheight
Case 4
box(4,count).x = box(3,count).x - boxlength
box(4,count).y = box(3,count).y
End Select
Next x
box(rect,0).z = 1
draw_box(box(),col)
draw_box(box(),outline,"nopaint")
If inbox(box(),mouse) Then
highlightbox(box(),mouse,highlight)
If (Screenevent(@e)) Then
If e.type = fb.EVENT_MOUSE_BUTTON_PRESS Then checkbox(box(),mouse)
End If
End If
Draw String(box(1,1).x+5,box(1,1).y+5), box(rect,1).caption,box(rect,1).textcol
End Sub
 
' ---------- Main Program ----------
Do
Screenlock
Cls
Paint(0,0), background
Draw String(300,50), "BUTTON CLICK TEST", Rgb(0,0,200)
drawbox(100,100,button(),100,50,Rgb(200,200,0),Rgb(00,0,200),"Box 1")
drawbox(100,200,button(),100,50,Rgb(200,0,190),Rgb(00,0,200),"Box 2")
drawbox(100,300,button(),100,50,Rgb(0,200,190),Rgb(00,0,200),"Box 3")
If flag Then drawbox(400,100,label(),250,250,label(rect,1).boxcol,Rgb(255,255,255),label(rect,1).caption)
If (Screenevent(@e)) Then
If e.type=13 Then End
End If
Screenunlock
Sleep 1, 1
Loop Until Inkey = Chr(27)
</lang>
Output:
 
https://www.dropbox.com/s/avn8h46iy8ngizc/MouseEvents_FB.png?dl=0
 
=={{header|Go}}==
2,130

edits