Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2008, 22:48   #1
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию как реализовать процедуру в процедуре?

На Delphi. покажите просто пример. Я весь инет обрыщил тама нету....
мне надо в FormCloseQuery сделать свою процедуру
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 11.07.2008, 23:13   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вы процедуру-то выше опишите, а в FormCloseQuery вызовите ее через параметры. А уж как делать подпрограммы, во всех книжках написано.
puporev вне форума Ответить с цитированием
Старый 11.07.2008, 23:18   #3
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

вот тебе пример:
Код:
implementation

{$R *.dfm}

//создаем свою процедуру (любую почти)
Procedure Line_Ris;
begin
   with Form1.Canvas do
    begin
    MoveTo(100, 100);
    LineTo(200,100);

    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Line_Ris; //объявляем ее тут
end;

end.
с твоим FormCloseQuery - аналогия такая же.

Понятно?

Если используешь компоненты в своей процедуре, то вот так:
Код:
implementation

{$R *.dfm}

//создаем свою процедуру
procedure Attack_Edit(Edit1, Edit2: TEdit; Label1: Tlabel);
var a, b, itog: double;
begin
  a:= StrToFloat(Edit1.Text);
  b:= StrToFloat(Edit2.Text);
  itog:= a+b;
  Label1.Caption:= FloatToStr(itog);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Attack_Edit(Edit1, Edit2, Label1); //объявляем ее тут
end;
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 11.07.2008 в 23:30.
Roof вне форума Ответить с цитированием
Старый 12.07.2008, 14:31   #4
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

не это то и ежу понятно ;-) ,а я хочу засунуть процедуру в процедуру, слышал можно так. А вот как не знаю и куда ее засунуть тоже...
чтобы было типа:

Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
procedure My_Proc ();
begin 
...
end;  //My_Proc
end; //TForm1.FormCloseQuery
но так компилятор не хочет!!!
А как правильно написать???
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 12.07.2008, 15:30   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
А как правильно написать???
Процедуру надо перед begin'ом поставить
Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose:Boolean);   
procedure My_Proc ();  
begin    
//тут наши действия
end;
begin    
...  
My_Proc;
... 
end;
Или как puporev предложил
Код:
procedure My_Proc ();  
begin    
//тут наши действия
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose:Boolean);   
begin    
...   
My_Proc;
...
end;
Если код большой, лучше отдельно написать или в другой модуль вынести (для лучшей читабельности кода)

Последний раз редактировалось eoln; 12.07.2008 в 15:38.
eoln вне форума Ответить с цитированием
Старый 12.07.2008, 19:53   #6
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

Тогда ее потом из FormCloseQuery вызывать же надо, а это потеря в скорости - опять POPA и PUSHA регистров, а хотелось без них обойтись...
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 12.07.2008, 20:03   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Можно ведь совсем не писать процедуру, а нужные действия написать в процедуре TForm1.FormCloseQuery(Sender: TObject; var CanClose:Boolean);
puporev вне форума Ответить с цитированием
Старый 12.07.2008, 20:08   #8
Аlex
Форумчанин
 
Регистрация: 16.11.2006
Сообщений: 175
По умолчанию

А мне надо их потом вызывать из другого модуля, да и вообще не только сейчас это нужно, а часто приходится сталкиваться, всегда вот обходил стороной, а сейчас хочу докапаться до истины ;-) ...
чайник юзеру не товарищ, а сам себе враг...
Аlex вне форума Ответить с цитированием
Старый 12.07.2008, 20:12   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вызвать процедуру в другую программу можно только их модуля или dll. Так что вам ее не то что в вашей процедуре нельзя писать, а даже вообще в этой программе.
puporev вне форума Ответить с цитированием
Старый 13.07.2008, 02:10   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Аlex Посмотреть сообщение
Тогда ее потом из FormCloseQuery вызывать же надо, а это потеря в скорости - опять POPA и PUSHA регистров, а хотелось без них обойтись...
Эвон... Если уж Вам так критична (аж до одной инструкции) производительность, так не пишите вообще на объектном языке, делайте это на ассемблере. Кстати, не припоминаю, чтобы дельфи пользовалась pusha и popa при вызовах/входах, их вообще используют крайне редко. Да и кроме того, способ вызова одинаковых процедур, а уж тем более их "внутренности" в данном случае не будут отличаться.

Цитата:
Сообщение от Аlex Посмотреть сообщение
....всегда вот обходил стороной......
Если Вы о вложенных функциях/процедурах, то правильно делали, очень плохой стиль.
B_N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход к другой процедуре Detka Общие вопросы Delphi 7 13.07.2008 16:50
Вопрос по процедуре VenMaster Общие вопросы Delphi 5 13.06.2008 17:37
как в процедуре объявить массив? kolduev Помощь студентам 7 18.02.2008 23:35
Ошибка в процедуре GAGARIN-NEW Помощь студентам 2 21.12.2007 09:23