Die Frage ist auch/eher, warum muß in CanChange sooft ein ResourceString ausgelesen werden?
Weil man den String eben unter "resourcestring" stehen hat. Da handelt man sich schnell unnötiges Resourcestring-Laden ein:
Delphi-Quellcode:
resourcestring
RsMyString = 'Hallo Welt!';
var
I: Integer;
SL: TStrings;
begin
// ...
for I := 0 to 10000 do
if SL[I] = RsMyString then ; // << bei jedem Durchlauf wird LoadResString(@RsMyString) aufgerufen
end;