Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.09.2013, 21:15
makar3000 makar3000 вне форума
Прохожий
 
Регистрация: 14.04.2013
Сообщения: 7
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Добрый день. Решил эту проблему 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.

Последний раз редактировалось M.A.D.M.A.N., 01.09.2013 в 21:24.
Ответить с цитированием
  #2  
Старый 02.09.2013, 00:39
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Прописывать переменную в секции implementation.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter