Текущий архив: 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.45 MB
Время: 0.008 c