Разделы type

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

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

Разделы type

Сообщение arriah » 19.07.2016 23:56:10

Все же вняв коллективному мнению и разуму, решил отказаться от модальных окон (но как бы там ни было, опыт все же получен), но не от потоков. В связи с этим вопросы по секции 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"


Как использовать эти секции, что бы не плодить кучу переменных и не использовать глобальные?
arriah
новенький
 
Сообщения: 94
Зарегистрирован: 29.07.2015 16:42:35

Re: Разделы type

Сообщение runewalsh » 20.07.2016 00:24:24

Например, передавать данные потоку в конструкторе и сохранять в полях. Т. е.
Код: Выделить всё
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 (это выполнит их из главного потока).
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Re: Разделы type

Сообщение arriah » 20.07.2016 01:36:49

Понятно, попробую. Спасибо
arriah
новенький
 
Сообщения: 94
Зарегистрирован: 29.07.2015 16:42:35


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 248

Рейтинг@Mail.ru