Вниз
Скачать: CL | DM;

Интерфейс для TForm   Найти похожие ветки 

 
@Ujin ©   (2003-10-03 18:20) [0]

Пытаюсь слепить интерфейс для управления индикаторами процессов (что-то типа IProgress). Реализую интерфейс следующим образом:

TProgressForm = class(TForm, IProgress)
...
...
end;

Работаю с интерфейсом вот так:
IProgress := TProgressForm.Create(Application);
IProgress.Show;
...
IProgress := nil;

Форма не умирает. Видимо механизм подсчета ссылок страбатывает не верно! Но почему? Ведь TForm наследован от TComponent, а TComponent описан как:

TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)

Ничего не понимаю... Кто подскажет?


 
Юрий Федоров ©   (2003-10-03 18:26) [1]

Аддреф и релиз переопредели в форме.
по аналогии с TinterfacedObject
Временем жизни компонентов управляет owner, а не RefCount


 
@Ujin ©   (2003-10-03 18:31) [2]

Подскажи пожалуйста какбы это грамотно сделать!? Если "слизать" с TInterfacedObject:
function TInterfacedObject._AddRef: Integer;
begin
Result := InterlockedIncrement(FRefCount);
end;

function TInterfacedObject._Release: Integer;
begin
Result := InterlockedDecrement(FRefCount);
if Result = 0 then
Destroy;
end;

Все срабатывает. Но при повторном использовании получаю Priveleged instruction. Что я не так сделал...


 
@Ujin ©   (2003-10-03 18:34) [3]

На счет времени жизни компонента.
Т.е. если созавать его так
IProgress := TProgressForm.Create(Application);
выходит, что он будет жить на протяжении всего времени работы приложения?
А если попробовать так:
IProgress := TProgressForm.Create(ParentForm);
Также ничего не выходит.


 
Юрий Федоров ©   (2003-10-03 19:23) [4]

Не знаю.
Я делал в точности как [2]
И все работает
stdcall; не забыл ?


 
me   (2003-10-03 19:34) [5]

var
frmProgress : TProgressForm;
intProgress : IProgress;
...
frmProgress := TProgressForm.Create(Application);

if frmProgress.GetInterface(IToolBarCommands, intProgress) then
intProgress.DoWhatYouNeed();
...
intProgress := nil;



Страницы: 1 вся ветка

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



Память: 0.46 MB
Время: 0.013 c
1-51320
patit
2003-10-06 08:16
2003.10.16
предпросмотр документа


14-51420
I'm sorry
2003-09-26 19:53
2003.10.16
Это я аттаковал форум


1-51236
Tommy
2003-10-03 15:25
2003.10.16
опять потоки....


1-51173
Сергей Резников
2003-10-05 15:38
2003.10.16
Иконка по хэндлу


1-51248
vlgrig1961
2003-10-03 08:12
2003.10.16
Как у TEdit поменять цвет и стиль рамки?




   Наверх