This does not happen with the standard Notepad editor.
Why is that?

Code: Select all
*window = openWindow ( #pb_any, 0, 0, 600, 300, "Editor", #pb_window_systemMenu)
*editor = editorGadget ( #pb_any, 0, 0, 600, 300 )
setGadgetText ( *editor, "Test text ... use arrows and get the window blinking" )
repeat
until waitWindowEvent ( ) = #pb_event_closeWindow
Code: Select all
;{
openWindow ( #pb_any,
#null,
#null,
600,
300,
"Use arrow keys to play with the window focus",
#pb_window_systemMenu |
#pb_window_screenCentered )
editor = editorGadget ( #pb_any,
#null,
#null,
600,
300,
#pb_editor_wordWrap )
setGadgetText ( editor,
"The window will 'jump-over' its focus when " +
"you press an arrow key without the editor " +
"having any cursor position to go to..." )
repeat
until ( waitWindowEvent ( ) = #pb_event_closeWindow )
;}
Code: Select all
EnableExplicit
Interface ITextServices Extends IUnknown
TxSendMessage.i()
TxDraw.i()
TxGetHScroll.i()
TxGetVScroll.i()
OnTxSetCursor.i()
TxQueryHitPoint.i()
OnTxInPlaceActivate.i()
OnTxInPlaceDeactivate.i()
OnTxUIActivate.i()
OnTxUIDeactivate.i()
TxGetText.i()
TxSetText.i()
TxGetCurTargetX.i()
TxGetBaseLinePos.i()
TxGetNaturalSize.i()
TxGetDropTarget.i()
OnTxPropertyBitsChange.i(dwMask.l, dwBit.l)
TxGetCachedSize.i()
EndInterface
#TXTBIT_ALLOWBEEP = $800 ; Enable/Disable beeping.
#COMFalse = 0
#COMTrue = ~#COMFalse ; -1
Procedure RichEditBeep(iEditorNr.i, fState.i = #False)
Protected iLib.i, *IIDTextServices.IID, *sIIDTextServices, iResult.i, iBeepState.i
Protected *ITextServices.ITextServices, *IRichEditOle.IUnknown
If fState
iBeepState = #COMTrue
Else
iBeepState = #COMFalse
EndIf
iResult = SendMessage_(GadgetID(iEditorNr), #EM_GETOLEINTERFACE, 0, @*IRichEditOle)
If Not iResult
Debug "Error SendMessage_(#EM_GETOLEINTERFACE)"
Else
iLib = OpenLibrary(#PB_Any, "msftedit.dll")
If iLib
*IIDTextServices = GetFunction(iLib, "IID_ITextServices")
If Not *IIDTextServices
Debug "Error GetFunction() IID_ITextServices"
; Else
; iResult = StringFromIID_(*IIDTextServices, @*sIIDTextServices)
; If Not (iResult = #S_OK)
; Debug "Error StringFromIID_()"
; Else
; Debug "IID_ITextServices: " + PeekS(*sIIDTextServices) ; {8D33F740-CF58-11CE-A89D-00AA006CADC5}
; CoTaskMemFree_(*sIIDTextServices)
; EndIf
EndIf
EndIf
If *IIDTextServices
iResult = *IRichEditOle\QueryInterface(*IIDTextServices, @*ITextServices)
*IRichEditOle\Release()
If Not (iResult = #S_OK)
Debug "Error QueryInterface() - " + Hex(iResult)
Else
*ITextServices\OnTxPropertyBitsChange(#TXTBIT_ALLOWBEEP, iBeepState)
*ITextServices\Release()
EndIf
EndIf
If iLib
CloseLibrary(iLib)
EndIf
EndIf
EndProcedure
Procedure Main()
Protected iWindowNr.i, iEditorNr.i
iWindowNr = OpenWindow ( #PB_Any, 0, 0, 600, 300, "Editor", #PB_Window_SystemMenu)
iEditorNr = EditorGadget ( #PB_Any, 0, 0, 600, 300 )
SetGadgetText (iEditorNr, "Test text ... use arrows and get the window blinking" )
RichEditBeep(iEditorNr, #False) ; Disable Beep.
; RichEditBeep(iEditorNr, #True) ; Enable Beep.
SetActiveGadget(iEditorNr)
Repeat
Until WaitWindowEvent ( ) = #PB_Event_CloseWindow
EndProcedure
Main()