Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Пропадают данные из TreeNode.Data при обращении к ним.   Найти похожие ветки 

 
Profi ©   (2005-10-03 13:34) [0]

Если в функции делаю так:

Sp:=TStringList.Create;
Sp:=TreeNode.Data;


То при повторном обращении выскакивает AV. Как быть? Могу привести функцию полностью.


 
Amoeba ©   (2005-10-03 13:36) [1]


> Могу привести функцию полностью.

Не просто можно, но обязательно нужно.


 
begin...end ©   (2005-10-03 13:37) [2]

> Profi ©   (03.10.05 13:34)

> Sp:=TStringList.Create;
> Sp:=TreeNode.Data;

Утечка памяти.


 
Profi ©   (2005-10-03 13:39) [3]

begin...end ©   (03.10.05 13:37) [2]
Я это понимаю, но откуда она? И как этого избежать?


 
Amoeba ©   (2005-10-03 13:42) [4]


> Я это понимаю, но откуда она? И как этого избежать?


Как откуда? Она просто обязана быть в таком коде. Включи мозги!


 
begin...end ©   (2005-10-03 13:43) [5]

> Profi ©   (03.10.05 13:39) [3]

> откуда она?

> Sp:=TStringList.Create
Сохраняем ссылку на только что созданный объект в переменной Sp.

> Sp:=TreeNode.Data
Затираем эту ссылку значением свойства TreeNode.Data. Предыдущая ссылка потеряна.


 
Profi ©   (2005-10-03 13:45) [6]

begin...end ©   (03.10.05 13:43) [5]
1. Sp:=TStringList.Create можно не писать?
2. Дело в том. Что если где-то в программе я опять сделаю Sp:=TreeNode.Data вот тогда-то и выскакивает AV.


 
begin...end ©   (2005-10-03 13:46) [7]

> Profi ©   (03.10.05 13:45) [6]

А в чём смысл всего этого?


 
Profi ©   (2005-10-03 13:50) [8]

begin...end ©   (03.10.05 13:46) [7]
Привожу функцию:

Procedure TDMBase.GetTreeForFile(FileName:String; TreeView:TTreeView; Registr:Boolean);
var i,j,ind,k:integer;
Sp:TStringList;
est:boolean;
begin
 k:=TreeView.Items.Count-1;//Смотрю, на сколько уже заполнен TreeView.
 AddBaseToTreeView(TreeView,(TreeView.Images as TImageList),true);//Дополняю его (В этой функции все ок).
 ind:=-1;
 for i:=0 to TreeView.Items.Count-1 do
   if ind<TreeView.Items[i].AbsoluteIndex then
     ind:=TreeView.Items[i].AbsoluteIndex; //Нахожу самой нужний хвост.
 Sp:=TStringList.Create;
 repeat
   i:=-1;
   Repeat
     inc(i);
     If (i>treeView.Items.Count-1) then break;
     If TreeView.Items[i].AbsoluteIndex=ind then begin
       If TreeView.Items[i].Data<>nil then begin//Если data не пустое...
         Sp.Clear;
         Sp:=TreeView.Items[i].Data;
         est:=false;
         For j:=0 to Sp.Count-1 do
           If registr then begin
             If pos(LowerCase(FileName),LowerCase(Sp.Strings[j]))>0 then begin
              est:=true;
              Break;
             end;
           end else
           if pos(FileName,Sp.Strings[j])>0 then begin
             est:=true;
             Break;
           end;//...Проверяю есть ли в списке нужное мне слово.
         If (Not Est) and (treeView.Items[i].getFirstChild=nil) then begin
           TreeView.Items[i].Delete; //Если нет удаляю хвост.
         end;
       end else begin
         If TreeView.Items[i].getFirstChild=nil then begin
           TreeView.Items[i].Delete;
         end;
       end;
     end;
   Until i>=(TreeView.Items.Count-1)-k;
   ind:=ind-1;
 until ind=-1;
 sp.Free;
end;


Остаются хвосты, где в data есть нужное слово. Мне надо его просмотреть, но выскакивает AV.


 
Amoeba ©   (2005-10-03 13:52) [9]


> Дело в том. Что если где-то в программе я опять сделаю Sp:
> =TreeNode.Data вот тогда-то и выскакивает AV.

Не надо так делать! Тем более, если ты profi.


 
Vladimir88   (2005-10-03 14:00) [10]

//if TreeView.Items[i].Data<>nil
имхо лучше
if Assigned(TreeView.Items[i].Data);
//Sp:=TreeNode.Data;
хм, просто назначать пойнтер стринглисту имхо есть неправильно
Sp:=TStrings(TreeNode.Data);


 
Vladimir88   (2005-10-03 14:01) [11]

//if TreeView.Items[i].Data<>nil
имхо лучше
if Assigned(TreeView.Items[i].Data);
//Sp:=TreeNode.Data;
хм, просто назначать пойнтер стринглисту имхо есть неправильно
Sp:=TStrings(TreeNode.Data);


 
Profi ©   (2005-10-03 14:02) [12]

Amoeba ©   (03.10.05 13:52) [9]
Отличная мысль! Спасибо!
Vladimir88   (03.10.05 14:01) [11]
Уже исправил! Сделал так Sp.AddStrings(TreeNode.data);



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
14-1127999260
mjetvc
2005-09-29 17:07
2005.10.23
Как установить на компьютер Microsoft Jet?


3-1126499470
oleg_p
2005-09-12 08:31
2005.10.23
Не работает ORDER BY


2-1127742995
Гость22
2005-09-26 17:56
2005.10.23
Простой вопрос. Как с помощью SQL-запроса добавить поля втаблицу?


4-1124292871
ArtemESC
2005-08-17 19:34
2005.10.23
Убрать курсор


2-1127593247
Сергей Р.
2005-09-25 00:20
2005.10.23
Вопрос про перетаскивание Timage





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