Page 1 of 1

can anyone streamline or fix this code

Posted: Mon Feb 14, 2005 11:00 pm
by localmotion34
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:

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 
 

thanks.