Also dein Problem ist, dass du die Liste zwar Ordnungegemäß erstellst, sie auch lädst aber dummerweise direkt hinterher gleich wieder frei gibst. Damit bist du dann genau da wo du auch am Anfang gewesen bist. Ich würde im Übrigen keine globale Variablen nehmen sondern diese als Bestandteil des Forms implementieren.
Um mal mit Köpfchen zu Nageln würde ich es so machen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private fList: TStringList; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin fList := TStringList.Create; fList.LoadFromFile (''); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin fList.Free; end;
procedure TForm1.Button1Click(Sender: TObject); begin if fList.Count then Label1.Caption := fList[Random(fList.Count)]; end;
end. |
Im OnCreate wird die Liste erstellt und mit Leben gefüllt und im OnClose wird sie wieder gelöscht. In der Zwischenzeit kannst du damit machen was du willst.
Ich würde den fList.Count immer abfragen bevor du auf die Liste zugreifst. Wenn du Random mit 0 aufrufst befindet sich dessen resultat zwischen 0 und 1 auf Fließkommabasis. Abgesehen davon fürt ein Zugrif auf ein nicht vorhandenes Element der Liste dazu, dass du einen Fehler bekommst. Was bei einer ladbaren Textadatei schon passieren kann, wenn jemand dran gedreht hat.

Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.