powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно присвоить указатель на метод?
25 сообщений из 64, страница 1 из 3
Как правильно присвоить указатель на метод?
    #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
Как правильно присвоить указатель на метод?
    #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
Как правильно присвоить указатель на метод?
    #39864768
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, то есть у меня по-сути не хватает в функции третьего параметра P: PTypeInfo
И передавать он будет например TypeInfo(TKeyEvent), верно ?
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39864770
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если я это делаю не из метода формы, что в этом случае будет содержать
Код: pascal
1.
2.
TM.Data:= ???
TM.Code:= ???
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39864775
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если я это делаю не из метода формы, что в этом случае будет содержать
Код: pascal
1.
2.
TM.Data:= ???
TM.Code:= ???
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39864779
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все. Уже разобрался. Спасибо!
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39864794
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linux_64А если я это делаю не из метода формы, что в этом случае будет содержать
Код: pascal
1.
2.
TM.Data:= ???
TM.Code:= ???


Код: pascal
1.
2.
TM.Data:= Form2
TM.Code:= @Form2.Button44Click
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39864797
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_, Да, я уже разобрался. Спасибо вам!
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39864815
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
19383989 для RTTI мощи немеренно
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39864816
Foxpc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А тут ещё есть новее 21676268
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #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
Как правильно присвоить указатель на метод?
    #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
Как правильно присвоить указатель на метод?
    #39864955
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,
Во-первых: в 35 лет расти уже дальше некуда, большую часть жизни я уже прожил.
Во-вторых: Работа у меня есть и она не связана с программированием. И я не собираюсь кому-либо продавать свои программы, даже если до конца жизни освою этот язык идеально. Я их пишу исключительно для себя и не собираюсь на этом зарабатывать, тем более в Богом забытой Украине...
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39865144
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linux_64Во-первых: в 35 лет расти уже дальше некудаСмИшно. Было бы желание...
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39865665
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linux_64тем более в Богом забытой Украине...
ты еще в других местах СНГ не был
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #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
Как правильно присвоить указатель на метод?
    #39865883
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linux_64,

а я не понимаю, чего ты хочешь.
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39865893
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,
На другой форме есть кнопка. Для неё в инспекторе объектов обработчики не создавались. Я в ручную прописал обработчик нажатия этой кнопки, но мне нужно в методе первой формы правильно присвоить ссылку на этот обработчик
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #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
Как правильно присвоить указатель на метод?
    #39865900
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две формы. На второй форме динамически создаётся кнопка. Все, она создана. Теперь в нужном месте кода второго модуля этой формы динамически прописывается стандартный обработчик OnClick этой кнопки и он должен выполниться при нажатии на эту кнопку. Но кнопка "не знает", что у неё есть обработчик и поэтому при нажатии на кнопку ничего не происходит, хотя сам обработчик не пустой. Нужно из первого модуля первой формы присвоить ссылку- указатель на этот обработчик. Что должны содержать в себе поля
Код: pascal
1.
2.
3.
TM.Data:= ???
TM.Code:= ???
// Но находится это в первом модуле
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39865901
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,
Отлично. Но что если это не обязательно событие OnClick ?, а например OnKeyEvent ?
Вот например у меня созданы все обработчики этой кнопки и мне нужен универсальный указатель. Как тогда быть?
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39865905
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linux_64DimaBr,
Отлично. Но что если это не обязательно событие OnClick ?, а например OnKeyEvent ?
Вот например у меня созданы все обработчики этой кнопки и мне нужен универсальный указатель. Как тогда быть?
А сперва изучить возможности Delphi, а потом архитектуру строить - никак?
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #39865909
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Linux_64DimaBr,
Отлично. Но что если это не обязательно событие OnClick ?, а например OnKeyEvent ?
Вот например у меня созданы все обработчики этой кнопки и мне нужен универсальный указатель. Как тогда быть?

Нет такого понятия "универсальный указатель".
...
Рейтинг: 0 / 0
Как правильно присвоить указатель на метод?
    #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
Как правильно присвоить указатель на метод?
    #39865914
Linux_64
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда как это делает Инспектор объектов? Компонент может быть любым, событие тоже, но есть какая то процедура общая для присваивания указателя для чего-либо
...
Рейтинг: 0 / 0
25 сообщений из 64, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как правильно присвоить указатель на метод?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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