Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Rich Edit problems.

18 views
Skip to first unread message

Olav

unread,
Aug 31, 2010, 8:20:59 AM8/31/10
to
Anyone here who is experienced with Rich Edit Controls?

I'm having problems with the %EM_FINDTEXTEX message. The problem is that it
reports not found no matter how I try to do it.

Anyone any clue/tips to share?

LOCAL ft AS FINDTEXTEX
LOCAL FoundAt as long
'local szFind as asciiz * 1024

'szFind = varptr(SearchTerms(1)) ' SearchTerms(1) is a dynamic string
value
ft.lpstrText = STRPTR(SearchTerms(1)) 'szFind
ft.chrg.cpMin = 0 ' search from start
ft.chrg.cpMax = -1 ' to the end of the document.. I believe
FoundAt = Sendmessage(hEdit,%EM_FINDTEXTEX,%FR_DOWN,VARPTR(ft))
IF ft.chrgText.cpMin = -1 AND ft.chrgText.cpMax = -1 THEN
? "NOT FOUND"
END IF
IF FoundAt <> -1 THEN
' if the search operation finds a match, the chrgText member of the
FINDTEXTEX structure returns the range of
' character positions that contains the matching text.
? "FOUND"
END IF
$DEBUG PRINT "FoundAt:" + STR$(FoundAt)
--
Olav


glrobi...@yahoo.com

unread,
Sep 6, 2010, 1:59:26 PM9/6/10
to
From Powerbasic forum, hope this helps.

'Borje Hagsten, Member
'posted April 12, 2005 12:44 PM

First of all - use %EM_FINDTEXTEX and the FINDTEXTEX structure
instead.
Always best to use the ..EX.. calls and structures with later
versions.

Now, what MS speaks quiet about is that the start parameter must be
like
current caret position or length of document instead of zero when
searching
upwards. DDT example, extracted from a larger code:


LOCAL lRes AS LONG, ft AS FINDTEXTEX

CONTROL SEND CBHNDL, %IDC_RICHEDIT, %EM_EXGETSEL, 0,
VARPTR(ft.chrg)
ft.chrg.cpmax = -1
ft.lpstrText = STRPTR(SearchString)

' CBWPARAM = 0, search upwards. CBWPARAM = 1, search downwards
(%FR_DOWN).
' CBWPARAM can also be combined with %FR_WHOLEWORD and
%FR_MATCHCASE, etc.
CONTROL SEND CBHNDL, %IDC_RICHEDIT, %EM_FINDTEXTEX, 0,
VARPTR(ft) TO lRes

IF result > -1 THEN
CONTROL SEND CBHNDL, %IDC_RICHEDIT, %EM_EXSETSEL, 0,
VARPTR(ft.chrgText)
CONTROL SET FOCUS CBHNDL, %IDC_RICHEDIT
ELSE
MSGBOX "Not found"
END IF

Olav

unread,
Sep 17, 2010, 11:30:36 AM9/17/10
to

<glrobi...@yahoo.com> skrev i melding
news:e64d31be-aed7-4058...@b34g2000yqm.googlegroups.com...

Sorry, but that didn't help. The clue was found to be Unicode or not
Unicode.
The code below - based on a Borje Hagsten routine, I think - accomplished
what I was looking for

DO
INCR idx
s = UCODE$(SearchTerms(idx))
ft.lpstrText = STRPTR(s)
ft.chrg.cpMin = 0 ' from the beginning of the document - I believe
ft.chrg.cpMax = -1 ' to the end of the document - I believe
FoundAt = Sendmessage(hRichEdit,%EM_FINDTEXTEXW,%FR_DOWN,VARPTR(ft))
$DEBUG PRINT "FoundAt:" + STR$(FoundAt) + " " +
STR$(ft.chrgText.cpMin) + " " + STR$(ft.chrgText.cpMax)
WHILE FoundAt <> -1
'INCR cnt


' if the search operation finds a match, the chrgText member of the
FINDTEXTEX structure returns the range of
' character positions that contains the matching text.

SendMessage hRichEdit, %EM_EXSETSEL, 0,VARPTR(ft.chrgText)
' wParam ad. %EM_HIDESELECTION -> Value specifying whether to hide
or show the selection. If this parameter is zero,
' the selection is shown. Otherwise, the selection is hidden.
Sendmessage hRichEdit, %EM_HIDESELECTION, 1, 0
CALL SetRichTextColor(hRichEdit,&HFF) ' a Borje Hagsten
routine
ft.chrg.cpMin = FoundAt + LEN(s)
FoundAt = Sendmessage(hRichEdit,%EM_FINDTEXTEXW,%FR_DOWN,VARPTR(ft))
'$DEBUG PRINT "FoundAt:" + STR$(FoundAt) + " " +
STR$(ft.chrgText.cpMin) + " " + STR$(ft.chrgText.cpMax)
WEND
'$DEBUG PRINT STR$(cnt)
LOOP WHILE idx < UBOUND(SearchTerms())


0 new messages