Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2009, 16:39   #1
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию Вызов обработчика внутри собственной процедуры

Имеется написаная собственная процедура procedure MyProc();.
Как внутри этой процедуры использовать стандартный обработчик события, например - TForm1.Button1Click или TForm1.KeyDown ? Скажем по наступлению события произошел выход из процедуры MyProc.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 09.12.2009, 16:43   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,742
По умолчанию

не совсем понял, вызвать обработчик или проверить, произошел ли он?
1- TForm1.Button1click(nil)
2- в обработчике TForm1.Button1click меняем глобальный флаг, а в MyProc его проверяем.
...что-то Владимир вас не узнаю или я чего-то "не догоняю"
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.12.2009, 16:48   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,803
По умолчанию

Либо
Form1.Button1Click(Button1)
Либо
Form1.Button1.Click

Соответственно
Form1KeyDown(Form1,#0)

Короче тупо вызывать методы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2009, 17:31   #4
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вопрос в том, что пока программа находится в MyProc, кнопки Button или клавиши клавиатуры Key недоступны.
Код:
procedure MyProc;
var i,N: integer;
begin
  for i:= 0 to  N do
  begin
    < выполняется какая то  операция процедуры MyProc >
    < здесь надо проверить не нажата ли кнопка Form1.Button1
       и если нажата, обработать это событие > 
  end;
end;
Цитата:
тупо вызывать методы.
Как именно внутри MyProc вызвать TForm1.Button1Click(Sender:TObject) .
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 09.12.2009 в 17:35.
DeKot вне форума Ответить с цитированием
Старый 09.12.2009, 17:34   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Задаем флаг (глобальная булева переменная), который станет истиной при нажатии баттона, и проверяем значение флага.
Если он установлен - сбрасываем его и обрабатываем то, что там нужно при условии нажатия баттона...
Перед проверкой флага нужно сделать
Код:
Application.ProcessMessages.
mihali4 вне форума Ответить с цитированием
Старый 09.12.2009, 18:03   #6
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Михалыч, само то.
Код:
var
  Form1: TForm1;
  x,y: integer;
  flag_on_off: boolean;

implementation

{$R *.dfm}

procedure DrawGraf;
begin
  while flag_on_off = true do
  begin
    Application.ProcessMessages;
    if flag_on_off = false then EXIT;
    y:= y + 50;
    Form1.Canvas.LineTo(x,y);
    Sleep(50);
    x:= x + 20; y:= y - 50;
    Sleep(50);
    Form1.Canvas.LineTo(x ,y);
    if x >= 600 then
    begin
      x:= 50; y:= 300;
      Form1.Canvas.MoveTo(x,y);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  x:= 50;
  y:= 300;
  flag_on_off:= true;
  Form1.Canvas.MoveTo(x,y);
  RePaint;
  DrawGraf;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  flag_on_off:= false;
end;

end.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Старый 09.12.2009, 18:17   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
while flag_on_off = true do
  begin
    //Application.ProcessMessages;
    if flag_on_off = false then EXIT;
...
    Application.ProcessMessages; //лучше здесь
  end;
Красное - не имеет смысла, ведь вы входите в цикл при flag_on_off = true.

Последний раз редактировалось mihali4; 09.12.2009 в 18:21.
mihali4 вне форума Ответить с цитированием
Старый 09.12.2009, 19:13   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Это я просто наскоро пример накидал - в цикле рисуется "пила" и важен факт именно "аварийного" выхода не только из самой процедуры, а именно внутри цикла. Мне как раз и недоставало конструкции
Application.ProcessMessages;
< обращение к событию вне идущего процесса>
В данном случае - доступ события за процедурой и за циклом.
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ожидание внутри процедуры Juffin Общие вопросы Delphi 5 01.06.2009 13:52
Вызов процедуры Kashp Общие вопросы Delphi 4 31.03.2008 16:22
Вызов процедуры Stanislav Общие вопросы Delphi 9 22.11.2007 19:01
Объявление собственной глобальной процедуры Gorin Общие вопросы Delphi 11 06.11.2007 17:49
Вызов процедуры Илья Кибель Помощь студентам 7 17.09.2007 19:43