Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

можно ли использовать один класс в разных модулях?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
1-93975
SHS
2004-02-17 09:27
2004.02.29
Сортировка строк


1-93939
Lapor
2004-02-07 15:51
2004.02.29
Ошибка EResNotFound


7-94211
Rentgen
2003-12-10 11:55
2004.02.29
Папка пуста?!


14-94123
Думкин
2004-02-08 06:35
2004.02.29
С днем рождения! 8 февраля.


4-94238
Eagle Owl
2003-12-16 22:24
2004.02.29
Сжатие файла...