![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов функции из функции [D7, XP]
Сергей © (2011-01-14 22:08:00)Вызов функции из функции
Код такой:
type
TGetMy = procedure() of object;
function MyFunc1(OnGetMy : TGetMy = nil): Boolean;
procedure EvOnChange(Self, Sender: TObject);
begin
if Assigned(OnGetMy) then OnGetMy(); // Âòîðîé âûçîâ.
end;
var
Form : TForm;
EvChange : TMethod;
begin
if Assigned(OnGetMy) then OnGetMy(); // Ïåðâûé âûçîâ.
Form := TForm.Create(Application);
with Form do begin
with TEdit.Create(Form) do begin
Parent := Form;
EvChange.Code := @EvOnChange;
OnChange := TNotifyEvent(EvChange);
end;
// ...
end;
end;
Проблема в том, что первый вызов OnGetMy проходит, а второй из функции EvOnChange вызывает ошибку Дельфи. Вопрос, как сделать вызов правильно, чтобы ошибки не возникало?
(2011-01-15 20:00:00) [41]Удалено модератором
sniknik (2011-01-15 17:07:00) [42]> как осуществить нужный вызов у вас нету. :)
зато есть сомнения в нужности самого "нужного вызова".
> эти детсадовские примеры как создать TButton или TMyClass?
эти детсадовские примеры - основа ООП. либо следуй либо не используй.
> в данной конкретной ситуации
в данной конкретной ситуации способ простой, не использовать локальную (стековую) переменную при вызове ее в кода в другом месте. а сохранить ее где нибудь в доступном из обоих мест месте, например.
(говорил же просто)
> а не в миллионе других ситуаций
т.е. зацикливаться на кривом методе решения, вместо того чтобы достичь цели миллионом других методов? цель подменена средством.
> Это вам не TButton на TForm1 создавать.
а ты так нифига и не понял.
Сергей (2011-01-15 16:52:00) [43]Похоже непреодолимый смысловой преобразователь продолжает работать, работать, работать ...
> Amoeba_ (15.01.11 02:09) [11]
>
> Автору вопроса:
> http://www.gunsmoker.ru/2008/10/x-y-z.html
В ход пошли саги. Пытаясь осуществить обратное смысловое преобразование, сея сага означает, что ответа на вопрос из первого постинга, как осуществить нужный вызов у вас нету. :)
> Германн © (15.01.11 01:30) [9]
>
> > Сергей (14.01.11 22:08)
>
> Тёзка, читай эту основополагающую статью до полного просветления!
>
> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342
Опять TForm1, TForm1, TForm1.
В постинге [8], тёзка, я сообщил, что меня не интересует TForm1, а также никакие лишние классы. Сколько можно вываливать эти детсадовские примеры как создать TButton или TMyClass?
В первом постинге описана конкретная ситуация, и задан вопрос, знает ли кто-нибудь способ вызова функции в данной конкретной ситуации ( а не в миллионе других ситуаций ). Похоже, что пока никто не знает.
Это вам не TButton на TForm1 создавать.
Германн (2011-01-15 02:22:00) [44]
> sniknik © (15.01.11 02:13) [12]
>
> > Тёзка, читай эту основополагающую статью до полного просветления!
>
> просветление вряд ли наступит, ведь там нет ответа "как
> сделать вызов правильно" в его коде... а все остальное,
> в том числе и относительно правильный код, его не интересует.
>
Ну "Надежда" всегда остаётся последней. Так может быть автор всё-таки просветлеет?
sniknik (2011-01-15 02:13:00) [45]> Тёзка, читай эту основополагающую статью до полного просветления!
просветление вряд ли наступит, ведь там нет ответа "как сделать вызов правильно" в его коде... а все остальное, в том числе и относительно правильный код, его не интересует.
Amoeba_ (2011-01-15 02:09:00) [46]Автору вопроса:
http://www.gunsmoker.ru/2008/10/x-y-z.html
P.S. Тонкий намек на толстые обстоятельства.
sniknik (2011-01-15 02:04:00) [47]> как наплодить не нужные мне классы.
описание типа это не класс... в смысле, не физический объект занимающий место. наплодить описаниями нельзя, зато, описанием можно представить одни и те же данные в разной интерпретации, что позволяет избежать бессмысленного перекладывания этих самых данных с места на место, только ради того, чтобы чему то что то присвоить (к тому же проигнорировав "лишнее").
> Меня НЕ интересует никакая TForm1. А равно и все другие формы.
как же так, а твой пример в [0]? без "других форм" не потребовалось бы "присобачивать" регулярную процедуру методу класса.
т.е. это твое утверждение лишает последнего смысла сам вопрос.
> как правильно осуществить вызов из примера в первом постинге.
легко, честное слово легко, но хотелось бы знать цель, а не исправлять бредовый способ под "неведому зверушку"...
Германн (2011-01-15 01:30:00) [48]
> чтобы не смущать народ странными привидениями
Да. Не надо смущать народ привидениями. К тому же они и не так страшны, как их малюют. :)
> Сергей (14.01.11 22:08)
Тёзка, читай эту основополагающую статью до полного просветления!
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342
И тогда никаких извратов не потребуется.
Сергей (2011-01-15 01:05:00) [49]
> sniknik © (15.01.11 00:50) [7]
>
> > код читать то умеешь?
> чтобы не напрягать твой ум.... TForm1 нет.
Похоже между нами стоит непреодолимый смысловой преобразователь. На мой вопрос из первого постинга как вызвать функцию, я получаю любые ответы, кроме ответа на вопрос как вызвать функцию.
> sniknik © (15.01.11 00:50) [7]
> TMyClass = class
> procedure Change(Sender: TObject);
> end;
Меня НЕ интересует TMyClass.
Меня НЕ интересует вопрос как наплодить не нужные мне классы. Также как и вопрос о том, сколько будет один плюс один, два плюс два и тому подобные.
> procedure TForm1.Button1Click(Sender: TObject);
Меня НЕ интересует никакая TForm1. А равно и все другие формы.
Меня НЕ интересует миллион других вопросов.
На данный момент интересует только один вопрос, как правильно осуществить вызов из примера в первом постинге.
sniknik (2011-01-15 00:50:00) [50]> код читать то умеешь?
чтобы не напрягать твой ум.... TForm1 нет.
program Izvrat;
{$APPTYPE CONSOLE}
uses
SysUtils, Dialogs, Forms, StdCtrls;
type
TMyClass = class
procedure Change(Sender: TObject);
end;
procedure TMyClass.Change(Sender: TObject);
begin
ShowMessage('Event Change');
end;
var
Form: TForm;
begin
Form:= TForm.Create(Application);
with TEdit.Create(Form) do begin
Parent := Form;
OnChange:= TMyClass(nil).Change;
end;
Form.ShowModal;
end.
sniknik (2011-01-15 00:42:00) [51]> была TForm1
ну так убери, к коду тут оно никакого отношения не имеет. считай, что не кнопка не нажимается, а делается вызов регулярной процедуры.
код читать то умеешь?
> ответить на вопрос из первого постинга?
ну, как бы отвечено уже, ошибок не возникает.
Сергей (2011-01-15 00:33:00) [52]
> <Цитата>
>
> sniknik © (15.01.11 00:15) [3]
>
> > сделать то же самое?
> сильно сомневаюсь в необходимости этого (задачи как таковой
> кроме "сделать изврат" нет), но например ...
> type
> TMyClass = class
>
> procedure TForm1.Button1Click(Sender: TObject);
Если бы у бабушки была TForm1, то она была бы дедушкой.
Впрочем это всё оффтоп.
Может ли кто-нибудь ответить на вопрос из первого постинга?
sniknik (2011-01-15 00:19:00) [53]или (чтобы не смущать народ странными привидениями типов) так -
type
TMyEdit = class(TEdit)
procedure Change(Sender: TObject);
end;
procedure TMyEdit.Change(Sender: TObject);
begin
ShowMessage('Event Change');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Form: TForm;
begin
Form:= TForm.Create(Application);
with TMyEdit.Create(Form) do begin
Parent := Form;
OnChange:= Change;
end;
Form.ShowModal;
end;
sniknik (2011-01-15 00:15:00) [54]> сделать то же самое?
сильно сомневаюсь в необходимости этого (задачи как таковой кроме "сделать изврат" нет), но например ...
type
TMyClass = class
procedure Change(Sender: TObject);
end;
procedure TMyClass.Change(Sender: TObject);
begin
ShowMessage('Event Change');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Form: TForm;
begin
Form:= TForm.Create(Application);
with TEdit.Create(Form) do begin
Parent := Form;
OnChange:= TMyClass(nil).Change;
end;
Form.ShowModal;
end;
Сергей (2011-01-14 23:39:00) [55]
> Сергей М. © (14.01.11 22:33) [1]
>
> > procedure EvOnChange(Self, Sender: TObject);
>
> А это к чему такие выкрутасы с попыткой выдать регул.процедуру
> за метод класса ?
Знаете другой способ сделать то же самое?
Сергей М. (2011-01-14 22:33:00) [56]
> procedure EvOnChange(Self, Sender: TObject);
А это к чему такие выкрутасы с попыткой выдать регул.процедуру за метод класса ?