unit uParent;{$mode objfpc}{$H+}interfaceuses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, uChild;type { TfParent } TfParent = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var fParent: TfParent;implementation{$R *.lfm}{ TfParent }procedure TfParent.Button1Click(Sender: TObject);var OpenChild: TfChild;begin OpenChild:= TfChild.Create(nil); OpenChild.ShowModal; ShowMessage('Child Closed');end;end.
unit uChild;{$mode objfpc}{$H+}interfaceuses Classes, SysUtils, Forms, StdCtrls;type { TMyThread } TMyThread = class(TThread) private fStatusText: string; procedure ShowStatus; protected procedure Execute; override; public constructor Create(CreateSuspended: boolean); end; TfChild = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end;var fChild: TfChild;implementation{$R *.lfm}{ TfChild }procedure TfChild.Button1Click(Sender: TObject);var MyThread : TMyThread; begin MyThread := TMyThread.Create(True); MyThread.Resume; end;procedure TMyThread.ShowStatus;begin fChild.Caption := fStatusText; //<---- problem here!end;procedure TMyThread.Execute;begin fStatusText := 'Starting'; Synchronize(@Showstatus);end;constructor TMyThread.Create(CreateSuspended: boolean);begin FreeOnTerminate := True; inherited Create(CreateSuspended);end;end.
procedure TMyThread.ShowStatus;begin openChild.Caption := fStatusText; end;
procedure TfParent.Button1Click(Sender: TObject);begin OpenChild:= TfChild.Create(nil); OpenChild.ShowModal; ShowMessage('Child Closed'); OpenChild.Free; // <--- HEREend;
do not forget that which you create you must also destroy
Ok I write Destroy/destructor code...Oké Írok lezáró részeket (Destroy)...