Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов функции из функции [D7, XP]


Страницы:   1 2 3

Сергей ©   (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);


А это к чему такие выкрутасы с попыткой выдать регул.процедуру за метод класса ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо