Das hätt' ich auch gedacht.
Vielleicht haben die das irgendwann umgebaut?
Bei TStringList wird ein EStringListError "Listenindex überschreitet das Maximum (%d)" ausgelöst.
Beim TMemoStrings (das im TMemo.Lines) wurde einfach die Fehlerprüfung vergessen, bzw. man hat vergessen die
Exception einzubauen und verwirft den Fehler ganz böswillig.
Delphi-Quellcode:
function TMemoStrings.Get(Index: Integer): string;
var
Text: array[0..4095] of Char;
begin
Word((@Text)^) := Length(Text);
SetString(Result, Text, SendMessage(Memo.Handle, EM_GETLINE, Index, Longint(@Text)));
end;
EM_GETLINE > The return value is zero if the line number specified by the wParam parameter is greater than the number of lines in the edit control.
Delphi-Quellcode:
procedure TMemoStrings.Put(
Index: Integer;
const S:
string);
var
SelStart: Integer;
begin
SelStart := SendMessage(Memo.Handle, EM_LINEINDEX,
Index, 0);
if SelStart >= 0
then begin
SendMessage(Memo.Handle, EM_SETSEL, SelStart, SelStart + SendMessage(Memo.Handle, EM_LINELENGTH, SelStart, 0));
SendTextMessage(Memo.Handle, EM_REPLACESEL, 0, S);
end
{else raise exception .... wurde vergessen}
end;
EM_LINEINDEX > it is –1 if the specified line number is greater than the number of lines in the edit control.
Bei praktisch jedem einzelnen SendMessage/SendTextMessage wurde vergessen das Result zu prüfen.
(
außer bei dem einen SendMessage(LINEINDEX))
Es kann natürlich auch sein, daß man es auch bei anderen Komponenten vergessen oder wieder ausgebaut hat.
Hab nicht nachgesehn, aber ich hoffe die machen nicht beim FMX mit diesem Mist so weiter.