Du hast zum Teil den Code verstanden, ein Teil wohl nicht.
Zum Beispiel bringt es nichts die Zeile zu wiederholen. Sie gilt für alle Items gleich:
ListBox1.ItemHeight := 2 + ImageList1.Height + 2;
. Das Gleiche gilt für ListBox1.Font.Name und ListBox1.Font.Size. Es ist eine Einmalige Einstellung.
Die Funktion ExtractSubStr hebe ich nur gebraucht um Beispieldaten zu füllen. Wenn man es nicht braucht, dann weg damit.
Kein Fehler, aber bring etwas Struktur in deinen Code. Unübersichtlichkeit ist der erste Schritt zu Fehlern.
Delphi-Quellcode:
begin
if FileExists(path+ Edit1.Text+'.txt') then
begin
hallo:=TStringlist.Create;
Kein Fehler, aber schütze deine Objekte mit
try finally end;
Zuerst programmieren lernen und dann lernen es richtig zu machen (das hat mal einer so gepostet als ich ihm try finally vorschlug) ist nicht der richtige Weg.
Ohne
try finalle end;
erzeugt den Programm im Fehlerfall Speicherlecks. Und wie ich mir die Prozedur angucke, ist sie geradezu prädestiniert dazu Fehler zu produzieren. Da reicht nur eine Datei die deine StringList hallo nicht mit ausreichend Daten füllt und schon bricht die Prozedur zusammen. Mit einem Speicherleck. Hier zuerst schützen, dann entweder vorher abfragen ob hallo Count genug Items liefert, oder besser bei jedem Item explizit fragen. So kann man wenigstens auf die Zeilen zugreifen die die Textdatei liefert.
Zu deinem Problem mit Jpg, da gibt es zwei Möglichkeiten: die erste ist alle Daten auf der Festplatte vorher in Bmp und 48x48 zu konvertieren oder als Jpg zu laden, zu Bmp konvertieren und dann die Größe anpassen. Die Funktion die du suchst heißt JpgToBmp oder Jpg2Bmp oder statt Jpg auch JpegToBmp usw.
Am besten wäre es du postest eine Beispieldatei, dann weiß man was du laden willst.