Добрый день. Решил эту проблему Frames.
Unit1 - главное окно программы с pagecontol
Unit2 - Frames - отдельная программа
Все работает но дело в том что: При создании переменной в Unit2 она становится глобальной и доступна в Unit1. Тем самым я не могу использовать такую систему из-за конфликта переменных.
Использовать переменные в классе как вариант, но при использовании какого либо компонента выскакивают ошибки.
Допустим мне нужно создать переменную во Frames (Unit2) при открытии программы.
Как это сделать? Если я пишу в главном окне программы:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
Frame21.CS := TCriticalSection.Create;
end;
А в Unit2:
Код:
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Vcl.Samples.Spin, SyncObjs;
type
TFrame2 = class(TFrame)
Button1: TButton;
Memo1: TMemo;
private
{ Private declarations }
public
CS: TCriticalSection;
{ Public declarations }
end;
Parser = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
end;
var
Frame: TFrame2;
CountAcc: integer;
Work: boolean;
implementation
{$R *.dfm}
constructor Parser.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;
procedure Parser.Execute;
begin
while Work do
begin
try
Frame.CS.Enter;
Inc(CountAcc);
//Прочий код
Frame.CS.Leave;
// Прочий код
except On E:Exception do begin
showmessage(e.Message);
sleep(1000);
end;
end;
end;
end;
end.
То при запуске потоков получаю ошибку в showmessage(e.Message);
Если я тупо создам в Unit2:
var
CS: TCriticalSection;
То переменная будет доступна в Unit1 без приставки Frame21.