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

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

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

Нет возможности вынести кусок кода в процедуру Lazarus
Lazarus Из Form1 вызвать Form2
Обработчик событий в Run-Time для формы (TForm) Lazarus
Lazarus Lazarus. Управление объектом из обычной процедуры
Дополнительные формы TForm Lazarus
Lazarus Вызвать функцию из модуля
Lazarus Создать процедуру
Lazarus Переход в другую процедуру по метке
Как перенести процедуру? Lazarus
Как вызвать из проги notepad и передать ему текст? Lazarus
Lazarus Унаследовать класс MaskEdit и переопределить его процедуру
Компонент TreeView вызвать нажатие Lazarus

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
krapotkin
 Аватар для krapotkin
1959 / 1905 / 490
Регистрация: 14.04.2014
Сообщений: 9,309
24.12.2016, 20:56     Вызвать процедуру класса TForm из обычной #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
вопрос прямо из учебника по ООП

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

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

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

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

мы описываем новый класс TForm1=class(TForm)
и глобальную переменную этого класса
var Form1:TForm1;
в проекте создаем объект и запоминаем в эту переменную его адрес
Application.CreateForm(TForm1,Form1);
Hretgir
173 / 70 / 1
Регистрация: 25.01.2012
Сообщений: 2,507
Записей в блоге: 17
24.12.2016, 21:33  [ТС]     Вызвать процедуру класса TForm из обычной #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 минуты
В принципе там есть второй вариант написания программы. Я ещё думал как писать её - какой вариант лучше. Оказывается вариант один в общем. Нужно над данными оперировать. Там в общем даже много вариантов. Просто не тем путём пошёл я.
krapotkin
 Аватар для krapotkin
1959 / 1905 / 490
Регистрация: 14.04.2014
Сообщений: 9,309
24.12.2016, 21:36     Вызвать процедуру класса TForm из обычной #4
---------------------------------------
еще немного по ООП
описание класса - это комплект чертежей
объект класса - это собранная по чертежам машина

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


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

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

теперь по поводу вопроса:
а что такое keyOn ?
Yandex
Объявления
24.12.2016, 21:36     Вызвать процедуру класса TForm из обычной
Ответ Создать тему
Опции темы

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