Probiere es mal so (Code funktioniert natürlich nicht 1:1, ein wenig überlegen gehört auch zum Programmieren):
Delphi-Quellcode:
type
TMyThread = class(TThread)
private
FText: string;
protected
procedure Execute; override;
public
constructor Create(const AText: string);
end;
{ TMyThread }
constructor TMyThread.Create(const AText: string);
begin
FText := AText; // initialisieren
inherited Create(False); // und starten
FreeOnTerminate := True;
end;
procedure TMyThread.Execute;
begin
// FText ist hier nun verfügbar
CalculateQuickbarArray(FText); // FText statt myMemo.Text an ParseRegExpr() übergeben
Synchronize(ParseQuickBar); // ParseQuickBar sollte nicht mehr viel machen!
end;
...
type
TForm1 = class(TForm)
...
private
FMyThread: TMyThread;
procedure MyThreadTerminated(Sender: TObject);
end;
procedure TForm1.MyThreadTerminated(Sender: TObject);
begin
FMyThread := nil; // neuen Thread in MyMomeKeyDown() erlauben
end;
procedure TForm1.MyMemoKeyDown(...)
begin
if not Assigned(FMyThread) then // wenn im Moment kein anderer Thread läuft ...
begin
FMyThread := TMyThread.Create(myMemo.Text); // ... einen neuen Thread starten
FMyThread.OnTerminate := MyThreadTerminate;
end;
end;