Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно присвоить указатель на метод? / 25 сообщений из 64, страница 1 из 3
20.09.2019, 16:15
    #39864749
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Всем привет! Нужна помощь. Я запутался.
Имеется процедура - стандартный обработчик, при нажатии на кнопку.
Чуть ниже имеется функция, которая должна установить "значение событию" OnClick.
Как правильно следует присваивать указатель на метод Button44Click ?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Procedure TForm2.Button44Click(Sender: TObject);
begin
 //
end;

//
Procedure SetMethodRTTI(A: TObject; EventName: string): boolean;
var
 TM: TMethod; 
 // A- содержит объект(компонент), например Button44
 // EventName - содержит имя метода(события), например OnClick
begin
 try
  TM.Data:= A;
  TM.Code:= @EventName;
  SetMethodProp(A, @EventName, TM);
  if TM.Code<>nil then
  begin
   Result:= True;
  end
  else
  begin
   Result:= False;
  end;
 except
  //
 end;
end;
// Если я явно укажу:

// TM.Data:= Button44;
// TM.Code:= @Button44Click;

// Так правильно? Или так ?

// TM.Data:= Button44;
// TM.Code:= Form2.Button44Click;
//
// SetMethodProp(A, ?, TM); 
...
Рейтинг: 0 / 0
20.09.2019, 16:28
    #39864762
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64
Код: pascal
1.
Procedure SetMethodRTTI(A: TObject; EventName: string): boolean;

Здесь не хватает самого обработчика для установки.

Если это делать из метода формы, то так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TForm2.SetMethod;
var
  LEvent: TNotifyEvent;
  LMethod: TMethod;
begin
  LEvent := Button44Click;
  LMethod := TMethod(LEvent);
  SetMethodProp(Button44, 'OnClick', LMethod);
end;
...
Рейтинг: 0 / 0
20.09.2019, 16:38
    #39864768
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
_Vasilisk_, то есть у меня по-сути не хватает в функции третьего параметра P: PTypeInfo
И передавать он будет например TypeInfo(TKeyEvent), верно ?
...
Рейтинг: 0 / 0
20.09.2019, 16:43
    #39864770
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
А если я это делаю не из метода формы, что в этом случае будет содержать
Код: pascal
1.
2.
TM.Data:= ???
TM.Code:= ???
...
Рейтинг: 0 / 0
20.09.2019, 16:49
    #39864775
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
А если я это делаю не из метода формы, что в этом случае будет содержать
Код: pascal
1.
2.
TM.Data:= ???
TM.Code:= ???
...
Рейтинг: 0 / 0
20.09.2019, 16:53
    #39864779
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Все. Уже разобрался. Спасибо!
...
Рейтинг: 0 / 0
20.09.2019, 17:35
    #39864794
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64А если я это делаю не из метода формы, что в этом случае будет содержать
Код: pascal
1.
2.
TM.Data:= ???
TM.Code:= ???


Код: pascal
1.
2.
TM.Data:= Form2
TM.Code:= @Form2.Button44Click
...
Рейтинг: 0 / 0
20.09.2019, 17:40
    #39864797
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
_Vasilisk_, Да, я уже разобрался. Спасибо вам!
...
Рейтинг: 0 / 0
20.09.2019, 18:36
    #39864815
Foxpc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
19383989 для RTTI мощи немеренно
...
Рейтинг: 0 / 0
20.09.2019, 18:38
    #39864816
Foxpc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
А тут ещё есть новее 21676268
...
Рейтинг: 0 / 0
20.09.2019, 18:39
    #39864817
Foxpc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
procedure TForm3.FormCreate(Sender: TObject);
begin
  EventHookObject.OnBefore :=
      procedure(Base: TBaseEvent; Params: TArray<TValue>)
    begin
      showmessage('Я сработаю первым!');
    end;

  EventHookObject.EAdd(Memo1, 'OnKeyPress',
    procedure(Base: TBaseEvent; Params: TArray<TValue>)
    begin
      showmessage('Я сработаю вторым!');
    end);

  // Устаналиваем последний аргумент в true для Memo1KeyPress
  EventHookObject.EAdd(Memo1, 'OnKeyPress',
    procedure(Base: TBaseEvent; Params: TArray<TValue>)
    begin
      showmessage('Я сработаю третьим!');
    end, true);
end;

procedure TForm3.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  showmessage('Я сработаю четвёртым!');
end;
...
Рейтинг: 0 / 0
20.09.2019, 19:22
    #39864830
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64
Код: pascal
1.
2.
3.
4.
5.
Procedure SetMethodRTTI(A: TObject; EventName: string): boolean;
var
 TM: TMethod; 
begin
  TM.Code:= @EventName;


То есть, с прошлого раза ты так и не открыл книжку и не попытался освоить хотя бы самые основы даже не языка, а программирования вообще.

Linux_64Так правильно? Или так ?
Когда-нибудь, когда ты вырастешь и попробуешь устроиться на работу и зарабатывать деньги, ты свои программы будешь писать таким же методом - "подскажите мне каждую строчку, как правильно" ?
...
Рейтинг: 0 / 0
21.09.2019, 10:34
    #39864955
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
softwarer,
Во-первых: в 35 лет расти уже дальше некуда, большую часть жизни я уже прожил.
Во-вторых: Работа у меня есть и она не связана с программированием. И я не собираюсь кому-либо продавать свои программы, даже если до конца жизни освою этот язык идеально. Я их пишу исключительно для себя и не собираюсь на этом зарабатывать, тем более в Богом забытой Украине...
...
Рейтинг: 0 / 0
22.09.2019, 02:14
    #39865144
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64Во-первых: в 35 лет расти уже дальше некудаСмИшно. Было бы желание...
...
Рейтинг: 0 / 0
23.09.2019, 14:30
    #39865665
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64тем более в Богом забытой Украине...
ты еще в других местах СНГ не был
...
Рейтинг: 0 / 0
23.09.2019, 20:25
    #39865880
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Продолжение следует...
В модуле другой формы имеем вот такую процедуру-обработчик:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
//
Procedure TNewForm2.Button55Click(Sender: TObject);
Begin
 NewForm2.Color:= clRed;
End;
//
{Мне нужно из первой формы присвоить указатель на метод Button1Click другой формы и выполнить код выше. 
То есть, представьте, что я бросил на другую форму кнопку, но обработчик события присваиваю вручную,
минуя Инспектор объектов и соответственно, никакой ссылки он не содержит. 
Мне необходимо эту ссылку прописать вручную в первой форме. 
Что я делаю не так?}
//
Procedure TForm1.Button44Click(Sender: TObject);
Var
 TM: TMethod;
Begin
 TM.Code:= @Button55Click; // но на форме NewForm2
 TM.Data:= ??? - объект кнопка Button55, // но на форме NewForm2
 SetMethodProp(NewForm2.Button55, 'OnClick', TM);
End;
//
...
Рейтинг: 0 / 0
23.09.2019, 20:34
    #39865883
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64,

а я не понимаю, чего ты хочешь.
...
Рейтинг: 0 / 0
23.09.2019, 20:53
    #39865893
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
ёёёёё,
На другой форме есть кнопка. Для неё в инспекторе объектов обработчики не создавались. Я в ручную прописал обработчик нажатия этой кнопки, но мне нужно в методе первой формы правильно присвоить ссылку на этот обработчик
...
Рейтинг: 0 / 0
23.09.2019, 21:15
    #39865896
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Procedure TNewForm2.Button55Click(Sender: TObject);
Begin
 NewForm2.Color:= clRed;
End;

procedure TForm1.Button44Click(Sender: TObject);
begin
  NewForm2.Button55.OnClick := Button55Click; // присваеваем
  NewForm2.Button55.Click;                    // вызываем
  Button55Click(NewForm2.Button55);           // можно и так вызвать
end;
...
Рейтинг: 0 / 0
23.09.2019, 21:21
    #39865900
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Есть две формы. На второй форме динамически создаётся кнопка. Все, она создана. Теперь в нужном месте кода второго модуля этой формы динамически прописывается стандартный обработчик OnClick этой кнопки и он должен выполниться при нажатии на эту кнопку. Но кнопка "не знает", что у неё есть обработчик и поэтому при нажатии на кнопку ничего не происходит, хотя сам обработчик не пустой. Нужно из первого модуля первой формы присвоить ссылку- указатель на этот обработчик. Что должны содержать в себе поля
Код: pascal
1.
2.
3.
TM.Data:= ???
TM.Code:= ???
// Но находится это в первом модуле
...
Рейтинг: 0 / 0
23.09.2019, 21:24
    #39865901
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
DimaBr,
Отлично. Но что если это не обязательно событие OnClick ?, а например OnKeyEvent ?
Вот например у меня созданы все обработчики этой кнопки и мне нужен универсальный указатель. Как тогда быть?
...
Рейтинг: 0 / 0
23.09.2019, 21:35
    #39865905
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64DimaBr,
Отлично. Но что если это не обязательно событие OnClick ?, а например OnKeyEvent ?
Вот например у меня созданы все обработчики этой кнопки и мне нужен универсальный указатель. Как тогда быть?
А сперва изучить возможности Delphi, а потом архитектуру строить - никак?
...
Рейтинг: 0 / 0
23.09.2019, 21:44
    #39865909
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Linux_64DimaBr,
Отлично. Но что если это не обязательно событие OnClick ?, а например OnKeyEvent ?
Вот например у меня созданы все обработчики этой кнопки и мне нужен универсальный указатель. Как тогда быть?

Нет такого понятия "универсальный указатель".
...
Рейтинг: 0 / 0
23.09.2019, 21:44
    #39865910
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Хорошо. Объясню иначе...
В функцию передаются параметры:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function SetMethodRTTI(FormName: TObject; KompName: TObject; EventName: string): Boolean;
Var
 TM: TMethod;
Begin
 TM.Code:= @EventName;
 TM.Data:= KompName;
 SetMethodProp(KompName, EventName, TM);
End;
// FormName - имя второй формы на которой находится KompName
// EventName - событие KompName, например TKeyPress
// Этим кодом я присваиваю указатель на метод FormName.KompName.EventName
// Компонент может быть любым, так же как и его событие
...
Рейтинг: 0 / 0
23.09.2019, 21:49
    #39865914
Linux_64
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно присвоить указатель на метод?
Тогда как это делает Инспектор объектов? Компонент может быть любым, событие тоже, но есть какая то процедура общая для присваивания указателя для чего-либо
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно присвоить указатель на метод? / 25 сообщений из 64, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]