Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Внизможно ли использовать один класс в разных модулях? Найти похожие ветки
← →
MadGhost (2004-02-15 12:29) [0]уважаемые мастера, подскажите как это сделать?
есть например модуль Unit10.pas в котором я описал какой то класс. Есть форма Unit1 и другая Unit2 как мне создать объект этого класса чтобы обе формы могли пользоваться им совместно?
← →
Digitman (2004-02-15 12:39) [1]unit1;
uses Unit10, ...;
....
unit2;
uses Unit10, ...;
← →
MadGhost (2004-02-15 13:25) [2]не совсем то, я имел в виду например создаешь объект в Unit1 т.е. в главной форме,
MyObject1:TMyObject; из Unit10
в Unit2 тоже также, но это же разные объекты получаются.
а надо один, и пользовать потоки тоже надо чтобы он обновлял переменные в этом объекте.
← →
Юрий Зотов (2004-02-15 13:46) [3]В unit10:
interface
type
TMyObject = class(...)
...
public
class function NewInstance: TObject; override;
procedure FreeInstance; override;
end;
implementation
var
MyObject: TMyObject;
class function TMyObject.NewInstance: TObject;
begin
if MyObject = nil then
Result := inherited NewInstance
else Result := MyObject
end;
procedure TMyObject.FreeInstance;
begin
inherited;
MyObject := nil
end;
Этот код не дает создать более одного экземпляра объекта. При попытках повторного создания будет возвращена ссылка на уже существующий экземпляр.
← →
Digitman (2004-02-15 13:59) [4]
> пользовать потоки тоже надо чтобы он обновлял переменные
> в этом объекте
без использования крит.секций не обойтись
В unit10:
interface
type
TMyObject = class(...)
public
class function NewInstance: TObject; override;
procedure FreeInstance; override;
SomeField: Integer;
end;
...
var
CritSect: TCriticalSection;
implementation
var
MyObject: TMyObject;
...
initialization
CritSect := TCriticalSection.Create;
finalization
CritSect.Free;
....
в поточной ф-ции :
CritSect.Enter;
try
TMyObject.NewInstance.SomeField := SomeValue;
finally
CritSect.Leave;
end;
← →
Defunct (2004-02-15 15:17) [5]Если используется всего один объект и больше не планируется создание новых. Можно создать его при инициализации модуля:
Unit Unit10;
Interface
TMyClass = class(_)
...
End;
Var MyObject : TMyClass;
Implementation
//..
//Реализация методов TMyClass
//..
Begin
// Инициализация модуля
MyObject := TMyClass.Create(_);
End.
← →
MadGhost (2004-02-16 13:49) [6]во, решпект огроменный, то что надо :) большое спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c