Das last darfst du nur in der if-Bedingung setzen, sonst setzt du es auf einen niedrigeren Wert zurück und dein Array wird eventuell beim nächsten Durchlauf gekürzt.
Zudem knallt es böse, wenn der Eingabestring leer ist, deshalb empfehle ich dir folgendes:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var i: integer;
s1: string;
myASCIIarray: array of integer;
last:integer;
begin
listbox1.clear;
s1 := editEingabe.text;
// Beim ersten Durchlauf wird das Array dann automatisch auf die größe des ersten Zeichens gesetzt
// Ist der String leer, bleibt das Array auch leer und nichts passiert
last := 0;
for i := 1 to length(s1) do
begin
if last < ord(s1[i]) then
begin
setlength(myASCIIarray,ord(s1[i])+1);
last := ord(s1[i]);
end;
inc(myASCIIarray[ord(s1[i])]);
end;
for i := 0 to high(myASCIIarray) do
if myASCIIarray[i] > 0 then
listbox1.Items.add(chr(i)+': '+ IntToStr(myASCIIarray[i]));
end;