procedure TForm1.Button4Click(Sender: TObject);
var
i,count:integer;
thisstring,laststring:string;
begin
ListBox1.Sorted := true;
count := 1;
lastString := '';
for i:=0 to ListBox1.Items.Count-1 do begin
thisString := ListBox1.Items[i];
if thisString = lastString then
count := count + 1
else
if lastString <> '' then begin
ListBox3.Items.Add(IntToStr(count)+ '---' +lastString);
count := 1;
end;
lastString := thisString;
end;
if count > 1 then
ListBox3.Items.Add(IntToStr(count)+ '---' +lastString);
end;
burada iki hata olduğunu düşündüğüm nokta var. lastString := ''; diyorsun ve if lastString <> '' diyorsun. Bu birinci olasılık ve yüksek ihtimal diğer olasığın ise count değişkenin değeri 1 den başlatıyorsun. Listboxtaki ilk elemanın değeri sıfırdır. Dolayı ile sen count:=1 diyerek döngü başlattığında aslında ikinci satırdan başlatıyorsun.
if count > 1 then
ListBox3.Items.Add(IntToStr(count)+ '---' +lastString);