Разделы type

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
arriah
новенький
Сообщения: 94
Зарегистрирован: 29.07.2015 15:42:35

Разделы type

Сообщение arriah »

Все же вняв коллективному мнению и разуму, решил отказаться от модальных окон (но как бы там ни было, опыт все же получен), но не от потоков. В связи с этим вопросы по секции type (хотя это не только к потокам относится)

В секции есть разделы private, protected, public
Дабы не использовать глобальные переменные между классами решил разместить их в соответствующих секциях: для примера:

Код: Выделить всё

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    Function FindStr(SourceStr,StartSymbol,EndSymbol:String):string;
    { public declarations }
  end;

type

  { strTHread }

  strTHread=class(TThread)
  public
    procedure execute; override;
end;
 
...
function TForm1.FindStr(SourceStr, StartSymbol, EndSymbol: String): string;
Begin
end;

procedure strTHread.execute;
begin
  FindSTR('test','e','t');
end;   
     


Но компилятор ругается:

Код: Выделить всё

main.pas(63,3) Error: Identifier not found "FindSTR"


Как использовать эти секции, что бы не плодить кучу переменных и не использовать глобальные?
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Например, передавать данные потоку в конструкторе и сохранять в полях. Т. е.

Код: Выделить всё

StrThread = class(TThread)
  constructor Create(newForm: TForm1);
protected
  procedure Execute; override;
private
  form: TForm1;
end;

constructor StrThread.Create(newForm: TForm1);
begin
  form := newForm;
  inherited Create(true); // CreateSuspended
end;

procedure StrThread.Execute;
begin
  form.FindStr('test', 'e', 't');
end;
Но лучше не форму, а что-то ближе к задаче, параметры FindStr, например.

P.S. Методы, обновляющие GUI из другого потока, нужно вызывать через Synchronize (это выполнит их из главного потока).
arriah
новенький
Сообщения: 94
Зарегистрирован: 29.07.2015 15:42:35

Сообщение arriah »

Понятно, попробую. Спасибо
Ответить