Главная страница
    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.051 c
1-1137683565
beglec
2006-01-19 18:12
2006.02.19
Warning Unsafe type pChar


1-1137758963
jiurasdad
2006-01-20 15:09
2006.02.19
Как послать нажатие клавишь в другое приложение


2-1138550381
Pit
2006-01-29 18:59
2006.02.19
Люди неужели ни кто не поможет


15-1138075876
Ozone_zabil_parol
2006-01-24 07:11
2006.02.19
Цифровой фитик. Проблема выбора.


3-1135111481
kreyl
2005-12-20 23:44
2006.02.19
Обновление TADODataSet из TClientDataSet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский