PUBLIC oform1 ACTIVATE WINDOW "debug output" oform1=NEWOBJECT("form1") oform1.Show RETURN DEFINE CLASS form1 AS form DoCreate = .T. Caption = "Form1" Name = "Form1" DESKTOP = .T. ADD OBJECT line1 AS lineex WITH ; ANCHOR = 15,; BorderWidth = 3, ; Height = THISFORM.height - 4, ; Left = 4, ; Top = 4, ; Width = THISFORM.Width - 4, ; Name = "Line1" ENDDEFINE DEFINE CLASS lineex as Line * this is a my wish routine for every visual baseclass, but VFPT ...... PROCEDURE ObjectHitTest(nXCoord,nYCoord) IF BETWEEN(m.nXCoord-OBJTOCLIENT(m.This,OBJTOCLIENT_LEFT) ,0,OBJTOCLIENT(m.This,OBJTOCLIENT_WIDTH) -1); AND BETWEEN(m.nYCoord-OBJTOCLIENT(m.This,OBJTOCLIENT_TOP) ,0,OBJTOCLIENT(m.This,OBJTOCLIENT_HEIGHT)-1) * check line * problem : Line is transparent !!!! * IF thisform.Point(m.nXCoord, m.nYCoord)=m.This.BorderColor RETURN 1 ENDIF ENDIF * none RETURN 0 * the ObjectHitTest way PROCEDURE MouseMove PARAMETERS nButton, nShift, nXCoord, nYCoord *!* Is mouse directly over the line? *!* if so, color it red IF this.ObjectHitTest(nXCoord, nYCoord) this.BorderColor = RGB(255,0,0) ELSE this.BorderColor = RGB(0,0,0) ENDIF IF thisform.Point(m.nXCoord, m.nYCoord)=0 DEBUGOUT m.nXCoord, m.nYCoord ENDIF ENDPROC * your code PROCEDURE MouseMove PARAMETERS nButton, nShift, nXCoord, nYCoord LOCAL lnFullX, lnFullY, lnCurrentX lnFullX = this.Width lnFullY = this.height lnCurrentXPercentage = (nXCoord - this.Left)/lnFullX IF This.LineSlant = "/" lnCurrentXPercentage = (1 - lnCurrentXPercentage) ENDIF *!* Is mouse directly over the line? *!* if so, color it red lineDetect= BETWEEN((nYCoord - this.Top) / lnCurrentXPercentage, lnFullY - this.BorderWidth, lnFullY + this.BorderWidth) DO CASE CASE lineDetect AND Thisform.Point(m.nXCoord, m.nYCoord)#0 DEBUGOUT "FALSE POSITIVE",m.nXCoord, m.nYCoord CASE !lineDetect AND Thisform.Point(m.nXCoord, m.nYCoord)=0 DEBUGOUT "FALSE NEGATIVE",m.nXCoord, m.nYCoord ENDCASE ENDPROC ENDDEFINE