WebMemo OnChange event not firing correctly

There is no need to differentiate. The event is called "OnChange". That literally means: "when a change occurs". It shouldn't matter why the change occurred, or what triggered the change. The point is that the memo changed.

If you feel it's really so important to differentiate between how the change occurs, then you should create two different events to handle them.

And what about a situation where the memo changes, but it's not my code that makes the change? How am I supposed to know that a change has occurred? What if the memo changes because of code from TMS WEB Core? Please continue reading, and you'll see what I mean.

Borland has done it this way from day one, and it's definitely the right way to do it.

Consider my current situation:

I'm using a WebOpenDialog to load a text file into a memo. Thanks to Julio, I finally got it working.

So now that the user has selected a text file and the memo has been populated with the text, I need to know about it. The OnChange event handler is where I would expect to be notified. But because TMS decided that Delphi's implementation is "old and not good design", I can't rely on the OnChange event handler. So even though the memo did, in fact, change, I won't know about it.

To work around it, I have to introduce a WebTimer into my program to constantly monitor the contents of my memo several times per second, thereby wasting resources.

When you make changes - especially breaking changes - to how Delphi has worked for 25 years, it will always create problems for your users, even if you can't foresee those problems.