Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
1

Процедура/функция обратного вызова в классе

30.07.2015, 16:05. Показов 2960. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

Хочу сделать принадлежность процедуры/функции обратного вызова классу. Делаю это через классовые процедуры/функции:

Delphi
1
2
class function ...
class procedure ...

Делаю это так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
type
    MyProc = procedure(const str: string);
 
    TForm1 = class(TForm)
    ...
        class procedure callback(const str: string);
    ...
    end;
 
...
 
class procedure TForm1.callback(const str: string);
begin
  Form1.Memo1.Lines.Add(str);
end;
 
...
 
procedure UseCallbackFunc(proc: MyProc);
begin
  proc('1111');
end;
Использую:

Delphi
1
2
TForm1.callback('1111');  //  нормально выводит текст в Memo1
UseCallbackFunc(@TForm1.callback);  //  выводит всякий бред в Memo1
Как я понимаю, это проблема в том, что кроме const str: string в callback все же есть скрытый параметр self.

Возможно ли вообще такое сделать, или нужно будет выносить callback из класса?

Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2015, 16:05
Ответы с готовыми решениями:

Процедура обратного вызова
Немного запутался в процедурах обратного вызова, в процедурных типах. Есть DLL и описание к ней....

Функция обратного вызова
Доброго времени суток уважаемые гуру программирования! Нужна помощь! В описании к DLL есть функция:...

Функция обратного вызова в классе
Такие проблемы возникли у меня. Есть два класса.В одном классе относится к...

Функция обратного вызова
Приветствую всех. Создаю свой класс и при определенном событии в экземпляре этого класса должна...

13
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
30.07.2015, 18:33 2
http://www.gunsmoker.ru/2013/0... lback.html
0
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
30.07.2015, 19:04  [ТС] 3
При:
Delphi
1
2
3
4
5
6
7
8
9
10
11
    
    TForm1 = class(TForm)
    ...
        class procedure callback(const str: string); static;
    ...
    end;
...
class procedure TForm1.callback(const str: string);
begin
    Form1.Memo1.Lines.Add(str);
end;
Получаю ошибку на 4 строчке:

[Error] Unit1.pas(20): Field definition not allowed after methods or properties
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
30.07.2015, 22:35 4
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Получаю ошибку на 4 строчке
А проблема кроется в 5-й
0
5706 / 2297 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
30.07.2015, 22:42 5
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Field definition not allowed after methods or properties
сперва в блоке декрарируются поля(переменные) затем методы(процедуры/функции) наоборот нельзя

как и mss уже подсказал )
0
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
30.07.2015, 22:44  [ТС] 6
А при чем тут 5-я строчка? Я просто изобразил, что там может быть описано еще что-то.

Не понял о чем идет речь. Можете привести пример кода?
0
5706 / 2297 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
30.07.2015, 22:46 7
а вам и сказали, что дальше по коду не чисто, сообщения об ошибках и/или предупреждениях надо как-то анализировать чтоли, компилятор сам говорит в чем проблема может быть
0
mss
30.07.2015, 22:48
  #8

Не по теме:

Цитата Сообщение от Arcor Посмотреть сообщение
сперва в блоке декрарируются поля(переменные) затем методы(процедуры/функции) наоборот нельзя

Это ж в любом мало-мальски приличном букваре по Делфи написано)
Да что там в букваре - прямо во встроенной справке это можно мгновенно ущучить..

Впрочем мне видимо никогда уже не понять, почему читать буквари и справку нынче не модно, а модно бомбить форумы "ткните меня носом в то что лежит прямо перед ним")

0
5706 / 2297 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
30.07.2015, 22:52 9
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Не понял о чем идет речь. Можете привести пример кода?
так будет правильно
Delphi
1
2
3
4
5
6
type
  TMyClass = class
    private
     x: Integer;
     procedure y;
  end;
будет не правильно, из-за z
Delphi
1
2
3
4
5
6
7
type
  TMyClass = class
    private
     x: Integer;
     procedure y;
     z: Extended;
  end;
снова будет правильно
Delphi
1
2
3
4
5
6
7
type
  TMyClass = class
    private
     x: Integer;
     z: Extended;
     procedure y;
  end;
а вообще тут все сказано Процедура/функция обратного вызова в классе
1
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
30.07.2015, 22:59  [ТС] 10
mss, мы сейчас осуждаем один и тот же код?

О каких переменных вообще речь идет?

Выдает ошибку, если написать так:

Delphi
1
2
3
4
5
6
7
8
9
10
    TForm1 = class(TForm)
    ...
        class procedure callback(const str: string); static;
    ...
    end;
...
class procedure TForm1.callback(const str: string);
begin
    Form1.Memo1.Lines.Add(str);
end;
А так нету ошибки:


Delphi
1
2
3
4
5
6
7
8
9
10
    TForm1 = class(TForm)
    ...
        class procedure callback(const str: string);
    ...
    end;
...
class procedure TForm1.callback(const str: string);
begin
    Form1.Memo1.Lines.Add(str);
end;
0
5706 / 2297 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
30.07.2015, 23:11 11
а что за дельфи? версии имеется ввиду какая?
такая ошибка дает
Цитата Сообщение от Krasiosoft Посмотреть сообщение
[Error] Unit1.pas(20): Field definition not allowed after methods or properties
вот такое вот
Цитата Сообщение от Arcor Посмотреть сообщение
сперва в блоке декрарируются поля(переменные) затем методы(процедуры/функции) наоборот нельзя
а вот почему не компилируется... значит какой-то инфы у нас нету, которая есть у вас
0
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
30.07.2015, 23:13  [ТС] 12
Цитата Сообщение от Arcor Посмотреть сообщение
а что за дельфи?
Старенький Delphi 7 (build 4.453).
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
30.07.2015, 23:31 13
Цитата Сообщение от Krasiosoft Посмотреть сообщение
Delphi 7
В ней нет ключевого слова static.
1
northener
31.07.2015, 00:43     Процедура/функция обратного вызова в классе
  #14

Не по теме:

Krasiosoft, ты уж пожалуйста либо сразу указывай версию Дельфи, либо приводи код целиком. Без многоточий. Куча форумчан бесплатно потратила на твою проблему кучу своего личного времени! И всё впустую.

0
31.07.2015, 00:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2015, 00:43
Помогаю со студенческими работами здесь

Функция обратного вызова
Функция обратного вызова это та, которая передаётся в качестве аргумента другой функции и внутри...

Функция обратного вызова
#undef UNICODE #include <windows.h> #include "resource.h" #include <iostream> #include...

Как создайтся функция обратного вызова?
Покажите мастер-класс как создавать функции обратного вызова и использовать их.

неявная функция обратного вызова правильно я понимаю?
неявная функция обратного вызова правильно я понимаю что это когда браузер обработает событие до...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru