Dein Sourcecode ist (sorry für die harten Worte) ein richtiger Saustall.
Ich geb dir mal ein paar Beispiele:
die Funktion AnsiToUtf8 - warum tust du diese Funktion nicht in eine eigene
Unit.
Diese
Unit könnte z.B. UnicodeUtils heisen.
In dieser
Unit ist natürlich auch die Umkehrfunktion Utf8ToAnsi enthalten.
Und schon sieht deine Hauptunit etwas aufgeräumter aus.
Nächstes Problem, deine globalen Variablen.
Delphi-Quellcode:
var
Form1: TForm1;
// alles von HIER
ColumnToSort: Integer;
LastSorted: Integer;
SortDir: Integer;
LvSortStyle: TCustomSortStyle;
LvSortOrder: array[0..4] of Boolean;
// bis HIER
Alle markierten Variablen gehören unter den Abschnitt
private von deinem Form.
Und folgender Sourcecode
Delphi-Quellcode:
Function Reinigen (Liste:TStringlist): Tstringlist;
begin
// Satzzeichen in Leerzeichen umwandeln
liste.Text:=stringreplace(liste.Text,'.',' ',[rfReplaceAll, rfIgnoreCase]);
liste.Text:=stringreplace(liste.Text,',',' ',[rfReplaceAll, rfIgnoreCase]);
// u.s.w. u.s.w
ist natürlich sehr umständlich und langsam.
Immer wenn du viele gleiche Zeilen siehst, dann muss das ein Warnsignal sein, dass da was nicht stimmt.
Der Sourcecode "stinkt" sozusagen.
Wie kann man das besser machen?
Z.B. so:
Delphi-Quellcode:
procedure Reinigen(Liste:TStrings);
var
s : string;
i : integer;
begin
s := liste.Text; // mit Zwischenvariablen kann man besser arbeiten
for i := 1 to Length(s) do
begin
if s[i] in ['.', ',', ';', '?', .... {hier alle anderen Zeichen}] then
s[i] := ' ';
end;
Liste.Text := s;
end;
Das war jetzt Hilfe zur Selbsthilfe.
Ich kann dir nicht sagen, wo bei deinem Sourcecode der gesuchte Fehler ist,
weil es an allen Ecken und Enden klemmt.
Das ist jetzt nicht bös gemeint; jeder hat mal klein angefangen.
Was ich damit sagen will, du musst erst mal gründlich aufräumen, bevor du deinen Fehler suchen kannst.
Gut möglich, dass während der Aufräumarbeit der Fehler von selbst verschwindet.