Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1138481796
petr
2006-01-28 23:56
2006.02.19
список таблиц


15-1138180213
Red_imp
2006-01-25 12:10
2006.02.19
Народ посоветуйте программу для учета трафика


1-1137482024
RDA
2006-01-17 10:13
2006.02.19
Вставка апострофа во всех контролах


15-1138381707
Ермак
2006-01-27 20:08
2006.02.19
Хельсинская группа получала деньги от британских шпионов


2-1138786269
Kolan
2006-02-01 12:31
2006.02.19
Приведение типов массивов...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский