can anyone streamline or fix this code
Posted: Mon Feb 14, 2005 11:00 pm
it's a working version of my updated rulergadget LIB, and when drawing a horizontal marker line, there are some problems. see for yourself and if you can make this work the way it should, id be most appreciative:
thanks.
Code: Select all
#pb_rulerH=$33333333
#pb_rulerV=$33333334
#Pb_rulerL=$33333335
Global VT.TB_GadgetVT,rect.RECT,rect1.RECT,MouseBtnDown
Global MouseBtnDown , hMouseBtnDown
Global MouseBtnDownX , MouseBtnDownY ,cursor.POINT
Global MouseMoveCursor
Global MoveMode
Structure info
xloc.l
yloc.l
orient.l
EndStructure
#pb_rulerH=$33333333
#pb_rulerV=$33333334
#Pb_rulerL=$33333335
ProcedureDLL initruler()
NewList rulerlines.info()
Dim overcursor(2)
Dim addelmt(2)
addelmt(0)=1
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
mainparent=GetParent_(hwnd)
Result = 0
Select uMsg
Case #WM_LBUTTONDOWN
MouseBtnDownX = lParam&$FFFF
MouseBtnDownY = (lParam>>16)&$FFFF
MouseBtnDown = #True
hMouseBtnDown = hwnd
GetwindowRect_(hwnd,@rect)
GetwindowRect_(mainparent,@rect1)
;rect\right - rect\left
;rect\bottom - rect\top
If overcursor(0)=1
addelmt(0)=0
StartDrawing(WindowOutput())
DrawingMode(2)
LineXY(rect\left-rect1\left,MouseBtnDownY,rect\right,MouseBtnDownY)
EndIf
If StartDrawing(WindowOutput())
DrawingMode(2)
LineXY(rect\left-rect1\left,MouseBtnDownY,rect\right,MouseBtnDownY)
StopDrawing()
EndIf
GetClientRect_(hwnd,@ClipRect.RECT)
;ClipCursor_(@ClipRect)
;SetCapture_(hwnd)
ProcedureReturn 0
Case #WM_SIZE
Case #WM_MOUSEMOVE
y=WindowMouseY()
ForEach rulerlines()
If rulerlines()\yloc=y
cur=LoadCursor_(#Null,#IDC_SIZENS)
SetCursor_(cur)
overcursor(0)=1
Break
Else
cur=LoadCursor_(#Null,#IDC_ARROW )
SetCursor_(cur)
overcursor(0)=0
EndIf
Next
If MouseBtnDown
MouseOffsetX.w = lParam&$FFFF - MouseBtnDownX
MouseOffsetY.w = (lParam>>16)&$FFFF - MouseBtnDownY
If StartDrawing(WindowOutput())
DrawingMode(2)
LineXY(rect\left-rect1\left,MouseBtnDownY,rect\right,MouseBtnDownY)
StopDrawing()
EndIf
;rect\left + MouseOffsetX
;rect\top + MouseOffsetY
MouseBtnDownX + MouseOffsetX
MouseBtnDownY + MouseOffsetY
If StartDrawing(WindowOutput())
DrawingMode(2)
LineXY(rect\left-rect1\left,MouseBtnDownY,rect\right,MouseBtnDownY)
StopDrawing()
EndIf
EndIf
ProcedureReturn 0
Case #WM_LBUTTONUP
If MouseBtnDown
y=WindowMouseY()
MouseBtnDown = #False
addedline=1
If addelmt(0)=1
AddElement(rulerlines())
rulerlines()\yloc = y
EndIf
addelmt(0)=1
rulerlines()\yloc = y
ProcedureReturn 0
EndIf
Case #WM_MOUSEACTIVATE
RedrawWindow_(hwnd,0,0,#RDW_ALLCHILDREN )
ShowWindow_(hwnd,#SW_SHOWNORMAL)
UpdateWindow_(hwnd)
Case #WM_PAINT
RedrawWindow_(hwnd,0,0,#RDW_ALLCHILDREN )
ShowWindow_(hwnd,#SW_SHOWNORMAL)
UpdateWindow_(hwnd)
Case #WM_DESTROY
EndSelect
ProcedureReturn DefWindowProc_(hwnd, uMsg, wParam, lParam)
EndProcedure
ProcedureDLL rulergadget(number, x, y, Width, Height,flags)
hInstance = GetModuleHandle_(0)
wc.WNDCLASSEX
wc\cbSize = SizeOf(WNDCLASSEX)
wc\style = #CS_DBLCLKS
wc\lpfnWndProc = @WndProc()
wc\hInstance = hInstance
wc\lpszClassName = @"rulergadget"
If RegisterClassEx_(@wc)=0:ProcedureReturn 0:EndIf
hwnd = CreateWindowEx_(#Null, "Rulergadget", "", #WS_CHILD|#WS_CLIPSIBLINGS|#WS_VISIBLE, x, y, Width, Height, TB_UsedWindow(), number, hInstance, 0)
If hwnd=0:ProcedureReturn 0:EndIf
CreateGadgetList(hwnd)
If flags=#Pb_rulerL
LoadFont(2, "test", 7)
ruler=CreateImage(#PB_Any,Width,33)
StartDrawing(ImageOutput())
Box(0,0,Width,33,#White)
DrawingMode(4)
Box(0,0,Width,33,0)
For c=b+10 To c=b+90 Step 10
LineXY(c,0,c,6,0)
LineXY(c,33,c,27,0)
Next
For a=100 To Width Step 100
LineXY(a,0,a,10,0)
Locate(a-7,11)
DrawingFont(FontID())
DrawText(Str(a))
LineXY(a,33,a,23,0)
b=a
For c=b+10 To c=b+90 Step 10
LineXY(c,0,c,6,0)
LineXY(c,33,c,27,0)
Next
Next
StopDrawing()
temp=ImageGadget(#PB_Any,33,0,Width,33,UseImage(ruler))
ruler1=CreateImage(#PB_Any,33,Width)
StartDrawing(ImageOutput())
Box(0,0,33,Width,#White)
DrawingMode(4)
Box(0,0,33,Width,0)
For a=100 To Width Step 100
LineXY(0,a,7,a)
Locate(11,a-4)
DrawingFont(FontID())
DrawText(Str(a))
LineXY(33,a,27,a)
For c=0 To 90 Step 10
LineXY(0,c,6,c)
LineXY(33,c,27,c)
Next
b=a
For c=b+10 To c=b+90 Step 10
LineXY(0,c,6,c)
LineXY(33,c,27,c)
Next
Next
StopDrawing()
temp1=ImageGadget(#PB_Any,0,33,33,Width,UseImage(ruler1))
toggleb=ButtonGadget(#PB_Any,0,0,33,33,"",#PB_Button_Toggle)
ElseIf flags=#pb_rulerH
LoadFont(2, "test", 7)
ruler=CreateImage(#PB_Any,Width,33)
StartDrawing(ImageOutput())
Box(0,0,Width,33,#White)
DrawingMode(4)
Box(0,0,Width,33,0)
For c=b+10 To c=b+90 Step 10
LineXY(c,0,c,6,0)
LineXY(c,33,c,27,0)
Next
For a=100 To Width Step 100
LineXY(a,0,a,10,0)
Locate(a-7,11)
DrawingFont(FontID())
DrawText(Str(a))
LineXY(a,33,a,23,0)
b=a
For c=b+10 To c=b+90 Step 10
LineXY(c,0,c,6,0)
LineXY(c,33,c,27,0)
Next
Next
StopDrawing()
temp=ImageGadget(#PB_Any,0,0,Width,33,UseImage(ruler))
ElseIf flags=#pb_rulerV
LoadFont(2, "test", 7)
ruler1=CreateImage(#PB_Any,33,Width)
StartDrawing(ImageOutput())
Box(0,0,33,Width,#White)
DrawingMode(4)
Box(0,0,33,Width,0)
For a=100 To Width Step 100
LineXY(0,a,7,a)
Locate(11,a-4)
DrawingFont(FontID())
DrawText(Str(a))
LineXY(33,a,27,a)
For c=0 To 90 Step 10
LineXY(0,c,6,c)
LineXY(33,c,27,c)
Next
b=a
For c=b+10 To c=b+90 Step 10
LineXY(0,c,6,c)
LineXY(33,c,27,c)
Next
Next
StopDrawing()
temp1=ImageGadget(#PB_Any,0,0,33,Width,UseImage(ruler1))
EndIf
ShowWindow_(hwnd, #SW_SHOWNORMAL)
UpdateWindow_(hwnd)
;VT\FreeGadget = @MyFreeGadget()
;VT\GetGadgetState = @MyGetGadgetState()
;VT\SetGadgetState = @MySetGadgetState()
TB_SetGadget(number, hwnd, @VT)
ProcedureReturn hwnd
EndProcedure
initruler()
If OpenWindow(0,0,0,645,605,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"RulerGadget") And CreateGadgetList(WindowID(0))
test=rulergadget(0,60,20,550,550,#Pb_rulerL)
EndIf
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_EventGadget
Select EventGadgetID()
EndSelect
Case #PB_EventCloseWindow
End
EndSelect
ForEver