Главная страница
    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.042 c
3-1135252914
VeB
2005-12-22 15:01
2006.02.19
M&amp;#305;crosoft Jet 4.0 нужен ли драйвер?


2-1139064527
Serg1981
2006-02-04 17:48
2006.02.19
Application.ProcessMessages


1-1137584674
UnDISCOvery
2006-01-18 14:44
2006.02.19
Каким образом будут располагаться файлы на диске?


2-1138739534
MIXER
2006-01-31 23:32
2006.02.19
строки ---Edit


15-1138354595
Gbp
2006-01-27 12:36
2006.02.19
Нужен Delphi программист для выполнения разовой работы.





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