Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Lazarus

Войти
Регистрация
Восстановить пароль
 
Hretgir
201 / 75 / 2
Регистрация: 25.01.2012
Сообщений: 2,770
Записей в блоге: 20
#1

Вызвать процедуру класса TForm из обычной - Lazarus

24.12.2016, 19:42. Просмотров 220. Ответов 3
Метки нет (Все метки)

Возникла проблема-
из такой процедуры
TForm1.StringGrid1DblClick
процедура
procedure TForm1.vyvedetTablicu;вызывается нормально.
А из такой - procedure OnEditing;
выдает ошибку
unit1.pas(605,2) Error: Identifier not found "vyvedetTablicu" .
Последовательность не нарушена. Нужно описывать процедуру в рамках класса TForm? Я извиняюсь конечно, у меня такое ощущение, что вопрос я задаю не впервые уже.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2016, 19:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызвать процедуру класса TForm из обычной (Lazarus):

Заливка процедур класса TForm в массив - Lazarus
Проблема такая, при компиляции безусловно выполняемого кода программы, где происходит заливка процедур класса TForm1 в массив процедур -...

Как вызвать процедуру - Delphi
Всем привет! Столкнулся с такой проблемай. Пишу DLL, в которой идёт процедура за процедурой, без объявления в начале. Мне надо как-то из...

Можно ли, например, из процедуры p2 вызвать процедуру p? - Lazarus
Вопрос такой, допустим вот код: procedure p; procedure p1; begin end; procedure p2; begin end;

как вызвать процедуру из другой формы - Delphi
В form2 надо вызвать процедуру procedure TForm1.RecordsClick(Sender: TObject); которая находится в form2. Как это сделать? помогите...

Дополнительные формы TForm - Lazarus
делаю приложение с несколькими модальными окнами. и вот это unit1 implementation uses Unit2; uses Unit3; uses Unit4; в втором,...

Вызвать процедуру\функцию из другого объекта\класса. Из одного класса\объекта сделать два - Turbo Pascal
Здравствуйте. Подскажите что не правильно делаю, и возможно ли вообще - вызвать процедуру\функцию из другого объекта\класса, в турбо...

3
krapotkin
2591 / 2469 / 624
Регистрация: 14.04.2014
Сообщений: 11,947
Записей в блоге: 7
24.12.2016, 20:56 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
вопрос прямо из учебника по ООП

вы не видите разницы между
procedure TSomeClass.Procedure1();
и
procedure Procedure1();
?

первый вариант - это метод объекта
второй - простая процедура

метод объекта вызывается только для конкретного объекта например form1.DoSomeAction();
в методе видны все поля и другие методы этого класса

кстати, глобальную процедуру можно мыслить себе как метод объекта "приложение"

мы описываем новый класс TForm1=class(TForm)
и глобальную переменную этого класса
var Form1:TForm1;
в проекте создаем объект и запоминаем в эту переменную его адрес
Application.CreateForm(TForm1,Form1);
1
Hretgir
201 / 75 / 2
Регистрация: 25.01.2012
Сообщений: 2,770
Записей в блоге: 20
24.12.2016, 21:33  [ТС] #3
Сделал иначе
Pascal
1
2
3
4
5
procedure TForm1.OnEditing;
 begin
 Form1.stringgrid1.Options:=Form1.stringgrid1.Options + [goediting];
 vyvedetTablicu;
 end;
теперь такая ошибка
unit1.pas(1136,13) Error: Incompatible types: got "<address of procedure of object;Register>" expected "<procedure variable type of procedure is nested;Register>"
в этой строке
Pascal
1
keyOn[17]:=@TForm1.OnEditing;
Добавлено через 1 минуту
Да это вообще за собой целый ряд изменений требует. Теперь в простой процедуре нельзя заполнить массив процедур. Или тип массива не правильно определён?

Добавлено через 3 минуты
В принципе там есть второй вариант написания программы. Я ещё думал как писать её - какой вариант лучше. Оказывается вариант один в общем. Нужно над данными оперировать. Там в общем даже много вариантов. Просто не тем путём пошёл я.
0
krapotkin
2591 / 2469 / 624
Регистрация: 14.04.2014
Сообщений: 11,947
Записей в блоге: 7
24.12.2016, 21:36 #4
---------------------------------------
еще немного по ООП
описание класса - это комплект чертежей
объект класса - это собранная по чертежам машина

ведь странно когда в чертеже написано
в машине с номером M510XK запустить двигатель
его запускают в той машине, которая объект
т.е. говорят просто "Запустить двигатель"


теперь смотрим в код
чертежи автомобиля марки TForm1:
procedure TForm1.OnEditing;
begin
и обращение к конкретному автомобилю Form1
Form1.stringgrid1.Options:=Form1.stringgrid1.Options + [goediting];

это ошибка нужно просто писать StringGrid1....
---------------------------------------

теперь по поводу вопроса:
а что такое keyOn ?
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2016, 21:36
Привет! Вот еще темы с ответами:

Множественное виртуальное наследование от класса TForm - C++ Builder
У меня есть некий базовый класс TWindowBase (производный от TForm), который я наследую во все классы окон. Класс TWindowBase содержит кучу...

Вызвать обработчики событий из класса отличного от класса в котором зарегистрировано событие - C#
Здравствуйте, можно ли вызвать обработчики события, объявленного в классе А в классе В? Вот так сделать не дает: class A { ...

Как в методе класса вызвать другой метод того же класса? - C++
class mate { public: int AplusB(int A, int B) { return A+B; } int AplusBplusC(int A, int B, int C)

Как правильно вызвать метод класса внутри самого класса? - PHP ООП
Здравствуйте. Собственно тема прописана в заголовке: как правильно вызвать метод класса внутри самого класса? Насколько я знаю, для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
24.12.2016, 21:36
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru