Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизКак мне удалить себя внутри себя? Найти похожие ветки
← →
буржуй (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c