* this goes into tooltip_access LOCAL loTooltipForm loTooltipForm=CREATEOBJECT("ToolBrowseForm") WITH loTooltipForm .LEFT=THIS.LEFT+THIS.WIDTH/2 .TOP=THIS.TOP+THIS.HEIGHT-4 IF .COLLECT(EVALUATE(THIS.rawresultsfield)) .MoveNear(THIS, THISFORM) .SHOW(1) .CLEAR() ENDIF .RELEASE() ENDWITH return "" DEFINE CLASS ToolBrowseForm AS FORM ADD OBJECT HideTimer AS TIMER WITH ; ENABLED=.F., ; INTERVAL=200 ALWAYSONTOP=.T. BORDERSTYLE=1 CLOSABLE=.F. COLORSOURCE=0 FONTNAME="FoxFont" FONTSIZE=9 MAXBUTTON=.F. MINBUTTON=.F. sizebox=.F. TITLEBAR=0 timeActivated ={ :} SHOWWINDOW=1 DisplayFont = '' DisplayFontSize = 0 ******************************* PROCEDURE SETUP() DODEFAULT() DECLARE LONG GetSysColor IN User32 INTEGER *-- 24 - tooltips background THIS.BACKCOLOR=GetSysColor(24) *--------------------------------------------------- PROCEDURE INIT() *-- dn 2009/10/05 THIS.SETUP() ******************************* PROCEDURE DEACTIVATE THIS.HIDE() ******************************* PROCEDURE MOUSELEAVE LPARAMETERS nButton, nShift, nXCoord, nYCoord THIS.HIDE() *--------------------------------------------------- *[2009/10/06 10:59:12] ndragan - PROCEDURE SHOW(tnStyle) LOCAL lcSetNull tnStyle=EVL(tnStyle, 2) lcSetNull=SET("Nulldisplay") SET NULLDISPLAY TO "--" DODEFAULT(tnStyle) THIS.timeActivated =DATETIME() THIS.HideTimer.ENABLED=.T. SET NULLDISPLAY TO lcSetNull ******************************* PROCEDURE MoveNear(toNear, toFrm AS FORM) lnTop=toFrm.TOP+OBJTOCLIENT(toNear,1)+toNear.HEIGHT/4+SYSMETRIC(4)+SYSMETRIC(9) + 12 && 2011/02/25 - Additional vertical compensation to avoid obscuring the selected record, where sufficient space is available lnLeft=toFrm.LEFT+OBJTOCLIENT(toNear,2) + MIN(toNear.WIDTH, toNear.PARENT.WIDTH) + 6 && 2011/02/25 - Revised for more consistent grid/non-grid positioning by optionally using parent object width WITH THIS AS FORM lnTop=MIN(lnTop, toFrm.HEIGHT-.HEIGHT-10) lnLeft=MIN(lnLeft, toFrm.WIDTH-.WIDTH-16) && 2011/02/25 - Replaced .Left reference with .Width to ensure the full width of the form is visible within the application .MOVE(lnLeft, lnTop) ENDWITH *--------------------------------------------------- PROCEDURE HideTimer.TIMER() *-- dn 2009/10/05 LOCAL oOBject, llMouseIsOnMe llMouseIsOnMe=.F. DO CASE CASE DATETIME()-THISFORM.timeActivated <_DBLCLICK*2 llMouseIsOnMe=.T. && five seconds delay before trying to hide CASE THISFORM.VISIBLE AND THISFORM.DOCKPOSITION = -1 oOBject = SYS(1270) IF VARTYPE(oOBject) = "O" *-- this form has no parent, so the topmost parent of any object on it is the form. DO WHILE TYPE("oObject.Parent.Name") = "C" oOBject = oOBject.PARENT ENDDO llMouseIsOnMe= oOBject = THISFORM ENDIF ENDCASE IF NOT llMouseIsOnMe THIS.ENABLED = .F. THISFORM.HIDE() ENDIF ENDDEFINEThis actually had a grid on itself, and some serious code to populate its cursor. In some cases it would contain a picture or something else. It came handy when we wanted to show more details on something that's in a grid. So this is a tooltip form.