Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

В 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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.059 c
2-1339663694
сыр
2012-06-14 12:48
2013.03.22
помощь в разборе кода


15-1347443626
KSergey
2012-09-12 13:53
2013.03.22
Сроки рассмотрения вариантов перевода для MSDN


15-1335703513
Vik
2012-04-29 16:45
2013.03.22
Создание кнопок.


15-1347723990
alexdn
2012-09-15 19:46
2013.03.22
Картина знаменитые люди


2-1335327784
lesstab
2012-04-25 08:23
2013.03.22
Как получить Tag нажатой кнопки на фрейме...





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