| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Переменные |
| Автор: kdkdkdkd85 27.10.2007, 11:40 | ||
Подскажите, пожалуйста, в чём дело - ничего не могу понять
|
| Автор: VICTAR 27.10.2007, 12:43 |
| kdkdkdkd85, не вижу никаких причин чтобы этот код не работал. Почему ты решил что у тебя что-то не присваивается? Как ты это проверяешь? |
| Автор: ivan219 27.10.2007, 12:58 | ||
kdkdkdkd85, переменные:
являются локальными и при выходе из процедуры разрушаются. А так всё должно работать на ура |
| Автор: mr.Anderson 27.10.2007, 13:00 | ||
Напиши
И посмотри, что будет. |
| Автор: kdkdkdkd85 27.10.2007, 13:14 |
| Проверяю я, трейся пошагово код (F8). Когда алгоритм проходит строки присвоения то в переменные ничего не заностися. Объясняю в картинках (в архиве)... Я уже пробовал перезапускать Delphi, переименовывать переменные и компоненты, присваивать втупую (тогда при нажатии F8 происходит перескок через эту строчку и, кстати, на неё нельзя поставить breakpoint (F5)), ну прям чудеса... |
| Автор: kdkdkdkd85 27.10.2007, 13:22 |
| mr.Anderson, решил последовать совету и чудеса: как только вставил в код строки про showmessage сразу всё заработало. А почему? Неужели это связано с тем что я ни разу не использовал эти переменные (var AreaWidth never used - пишет компилятор)? |
| Автор: mr.Anderson 27.10.2007, 13:26 | ||
| kdkdkdkd85, эт не чудеса. Во-первых, если переменная дальше по коду не используется, компилятор в целях оптимизации стирает ее из памяти, то есть отладчиком "отловить" присвоение нового значения переменным в твоем коде не получится. Если же сделать showmessage, да или вообще все что угодно, хоть
А затем остановиться при отладке на этой строчке и глянуть на текущее значение данной переменной (до выполнения строки с новым присваиванием нуля) - то ты увидишь ее текущее значение, поскольку компилятор не удалял ее (переменную) из памяти, поскольку она требуется для выполнения дальнейших операций. |
| Автор: Still 27.10.2007, 13:53 | ||
kdkdkdkd85! ivan219 правильно говорит. Переменные локальные, попробуй сделать их глобальными. Примерно так:
|
| Автор: mr.Anderson 27.10.2007, 14:04 |
| Still, убил бы за использование глобальных переменных. Их необходимость очень часто довольно призрачна, поэтому лучше обходиться без этого. Впрочем, я пояснил суть проблемы, почему переменным "не присваиваются" значения. А раз понятна причина - то дальнейшее использование и исправление проблемы полностью на совести автора. |
| Автор: kdkdkdkd85 27.10.2007, 17:41 |
| Всем большое спасибо |
| Автор: EvilsInterrupt 27.10.2007, 17:57 |
| mr.Anderson, а объекты форм тоже призрачно? ;) Просто глобальные желательно выносить в один модуль u_Global и внем все писать с указанием где каждая переменная используется, тогда все будет ок |
| Автор: mr.Anderson 27.10.2007, 18:39 |
| EvilsInterrupt, про объекты я молчу, это действительно необходимое использование глобалок. А в данном случае очень вряд ли, что глобалки имеют смысл. |
| Автор: EvilsInterrupt 27.10.2007, 19:10 |
| mr.Anderson, хорошо вот случай, я щас пишу прогу основанную на плагинах, написал TPluginManager , как его объект объявить? Если использует окно Настроек(есть тута каждый плагин можно настроить, выгрузить\загрузить,обновить лист плагинов), работать с плагинами в модуле u_main , тута основная работа с плагинами, опрос все ли отработали плагины, может кто не верно в базу положил или еще что-нить, как мне замудрить если не глобально? зы: жаль что на форумах нельзя жать Ctrl+Enter |
| Автор: mr.Anderson 28.10.2007, 13:40 | ||
EvilsInterrupt, цитирую:
|
| Автор: MetalFan 28.10.2007, 14:57 |
отослано с пом. Ctrl+Enter |
| Автор: EvilsInterrupt 28.10.2007, 15:18 | ||
и вправду |
| Автор: limon 30.10.2007, 11:53 | ||||
| А у меня другой вопрос. Можно ли в delphi так же как и в Си при объявлении переменной сразу же ей присваивать какое-нибудь значение? Например в Си это делается так
В delphi можно сделать так же но только с глобальной переменной
А как быть с локальной переменной? |
| Автор: Alexeis 30.10.2007, 12:26 | ||
|
| Автор: bems 30.10.2007, 17:18 |
| Alexeis, это еще и статическое, пэтому не эувивалент |
| Автор: Alexeis 30.10.2007, 20:21 |
Да не. Это скорее переменные с начальным значением чем константы. Само слово const сбивает с толку, а так это нормальная переменная. |
| Автор: mr.Anderson 30.10.2007, 20:38 |
| Alexeis, угу, только если пишем в дельфине, не забыть в свойствах проекта поставить галочку "Assignable typed constants"... а не то будем получать не то ворнинг, не то ошибку (не помню точно). |
| Автор: Alexeis 30.10.2007, 21:19 |
| mr.Anderson, {$J+} это тоже самое. |
| Автор: Alexeis 30.10.2007, 21:51 |
| bems, точно ты прав! |