Главная страница
    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.06 c
15-1339074806
Дмитрий С
2012-06-07 17:13
2013.03.22
Задача о деньгах.


2-1339398926
Handler
2012-06-11 11:15
2013.03.22
сравнение строк


4-1227867160
dmitry_12_08_73
2008-11-28 13:12
2013.03.22
Запрещение реакции на нажатие кнопки WIN на клавиатуре


15-1342297802
Юрий
2012-07-15 00:30
2013.03.22
С днем рождения ! 15 июля 2012 воскресенье


15-1353270605
Юрий
2012-11-19 00:30
2013.03.22
С днем рождения ! 19 ноября 2012 понедельник





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