Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.025 c
14-94149
Lancelot
2004-02-05 14:39
2004.02.29
Игрушка TRON 2.0


6-94085
Perf
2003-11-17 18:47
2004.02.29
Прога, которая ищет все компы в локальной сети


14-94175
Sergo
2004-02-07 10:19
2004.02.29
RW (Nero)


3-93794
staryx
2004-02-03 15:38
2004.02.29
Работа с БД с запросов.


1-93877
Term
2004-02-16 12:34
2004.02.29
Как объеденить ячейки в экселе...




   Наверх