Возникла небольшая проблемка.
Если мы пишем в основном коде программы, либо в коде процедуры, которая не озаглавлена "TForm1.xxx", а просто "xxx" простейший код, к примеру, Label1.Caption:='Проверка'; то он не прокатывает и требуется написать так: Form1.Label1.Caption:='Проверка';
Но, при этом всегда вылетает критическая ошибка: Debugger Exception Notification: "Project <имя_проекта.exe> raised exception class EAccessViolation with message 'Access violation at address <адрес> in module '<имя_проекта.exe>'. Read of address <адрес>. Process stopped. User Step or Run to continue."
Пробовал и в Delphi 6, и в 7 — ошибка одна.
Если же мы обзываем процедуру "TForm1.xxx", то Label1.Caption:='Проверка'; теперь прокатывает и ошибок не выдает, но как мы можем из основного кода программы вызвать эту процедуру: "TForm1.xxx"?
Если мы пишем TForm1.xxx; то при компиляции вылетает ошибка: "This form of method call only allowed for class methods". Если просто xxx; то такой процедуры не найдено.
Помогите пожалуйста разобраться в этой ситуации.
Здравствуйте, utter, Вы писали:
U>Возникла небольшая проблемка.
U>Если мы пишем в основном коде программы, либо в коде процедуры, которая не озаглавлена "TForm1.xxx", а просто "xxx" простейший код, к примеру, Label1.Caption:='Проверка'; то он не прокатывает и требуется написать так: Form1.Label1.Caption:='Проверка';
Все верно. Label1- это поле, а полю надо задавать
контекст, т.е. экземпляр объекта, поле которого тебе интересно. В данном случае ты выбираешь Form1 таким контекстом.
Проблема у тебя от того, что ты не понимаешь возможности одновременного существования
нескольких форм типа TForm1.
U>Но, при этом всегда вылетает критическая ошибка: Debugger Exception Notification: "Project <имя_проекта.exe> raised exception class EAccessViolation with message 'Access violation at address <адрес> in module '<имя_проекта.exe>'. Read of address <адрес>. Process stopped. User Step or Run to continue."
Это от того, что Form1 еще не создан в момент, когда ты пытаешься обращаться к его полям.
U>Если же мы обзываем процедуру "TForm1.xxx", то Label1.Caption:='Проверка'; теперь прокатывает и ошибок не выдает,
Конечно. Теперь это — метод класса. И контекст уже задан.
U>но как мы можем из основного кода программы вызвать эту процедуру: "TForm1.xxx"?
Точно так же — надо дать ей контекст.
U>Если мы пишем TForm1.xxx; то при компиляции вылетает ошибка: "This form of method call only allowed for class methods". Если просто xxx; то такой процедуры не найдено.
Form1.xxx. Но, скорее всего, ничего хорошего не получится, потому что ты опять попытаешься вызывать xxx до создания формы.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Спасибо. Разобрался.