el propósito de esta lógica. Publicaré como lo haría. A ver si te ayuda:
Code: Select all | Expand
// C:\FWH\SAMPLES\VICTOR2.PRG
/*
* Project: xFF
* File: xFF.prg - Original. Modificado por: kapiabafwh@gmail.com
* Description:
* Author: JMSilva
* Date: 06-25-2014
*/
#Include "Fivewin.ch"
FUNCTION Main()
LOCAL oFont, oFnt, oDlg, oMemo, oBtnSair, oIco, aGrad, oKey, oBtnFind, ;
cText, cKey := Space( 20 )
SetBalloon( .T. )
SkinButtons()
// Color en el MEMO.
TGet():bColorBlock := { |oGet| IF( oGet:lFocused, { CLR_BLACK, CLR_HCYAN }, ;
IF( .NOT. oGet:lActive, { CLR_RED, CLR_YELLOW }, ;
{ CLR_BLACK, CLR_WHITE } ) ) }
cText := MemoRead( "TEXTO.txt" ) // pode ser campo memo
aGrad := { { 0.30, nRGB( 221, 245, 255 ), nRGB( 192, 221, 255 ) }, ;
{ 0.50, nRGB( 192, 221, 255 ), nRGB( 221, 245, 255 ) } }
DEFINE FONT oFont NAME "TAHOMA" SIZE 00, - 12 BOLD
DEFINE FONT oFnt NAME 'TAHOMA' SIZE 00, - 12 BOLD
DEFINE ICON oIco FILENAME "..\icons\customer.ico"
DEFINE DIALOG oDlg TITLE "Pesquisa com GET TEXT" SIZE 680, 480 ICON oIco ;
GRADIENT aGrad FONT oFont STYLE nOR( WS_SYSMENU, WS_MINIMIZEBOX )
IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
Set( _SET_INSERT, ! Set( _SET_INSERT ) )
ENDIF
@ 4, 3 GET oMemo VAR cText MEMO PIXEL SIZE 330, 192 OF oDlg FONT oFont ;
UPDATE
oMemo:bGotFocus := {|| oMemo:SetSel( 0, 0 ) }
oMemo:lReadOnly := .T. // nÆo edita
@ 13.10, 07 SAY "<Click> na Lupa Para Procurar: " OF oDlg UPDATE ;
COLORS METRO_GREEN, CLR_WHITE TRANSPARENT FONT oFnt
@ 13.85, 1 SAY "PESQUISA: " OF oDlg UPDATE COLORS CLR_HBLUE, CLR_WHITE ;
TRANSPARENT FONT oFont
@ 16, 5 GET oKey VAR cKey PICTURE "@!" SIZE 150, 12 OF oDlg ;
BITMAP "..\bitmaps\Find2.bmp" ;
ACTION ( Find( oMemo, Trim( cKey ), .T. ), oBtnFind:Enable() )
oKey:cToolTip := "Digite o Texto a Procurar"
oKey:bKeyChar := {|| oBtnFind:Disable() }
oKey:lBtnTransparent := .T.
oKey:lAdjustBtn := .T.
@ 203, 195 BTNBMP oBtnFind PROMPT "&Próximo" SIZE 50, 18 OF oDlg ;
LEFT 2007 FLAT FILENAME "../bitmaps/Next.bmp" ;
ACTION Find( oMemo, Trim( cKey ), .F. ) WHEN( Find() )
oBtnFind:cToolTip := " Próximo Texto a Procurar"
oBtnFind:Disable()
@ 203, 290 BTNBMP oBtnSair PROMPT " &Salir" SIZE 40, 18 OF oDlg ;
2007 FLAT LEFT FILENAME "../bitmaps/Exit.bmp" ACTION( oDlg:End() )
oBtnSair:cToolTip := " Salida - Exit - Cancelar"
oBtnSair:lCancel := .T.
ACTIVATE DIALOG oDlg CENTERED ON INIT( XFOCUS( oKey ) )
IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
Set( _SET_INSERT, ! Set( _SET_INSERT ) )
ENDIF
oFont:End()
oFnt:End()
RETURN NIL
FUNCTION Find( oMemo, cFind, lNew )
LOCAL nIndex := 0
STATIC nStart := 0
IF PCount() == 0 ; RETURN( nStart > 0 ) ; ENDIF // when
IF lNew ; nStart := 1; ENDIF // start
nIndex := At( Trim( cFind ), Upper( oMemo:cText ), nStart, Len( oMemo:cText ) )
IF nIndex > 0
oMemo:Setfocus() // seta o focu
oMemo:SetPos( nIndex - 1, nIndex ) // posiciona
oMemo:SetSel( nIndex - 1, nIndex + Len( Trim( cFind ) ) - 1 )
RESetSelection( oMemo:hWnd, nIndex + Len( Trim( cFind ) ), nIndex ) // faz a rolagem do texto
oMemo:Change()
nSTART := nIndex + Len( Trim( cFind ) )// para continuar a pesquisa
ELSEIF lNew
MsgStop( "A palavra: " + cFind + " não foi localizada", "Find" )
oMemo:SetSel( 0, 0 )
nStart := 1
ELSE
MsgStop( "Nenhuma outra ocorrência foi encontrada", "Find" )
nIndex := nStart - Len( Trim( cFind ) )
oMemo:SetPos( nIndex - 1, nIndex ) // posiciona
ENDIF
RETURN( .T. )
FUNCTION xFocus( oObj )
xSetFocus( oObj )
xSetFocus( oObj )
RETURN( .T. )
FUNCTION xSetFocus( oObj )
LOCAL _oWnd := oObj:oWnd, _oTempo := ""
DEFINE TIMER _oTempo INTERVAL 10 OF _oWnd ;
ACTION ( oObj:SetFocus(), _oTempo:End() )
ACTIVATE TIMER _oTempo
RETURN( .T. )
// FIN / END
Regards, saludos.