Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Как мне удалить себя внутри себя?   Найти похожие ветки 

 
буржуй   (2006-02-03 17:31) [0]

Следующая ситуация. Есть некий навигатор с кучей элементов внутри себя. На каждом элементе находится веббраузер с загруженной в run-time сгенерированной страничкой. На страничке ряд ссылок, ниже привожу обработчик клика по гиперссылке мини-браузера:

procedure TALNavigatorItem.BeforeNavigate2(Sender: TObject;
 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
 Headers: OleVariant; var Cancel: WordBool);
const
AB = "about:blankrubric_";
var
myRubric: String;
RIndex,i: Integer;
Contacts: TIntegerList;
begin
myRubric:=URL;
 Delete(myRubric,1,Length(AB));
try
 RIndex:=StrToInt(myRubric);
 myRubric:=Self.FMegaContact.Rubrics[RIndex];
 //--
 Contacts:=TIntegerList.Create;
 ADOModule.GetCIndexByRubric("Контакты",myRubric,Contacts);
 MainForm.Navigator.ClearItems; // <-- убийство всех экземпляров включая этот
 for i:=0 to Contacts.Count-1 do
  FNavigator.AddItemWInfo(Contacts[i]);
 Contacts.Free;
except
end;
Cancel:=True;
end;


Как мне удалить себя внутри себя?

Как обычно делается подобное? Просто если я вынесу сей метод из public-раздела класса TALNavigatorItem, то возникнит проблема с передачей информации именно текущего экземпляра. Я имею в виду

myRubric:=Self.FMegaContact.Rubrics[RIndex];

Как разрешаются подобные ситуации, что можете посоветовать?


 
Игорь Шевченко ©   (2006-02-03 17:33) [1]


> Как мне удалить себя внутри себя?


Что именно имеется в виду ?


 
буржуй   (2006-02-03 17:37) [2]

MainForm.Navigator.ClearItems; // <-- убийство всех экземпляров включая этот

данная строка приведет приблизительно к следующему:

for i:=0 to MainForm.Navigator.Count-1 do
FreeAndNil(MainForm.Navigator.Items[i]);

в результате проскакивает периодически AV.
либо я дурень и у меня AV возникает не из-за того что я в реализации метода класса удаляю  "текущий" экземпляр класса...


 
Германн ©   (2006-02-03 17:40) [3]

for i:=MainForm.Navigator.Count-1 downto 0  do


 
буржуй   (2006-02-03 17:43) [4]

Германн ©   (03.02.06 17:40) [3]
во-первых я их не удаляю из списка, а только освобождаю ) тут вы несколько не правы =) во-вторых вопрос то ни в этом заключается. смотрим subj + describe ;)

да и пример удаления я привел просто так. так что ваш [3] несколько неуместен.


 
буржуй   (2006-02-03 19:01) [5]

умоляю, подсобите! думал конкурс изменит отношение к новичкам. может я вопрос плохо сформулировал?


 
Zeqfreed ©   (2006-02-03 19:16) [6]

[5] буржуй   (03.02.06 19:01)

> вопрос плохо сформулировал


 
буржуй   (2006-02-03 19:39) [7]

может subj плохо сформулирован?

в общем имею код приведенный в [0].
это реализация одного из методов TALNavigatorItem в теле который освобождается объект, который этот метод вызвал. в результате чего (насколько я понял ситуацию) вылетает AV. т.е. я пытаюсь убить себя (Free) будучи в теле себя (метод BeforeNavigate2). как избежать подобной ситуации учитывая приведенные в [0] данные.


 
SergP ©   (2006-02-03 21:12) [8]


> я пытаюсь убить себя (Free) будучи в теле себя


Возможно тебе нужен PostMessage ?


 
буржуй   (2006-02-03 21:16) [9]

SergP ©   (03.02.06 21:12) [8]
можно поподробнее?

имеете в виду описать пользовательский message
WM_FREEITEM = WM_USER + 1

и PostMessage"м убивать контрол? посылая WM_FREEITEM. в свою очередь реализовав отлов мессаги.

я правильно вас понял?


 
Gero ©   (2006-02-04 12:16) [10]

> имеете в виду описать пользовательский message
> WM_FREEITEM = WM_USER + 1
>
> и PostMessage"м убивать контрол? посылая WM_FREEITEM. в
> свою очередь реализовав отлов мессаги.
>
> я правильно вас понял?

Да.



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

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

Наверх




Память: 0.49 MB
Время: 0.031 c
8-1126434169
Ego
2005-09-11 14:22
2006.02.19
Как вставить звуковой файл в тело программы?


2-1138618320
V0va
2006-01-30 13:52
2006.02.19
WideString, хранение строк


15-1138736188
Kerk
2006-01-31 22:36
2006.02.19
Доминантность


2-1138883033
Mirrorballman
2006-02-02 15:23
2006.02.19
Редактор форм


9-1124440416
Dedylka
2005-08-19 12:33
2006.02.19
Шейдеры?