Вниз
Скачать: 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.017 c
14-51513
Дмитрий
2003-09-27 08:02
2003.10.16
ПОМОГИТЕ!!!


3-51108
diokant
2003-09-24 13:27
2003.10.16
Как обеспечить отображение значения поля, измененного триггером


3-51105
RomDron
2003-09-24 16:56
2003.10.16
DbGreed... Как сохранить данные?


1-51224
@Ujin
2003-10-03 18:20
2003.10.16
Интерфейс для TForm


1-51211
kosm
2003-10-02 13:11
2003.10.16
Кто как реализовывал интерфейс как outlook?




   Наверх