Page 1 of 1

index error and infinite loop

Posted: Wed Oct 10, 2007 3:58 am
by haroldh
tRichView 1.9.24

Sometimes when I load a document I get the following error:
EListError with message 'list index out of bound(0)'
and it looks like it is happening on line 480 of RVThread. After I OK through this error it just loops on

RVThread.pas on line 193 & 194 until I CTRL-F2

It seems to have to do something with LiveSpell but at this point I'm not 100%.

Any ideas on where I should look or what to change?

Posted: Wed Oct 10, 2007 4:31 am
by haroldh
I did download and install this:
http://www.trichview.com/resources/adrv3/adrv3.zip

Also my Addict Spell checker version is 3.3.1 Pro.

Still got the error, stepping through it I found that the error pops up in CRVFData on line 5910, the GetItemCoords function call.

Posted: Wed Oct 10, 2007 7:22 am
by Sergey Tkachenko
Try to upgrade to the latest TRichView version

Posted: Wed Oct 10, 2007 5:33 pm
by haroldh
I am, I am using 1.9.24. I downloaded it yesterday hoping to fix this problem. Was using 1.9.12 before.

I narrowed it down to a LiveSpelling issue. In my OnLoadDocument event I had this code:

if (AddictAutoLiveSpell.LiveSpelling) then
begin
RTFMemoPad.LiveSpellingMode:=rvlspOnChange;
RTFMemoPad.StartLiveSpelling;
end
else
RTFMemoPad.LiveSpellingMode:=rvlspManualStart;

If a document was loaded during the form's oncreate process I would get this error in a document that had a misspelling. So I changed it to this:

if (BHOActivated) and (AddictAutoLiveSpell1.LiveSpelling) then
begin
RTFMemoPad.LiveSpellingMode:=rvlspOnChange;
RTFMemoPad.StartLiveSpelling;
end
else
RTFMemoPad.LiveSpellingMode:=rvlspManualStart;

and in the form's OnActivate method I put this:

procedure TForm1.FormActivate(Sender: TObject);
begin
if not BHOActivated then
begin
if (AddictAutoLiveSpell1.LiveSpelling) then
begin
RTFMemoPad.LiveSpellingMode:=rvlspOnChange;
RTFMemoPad.StartLiveSpelling;
end;
end;
BHOActivated:=true;
end;

This way it wouldn't start the LiveSpell until the form was actually viewable. It isn't very clean but it seems to work. Could the document not have been drawn yet and thus the livespell can't find the word or something like that?

Posted: Wed Oct 10, 2007 7:29 pm
by haroldh
Well that didn't solve the entire problem, it still happens.

Everything works fine though if LiveSpell is turned off. But of course my users like LiveSpell so I'd love to know how to fix this.

Posted: Thu Oct 11, 2007 8:33 am
by Sergey Tkachenko
You cannot start live spelling when the TRichViewEdit is not formatted.
You cannot start it in TDBRichViewEdit.OnLoadDocument. This event occurs after the document is loaded, but before it is formatted.

Solutions:
1)
If RTFMemoPad.LiveSpellingMode=rvlspOnChange, live spelling will start after making any change in document.
2)
You can use call RTFMemoPad.StartLiveSpelling in event occuring after the document is loaded and formatted. I think table.AfterScroll can be used.

PS: I opened access to the protected sections of this forum for you account. You can download the latest version there (1.9.24 is not the latest version)