with _screen If Type(".oToolbar")="O" And !Isnull(.oToolbar) Else .AddProperty("otoolbar",.F.) Endif .oToolbar=Create("ylistener_form") .oToolbar.Show endwith * Define Class ylistener_form As Toolbar Caption = "Toolbar1" Height = 29 Left = 0 Top = 0 Width = 127 lx = .F. ycount = .F. Add Object image1 As Image With ; Picture = Home(1)+"GRAPHICS\ICONS\WRITING\BOOK02.ICO", ; Stretch = 0, ; Height = 15, ; Left = 5, ; MousePointer = 15, ; Top = 3, ; Width = 16, ; Name = "Image1" Add Object separator6 As Separator With ; Top = 3, ; Left = 28, ; Height = 0, ; Width = 0, ; Name = "Separator6" Add Object command2 As CommandButton With ; Top = 3, ; Left = 28, ; Height = 23, ; Width = 23, ; FontBold = .T., ; FontName = "Webdings", ; FontSize = 11, ; Caption = "3", ; MousePointer = 15, ; ToolTipText = "Back", ; ForeColor = Rgb(255,0,0), ; BackColor = Rgb(128,255,0), ; Name = "Command2" Add Object separator7 As Separator With ; Top = 3, ; Left = 58, ; Height = 0, ; Width = 0, ; Name = "Separator7" Add Object command3 As CommandButton With ; Top = 3, ; Left = 58, ; Height = 22, ; Width = 23, ; FontBold = .T., ; FontName = "Webdings", ; FontSize = 11, ; Caption = "4", ; MousePointer = 15, ; ToolTipText = "Forward", ; ForeColor = Rgb(255,0,0), ; BackColor = Rgb(128,255,0), ; Name = "Command3" Add Object separator5 As Separator With ; Top = 3, ; Left = 88, ; Height = 0, ; Width = 0, ; Name = "Separator5" Add Object label1 As Label With ; AutoSize = .T., ; FontBold = .T., ; FontSize = 11, ; Caption = "X", ; Height = 20, ; Left = 88, ; MousePointer = 15, ; Top = 3, ; Width = 12, ; ForeColor = Rgb(255,0,0), ; Name = "Label1" Add Object timer1 As Timer With ; Top = 3, ; Left = 99, ; Height = 23, ; Width = 23, ; Interval = 1000, ; Name = "Timer1" Procedure Init This.Dock(0) Declare Integer Sleep In kernel32 Integer This.lx="" Endproc Procedure image1.Click Local m.myvar TEXT to m.myvar noshow this class works on form designer with design mode. it detects the form opened and can navigate into its method (back or forward). it does anything if there is no form opened. a timer controls if there is a form opend in designer with an interval :1 second.it alerts for its name if form changed. it docked as toolbar on the main vfp window. simply execute the code to launch it and issue modi form ? in command window ENDTEXT Messagebox(m.myvar,0+32+4096,"Help") Endproc Procedure command2.Click Try If ! Empty(This.Parent.lx) Keyboard("{PGUP}") Sleep(20) Keyboard("{PGUP}") Endi Catch Endtry Endproc Procedure command3.Click Try If ! Empty(This.Parent.lx) Keyboard("{PGDN}") Sleep(20) Keyboard("{PGDN}") Endi Catch Endtry Endproc Procedure label1.Click This.Parent.timer1.Enabled=.F. _Screen.oToolbar=Null Endproc Procedure timer1.Timer *ASELOBJ( ArrayName, [ 1 | 2 | 3 ] ) &&*2 Full path and name of .scx or .vcx file Local gnObjects gnObjects=Aselobj(myArray,3) *3 Creates three-element array containing information in context with the currently active code editing window: * object reference to a container object, the full path and name of the .scx or .vcx file, and *the full path and name of the #INCLUDE file, if available. If gnObjects>=1 Y=myArray(2,2) If !Lower(This.Parent.lx)==Lower(m.y) This.Parent.ycount=0 This.Parent.lx=m.y Endi If This.Parent.ycount=0 Messagebox(This.Parent.lx,0+32+4096,'Alert- form changed in designer !',2000) This.Parent.ycount=1 Endi Endi Endproc Enddefine * *-- EndDefine: ylistener_form