In forms.IsAccel I suspect an bug, which manifests in very rare cases only:

  position := UTF8Pos(AmpersandChar, ACaption);
This is the position of the &

...

      UTF8Delete(ACaption, 1, position+1);

This IMO removes the character *after* the ampersand, so that

      position := UTF8Pos(AmpersandChar, ACaption);

finds the same & over and over again, while it should find the next one.


Now for some questionable constructs:

A simple Pos would be sufficient, because '&' is an ASCII character.

It would be sufficient to replace the found '&' by something else, in place.

Or a loop until the last char could be used, which eliminates any string time and memory consuming string manipulation.

DoDi


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to