Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.16;
Скачать: 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 вся ветка

Текущий архив: 2003.10.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
4-51548
V3L0M
2003-08-12 22:53
2003.10.16
как получить handle speedbutton а в чужой программе


1-51272
Son!K
2003-10-06 17:27
2003.10.16
Вывест в эдит...


3-51107
AndrewK
2003-09-25 13:00
2003.10.16
Порядковый номер строки в SQL запросе


14-51432
sapsi
2003-09-25 13:24
2003.10.16
Ремонт квартиры


3-51121
Николай
2003-09-25 10:03
2003.10.16
DBNavigator