Показать сообщение отдельно
  #11  
Старый 12.03.2014, 16:05
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вариант от Пачеко - "Поток с доступом к глобальной переменной основной программы"
Код:
{ NOTE: Change GlobalStr from var to threadvar to see difference }
var
//threadvar
GlobalStr: string;

type
TTLSThread = class(TThread)

private
  FNewStr: string;

protected
  procedure Execute; override;

public
  constructor Create(const ANewStr: string);
end;

procedure SetShowStr(const S: string);
begin
if S = '' then
  MessageBox(0, PChar(GlobalStr), 'The string is...', MB_OK)
else
  GlobalStr := S;
end;

constructor TTLSThread.Create(const ANewStr: string);
begin
FNewStr := ANewStr;
inherited Create(False);
end;

procedure TTLSThread.Execute;
begin
FreeOnTerminate := True;
SetShowStr(FNewStr);
SetShowStr('');
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
SetShowStr('Hello world');
SetShowStr('');
TTLSThread.Create('Dilbert');
Sleep(100);
SetShowStr('');
end;

З.Ы. Приостановить/продолжить/грохнуть выполнение потока, насколько помню это ведь через Suspend/Resume/Terminate выполняется из главного потока сборки
Ответить с цитированием