1) Почему когда в процедуре обращаешься к стринггриду, лейблу или еще к чему-нибудь вылетает ошибка типа " Identifier not found *** "? как это исправить?
2) Объявляю в uses еще 1 unit, в var объявляю вторую форму, но вылетает ошибка "Identifier not found ***"
3)как правильно объявить процедуру в private или public?
Накопилось много вопросов. По поводу процедур и форм.
Модератор: Модераторы
-
Rastchepkin
- незнакомец
- Сообщения: 5
- Зарегистрирован: 10.10.2010 17:17:24
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
1. Потому что компоненты на форме — это не глобальные переменные. Нужно указывать форму.
2. Ничего не понятно. Пример?
3. Процедуры (которые не методы) не бывают private или public.
http://www.freepascal.org/docs-html/ref/ref.html
2. Ничего не понятно. Пример?
3. Процедуры (которые не методы) не бывают private или public.
http://www.freepascal.org/docs-html/ref/ref.html
Rastchepkin писал(а):2) Объявляю в uses еще 1 unit, в var объявляю вторую форму, но вылетает ошибка "Identifier not found ***"
Если правильно понял, надо вторую форму подключить, с доступом к ее компонентам? Объявите не в usue, а в implementation
Важно понять различие между процедурами и методами. Процедуры (и функции) -- самостоятельные элементы, а методы -- это процедуры (или функции), включённые в состав классов.
Кроме методов, в классах могут быть переменные, которые в этом случае называются полями.
Потому что стринггрид, лейбл и т.п. -- это поля формы, т.е. они внутри класса формы. Выхода два
1. сделать процедуру методом того же класса, т.е. включить её туда же, где находятся поля.
2. оставить процедуру, и указывать, где находятся стринггрид, лейбл и т.п., например Form1.Label1, как предложил Иван Шихалев.
Модули (юниты) не объявляют, это не переменные. Их создают и используют. Чтобы получить модуль с формой, нужно создать новую форму а модуль для неё Lazarus создаст автоматически. При этом переменная формы уже будет объявлена в новом модуле, и объявлять её где-то ещё уже не нужно. После этого файлы модуля (pas) и формы (lfm) нужно сохранить (например, в папку проекта). Имя, под которым сохранили модуль, можно добавлять в uses других модулей, т.е. использовать новый модуль из других.
Нужно сделать её методом:
Чем путаться в понятиях, проще приложить пример и спросить почему не работает. И кстати, было бы полезно для начала почитать какую-нибудь книжку по Lazarus или Delphi, тем более что на этом форуме давали ссылки как минимум на две, обе доступны для свободного скачивания.
Код: Выделить всё
type
MyClass = class
procedure Sum(A, B: Integer); // это метод
end;
procedure Sum(A, B: Integer); // а это процедура
Кроме методов, в классах могут быть переменные, которые в этом случае называются полями.
Код: Выделить всё
type
TForm1 = class(TForm)
Label1: TLabel; // это поле класса TForm1
end;
var
Form1: TForm; // а это глобальная переменная
Rastchepkin писал(а):1) Почему когда в процедуре обращаешься к стринггриду, лейблу или еще к чему-нибудь вылетает ошибка типа " Identifier not found *** "? как это исправить?
Потому что стринггрид, лейбл и т.п. -- это поля формы, т.е. они внутри класса формы. Выхода два
1. сделать процедуру методом того же класса, т.е. включить её туда же, где находятся поля.
2. оставить процедуру, и указывать, где находятся стринггрид, лейбл и т.п., например Form1.Label1, как предложил Иван Шихалев.
Rastchepkin писал(а):2) Объявляю в uses еще 1 unit, в var объявляю вторую форму, но вылетает ошибка "Identifier not found ***"
Модули (юниты) не объявляют, это не переменные. Их создают и используют. Чтобы получить модуль с формой, нужно создать новую форму а модуль для неё Lazarus создаст автоматически. При этом переменная формы уже будет объявлена в новом модуле, и объявлять её где-то ещё уже не нужно. После этого файлы модуля (pas) и формы (lfm) нужно сохранить (например, в папку проекта). Имя, под которым сохранили модуль, можно добавлять в uses других модулей, т.е. использовать новый модуль из других.
Rastchepkin писал(а):3)как правильно объявить процедуру в private или public?
Нужно сделать её методом:
Код: Выделить всё
TMyClass = class
private
procedure MyPrivateProcedure();
public
procedure MyPublicProcedure();
end;
Чем путаться в понятиях, проще приложить пример и спросить почему не работает. И кстати, было бы полезно для начала почитать какую-нибудь книжку по Lazarus или Delphi, тем более что на этом форуме давали ссылки как минимум на две, обе доступны для свободного скачивания.
