Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как мне удалить себя внутри себя? [D7, XP]


буржуй ©   (2006-02-03 17:31:00) 

Следующая ситуация. Есть некий навигатор с кучей элементов внутри себя. На каждом элементе находится веббраузер с загруженной в 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];

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


Gero   (2006-02-04 12:16:00) [1]

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

Да.


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

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

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

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

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


SergP   (2006-02-03 21:12:00) [3]


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


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


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

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

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


Zeqfreed   (2006-02-03 19:16:00) [5]

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

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


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

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


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

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

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


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

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


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

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

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

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

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


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


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо