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

Вниз

В TList не добавить переменную   Найти похожие ветки 

 
Andrey K   (2012-03-20 12:43) [0]

Помогите сняться с «ручника».
Описываю тип:
type
 CorReg = record
   nam: word;
   cor: string;
   pod: string;
 end;
 TCorReg = ^CorReg;
Пишу локальную процедуру в локальной процедуре в обработчике:
procedure TfmUTR.itmCompileClick(Sender: TObject);
 //--------------------------
 procedure SkanList(ArPro: TList);
   var
     SpLi: TList;
     Kpp: TCorReg;
 //--------------------------
 procedure ScanAPP(Fu: TfrUn);
 var sp: string;
 begin //ScanAPP
   if Fu.TypePr = pr_podp then
   begin
     sp := ScanBuAdr(Fu.mmProg.Text,"P"); //Здесь просто получаю нужную строку
     if sp <> "" then
     begin
       if not Assigned(SpLi) then SpLi := TList.Create;
       New(Kpp);
       with Kpp^ do
       begin
         nam := Round(Fu.Diameter); //здесь Diameter: double;
         pod := sp;
       end;
       SpLi.Add(Kpp); //Здесь выдаёт ошибку ***
     end;
   end;
 end; //ScanAPP
 //--------------------------
 begin //SkanList
……
……
 end; //SkanList
 //=========================
begin //itmCompileClick

Самое интересное, что в других местах где работает эта операция, при наведении мышы подсказка показывает что переменная описанная типом :TCorReg что она относится к типу модуля var TfmUTR.xxxx.TCorReg-UTR.pas в котором описан тип  :TCorReg, а в месте *** показывает что это переменная типа в модуле var Kpp.TCorReg-UTR.pas
UTR-модуль в кот. создан TfmUTR.
Вот и не понтно, ведь обработчик TfmUTR.itmCompileClick принадлежит TfmUTR.
За ранее благодарен.


 
Anatoly Podgoretsky ©   (2012-03-20 12:45) [1]

> Andrey K  (20.03.2012 12:43:00)  [0]

Не ужели так и пишет "выдаю ошибку"


 
Ega23 ©   (2012-03-20 12:52) [2]


>    SpLi.Add(Kpp); //Здесь выдаёт ошибку ***


SpLi создавать Дядя Саша Пушкин будет?


 
icWasya ©   (2012-03-20 14:55) [3]

вот здесь if not Assigned(SpLi) then SpLi := TList.Create;У Вас SpLi - это локальная переменная.
В Дельфи инициализируются локальные переменные только управляемых типов - строки, динамические массивы, варианты  и интерфейсы.
Все другие переменные могут быть заполнены мусором.
Поэтому с большой вероятностью  Assigned(SpLi) будет истино.
Рекомендация.
сразу послеbegin //SkanListнапишите  SpLi:=Nil;
 Kpp:=Nil;


 
Германн ©   (2012-03-20 15:25) [4]


> Рекомендация.
> сразу после
> 1
>  
> begin //SkanList
> напишите
> 1
> 2
>  
>  SpLi:=Nil;
>  Kpp:=Nil;
>

Нафига?
Нафига вообще нужна проверка
> f not Assigned(SpLi) then

для локальной переменной?


 
Anatoly Podgoretsky ©   (2012-03-20 15:31) [5]

Ну вдруг


 
Ega23 ©   (2012-03-20 15:33) [6]


> для локальной переменной?


Она у него не совсем локальная.
У него процедура в процедуре.


 
Ega23 ©   (2012-03-20 15:41) [7]

Сам по себе подход имеет право на существование. Но тогда в самой SkanList надо как-то так делать:

begin //SkanList
 SpLi := nil;
 try

 finally
   FreeAndNil(SpLi);
 end;
end; //SkanList


 
Andrey K   (2012-03-20 18:31) [8]

Понял, полез в дебри. Надо просто придумать глобальную переменную. Точнее сначала попробую, как предложил icWasya. Delphi пока нет под рукой. Локальную переменную стал городить, чтобы не засорять основную программу.
Спасибо.
За недочёты типа  SpLi:=Nil; прошу прощения. Никогда не было времени разбираться в тонкостях. Работает и это уже хорошо.


 
Ega23 ©   (2012-03-20 19:02) [9]


>  Надо просто придумать глобальную переменную.


Не надо. Это не правильно.


> Локальную переменную стал городить, чтобы не засорять основную  программу.


А вот это - правильно.


> Никогда не было времени разбираться в тонкостях. Работает
> и это уже хорошо.


Мне очень жаль, но зарождение быдлокодера начинается именно с таких заявлений.


 
Andrey K   (2012-03-20 21:24) [10]

Спасибо за критичные замечания. Постараюсь сделать выводы.



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

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

Наверх





Память: 0.47 MB
Время: 0.071 c
15-1338398557
Биос
2012-05-30 21:22
2013.03.22
Три звуковых сигнала из системника.


2-1339344105
Pcrepair
2012-06-10 20:01
2013.03.22
несколько вариантов кода IdHTTP: что выбрать?


1-1295711313
Gu
2011-01-22 18:48
2013.03.22
Диалог "Свойства файла" для нескольких файлов папок


2-1332692006
leklerk
2012-03-25 20:13
2013.03.22
Нужно ли явно уничтожать ADODataSet, ADOCommand и т.д.?


2-1328888801
Каныбек
2012-02-10 19:46
2013.03.22
Ссылка на web страницу





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