Von hinten durch die Brust ins Auge:
Delphi-Quellcode:
procedure TMyThread.Execute;
var
dynform : TFrmGMaps;
begin
dynform := TFrmGMaps(Application.FindComponent(FrmMain.GmapThreadname));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Der Thread braucht offensichtlich ein TFrmGMaps-Objekt für seine Arbeit.
Dann wäre es sehr sinnvoll, wenn man dem Thread dieses Objekt von Aussen geben würde.
Dadurch, dass der Thread sich diese Info selbst besorgen muss, entsteht ein Kuddelmuddel.
Der Thread braucht und soll die Objekte "Application" und "FrmMain" nicht kennen.
Delphi-Quellcode:
TMyThread = class(TThread)
public
dynform : TFrmGMaps; // NEU <====
procedure execute; override;
end;
procedure TFrmGMaps.btn_querystartClick(Sender: TObject);
...
begin
...
// und Erzeugen sieht dann so aus
MThread := TMyThread.Create(True);
MThread.FreeOnTerminate := True;
MThread.OnTerminate := threadend;
MThread.dynform := self; // <===