Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Вызов процедуры в процедуре


Автор: Kbl4AH 28.7.2008, 09:58
Здравствуйте, уважаемые.
Подскажите, пожалуйста, как вызвать стандартную процедуру из другой стандартной процедуры?
Например, как вызвать procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char)
внутри procedure TFLogon.RadioGroup1Click(Sender: TObject) ?
То есть мне нужно, чтобы при клике на радиогруп выполнился код, находящийся в теле процедуры едиткейпресс.
Заранее признателен.

Автор: pseud 28.7.2008, 10:14
Цитата(Kbl4AH @  28.7.2008,  09:58 Найти цитируемый пост)
То есть мне нужно, чтобы при клике на радиогруп выполнился код, находящийся в теле процедуры едиткейпресс.

никогда так не делай, ну или почти никогда.
лучше объяви самостоятельную процедуру, которую будешь вызывать и из едиткейпресс, и из радиогрупклик

Автор: sai_NT 28.7.2008, 10:17
Перенеси весь код процедуры TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) в отдельную процедуру, и размести ее в секции импламентейшн модуля формы Form1 и обзови допустим MyEditKeyPress, также объяви заголовок процедуры в секции интрерфейса.

Далее такой вызов (пишу без Делфи, по памяти):
Код

unit Unit2; // юнит формы FLogon

interface
  uses ..., Unit1; // юнит формы Form1

implementation

...

procedure TFLogon.RadioGroup1Click(Sender: TObject) 
begin
  MyEditKeyPress(Form1.Edit1; #13);//передал код клавишы Enter
end;

...

end.

Автор: Kbl4AH 28.7.2008, 10:26
Прикольно!
А если описание процедуры посложнее и не всегда понятно какой параметр указать?
Например, если вызвать procedure FormClose(Sender: TObject; var Action: TCloseAction) вышеописанным путем, а не по Close.
В таком случае какие параметры нужно указывать?

Автор: Poseidon 28.7.2008, 11:07
Цитата(Kbl4AH @  28.7.2008,  09:58 Найти цитируемый пост)
 как вызвать procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char)внутри procedure TFLogon.RadioGroup1Click(Sender: TObject) ?


Если универсально и передаваемые параметры не используются, то где-то так:
Код

procedure TForm1.RadioGroup1Click(Sender: TObject);
var Key: Char;
begin
Edit1KeyPress(Sender, Key);
end;



Цитата(Kbl4AH @  28.7.2008,  10:26 Найти цитируемый пост)
Например, если вызвать procedure FormClose(Sender: TObject; var Action: TCloseAction) 


Код

procedure TForm1.RadioGroup1Click(Sender: TObject);
var Action: TCloseAction;
begin
FormClose(Sender, Action);
end;
 но все-таки лучше вызвать Form1.Close


PS. Никогда так не делай. Это я тебе так... справочно показал. Использовать не следует!

Автор: Kbl4AH 28.7.2008, 12:40
Спасибо!

Автор: sai_NT 28.7.2008, 13:09
Цитата(Poseidon @ 28.7.2008,  11:07)
Цитата(Kbl4AH @  28.7.2008,  09:58 Найти цитируемый пост)
 как вызвать procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char)внутри procedure TFLogon.RadioGroup1Click(Sender: TObject) ?


Если универсально и передаваемые параметры не используются, то где-то так:
Код

procedure TForm1.RadioGroup1Click(Sender: TObject);
var Key: Char;
begin
Edit1KeyPress(Sender, Key);
end;



Обрати внимание на то, что процедуры в разных модулях: TForm1 и TFLogon, а значит вышепредставленный код не пройдет.

Автор: Poseidon 28.7.2008, 13:34
Цитата(sai_NT @  28.7.2008,  13:09 Найти цитируемый пост)
Обрати внимание на то, что процедуры в разных модулях: TForm1 и TFLogon, а значит вышепредставленный код не пройдет.
 
Это ты уже придераешься. Написано же 2в общем случае".

Код

procedure TForm1.RadioGroup1Click(Sender: TObject);
var Key: Char;
begin
FLogon.Edit1KeyPress(Sender, Key);
end;


Автор: sai_NT 28.7.2008, 13:49
Цитата(Poseidon @ 28.7.2008,  13:34)
Это ты уже придераешься. Написано же 2в общем случае".

Ни в коем случае =), просто поддерживаю мнение г-жи Riply по поводу того, что этот код потом могут копипастить.

Автор: pseud 28.7.2008, 14:30
Цитата(sai_NT @  28.7.2008,  13:49 Найти цитируемый пост)
Ни в коем случае =), просто поддерживаю мнение г-жи Riply по поводу того, что этот код потом могут копипастить.

тем более надо писать немного ошибочный код. чтоб чел немного и сам подумал. для его же пользы

Автор: Dobermann 28.7.2008, 14:44
Цитата(pseud @  28.7.2008,  15:30 Найти цитируемый пост)
тем более надо писать немного ошибочный код. чтоб чел немного и сам подумал. для его же пользы

Эх...как же меня это по началу бесило!!! Но действительно, польза огромнейшая!!!

Автор: Kbl4AH 29.7.2008, 07:44
Ребят, не ссорьтесь.
Недоглядел и забыл изменить название формы в одном месте.
А насчет думать...
Если вопрос звучит в общих чертах, то и ответить можно также - чел дальше сам докумекает, главное идея...
А если в вопросе конкретный код, то и ответить нужно по возможности учитывая конкретный код...
А насчет копипастить... Не совсем уж я глупый, могу различить для какой формы процедура описана;)
Еще раз спасибо за ликбез!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)