Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.16;
Скачать: CL | DM;

Вниз

как правильно сравнить процедуры   Найти похожие ветки 

 
Евгений Р.   (2008-10-07 14:59) [0]

необходимо проверить является ли процедура OnClick нужной процедурой:

if PopUpMenu.Items[i].OnClick<>procedure1 then

компилятор сообщает:
[Error] MnuVest.pas(207): E2035 Not enough actual parameters


 
Palladin ©   (2008-10-07 15:01) [1]

if PopUpMenu.Items[i].OnClick<>@procedure1 then


 
Евгений Р.   (2008-10-07 15:07) [2]

нет. таже ошибка. Чтото нужно менять в левой части.


 
Ega23 ©   (2008-10-07 15:11) [3]


> procedure1


это процедура или метод?


 
Anatoly Podgoretsky ©   (2008-10-07 15:12) [4]

А если так

// if PopUpMenu.Items[i].OnClick<>procedure1 then

то ошибка есть?


 
Vlad Oshin ©   (2008-10-07 15:15) [5]


> Anatoly Podgoretsky ©   (07.10.08 15:12) [4]

чем от [0] отличается?
на 0.5? :)


 
Поросенок Винни-Пух ©   (2008-10-07 15:16) [6]

актуал параметерз она хочет для левого операнда.


 
Евгений Р.   (2008-10-07 15:17) [7]

type
 tForm = class(TForm)
----
   procedure mnJKvitKvitClick(sender:tObject);
----
 end


 
Palladin ©   (2008-10-07 15:18) [8]

Var
m1,m2:TMethod;
begin
m1:=TMethod(PopUpMenu.Items[i].OnClick);
m2.Code:=@ТТвойКлассСПроцедурой1.procedure1;
m2.Data:=ОбъектТТвойКлассСПроцедурой1;
If CompareMem(@m1,@m2,SizeOf(m2)) Then ShowMessage("da") Else ShowMessage("net");
end;


 
Palladin ©   (2008-10-07 15:25) [9]

или еще проще

If (TMethod(PopUpMenu.Items[i].OnClick).Data=ОбъектТТвойКлассСПроцедурой1) and
  (TMethod(PopUpMenu.Items[i].OnClick).Code=@ТТвойКлассСПроцедурой1.procedure1)
 Then ShowMessage("da") Else ShowMessage("net");


 
Григорьев Антон ©   (2008-10-07 16:37) [10]

Если m1 и m2 объявить как TNotifyEvent, можно избавиться от раскладывания на адрес кода и адрес класса при присваивании.

var
 m1, m2: TNotifyEvent;
begin
 m1 := PopUpMenu.Items[i].OnClick;
 m2 := procedure1;
 if (TMethod(m1).Code = TMethod(m2).Code) and (TMethod(m1).Data = TMethod(m2).Data) then
   ...
end;


При сравнении Data и Code всё равно приходится сравнивать отдельно. Более естественная конструкция if @m1 = @m2 then ... тут не проходит, т.к. в компиляторе здесь явная ошибка: при таком сравнении он учитывает только адрес кода метода, но не учитывает адрес объекта, к которому этот метод относится.


 
Palladin ©   (2008-10-07 18:46) [11]


> Если m1 и m2 объявить как TNotifyEvent

то мы будем вынуждены отказаться от универсального подхода к сравнению



Страницы: 1 вся ветка

Текущий архив: 2008.11.16;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.005 c
2-1223295289
Урсулапов
2008-10-06 16:14
2008.11.16
как связаться с *.fdb-базой в delphi 7?


15-1221609374
Германн
2008-09-17 03:56
2008.11.16
WM_USER +100 vs WM_USER +400


15-1221658793
Terasbetoni
2008-09-17 17:39
2008.11.16
3Д-движок, работающий с кривыми поверхностями.


6-1195543220
Alex_C
2007-11-20 10:20
2008.11.16
Синхронизация времени через интернет средствами Windows


2-1223225518
koha!
2008-10-05 20:51
2008.11.16
TListView - и снова вопросы....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский