Главная страница
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.49 MB
Время: 0.049 c
15-1342899092
без имени
2012-07-21 23:31
2013.03.22
Настройка в Delphi 7


15-1348161804
ClawClaw
2012-09-20 21:23
2013.03.22
Глюк в Сапёре? (Windows 7)


15-1339674715
ProgRAMmer Dimonych
2012-06-14 15:51
2013.03.22
Часто используемые программы в "Пуске" Windows 7


15-1344537298
kilkennycat
2012-08-09 22:34
2013.03.22
Бибик


15-1351936374
xayam
2012-11-03 13:52
2013.03.22
Google App Engine (GAE)