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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2014, 16:08   #1
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию Одновременная реакция

Мне нужно одновременно обработать два событие. Как сделать?
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

var
  i:integer;
  coorxb,cooryb:integer;

begin
 coorxb := 20; cooryb := 100;
  if key = vk_left then
  begin
      with  form1.Canvas do
   begin
      brush.Color := clred;
      pen.Color := clred;
        // Когда это изображение прорисовывалась мне нужно
чтобы в то же время действовало код для кнопки Vk_left
      for i := 1 to 30 do
        begin


           brush.Color := clred;
           pen.Color := clred;
          ellipse(coorxb + 41,cooryb +20,coorxb + 50,cooryb + 30);
           sleep(50);
            brush.Color := clskyblue;
           pen.Color :=  clskyBlue;
             ellipse(coorxb + 41,cooryb +20,coorxb + 50,cooryb + 30);
            coorxb := coorxb +3;

        end;

   end;

  end;
aleksskay вне форума Ответить с цитированием
Старый 14.04.2014, 10:01   #2
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 979
По умолчанию

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

Код:
Form1.Vk_left.Click;
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 14.04.2014 в 10:07.
IliaIT вне форума Ответить с цитированием
Старый 14.04.2014, 10:59   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

слова одновременная работа и наличие sleep, намекают на выполнение в течение интервала времени и прорисовкой по каждому отдельному "такту" работы.
Для этого есть таймеры

1. добавляем на форму таймер (TTimer вкладка System )
2. объявляем процедуру-метод и внутренние переменные
Код:
TForm1 =class(TForm)
  ...
private
  coorbx, coordby, maxcount: integer;
  currentcount: integer;

  procedure StartDrawElipse(const x,y, count: integer); 
  ...
end;
3. задаем обработку события таймера в котором (см. комментарии)
Код:
procedure Tform1.Timer1timer(sender: TObject);
begin
  currentcount:=currentcount+1; //считаем количество срабатываний
  self.timer1.enabe:=(currentcount<maxcount); //останавливаем таймер!!

  //"стираем" по старым
  brush.Color := clred;
  pen.Color := clred;
  ellipse(coorxb + 41,cooryb +20,coorxb + 50,cooryb + 30);
  // меняем координаты
  coorxb := coorxb +3;
  // "рисуем" по новым
  brush.Color := clred;
  pen.Color := clred;
  ellipse(coorxb + 41,cooryb +20,coorxb + 50,cooryb + 30);
  
end;
4. пишем код метода
Код:
procedure TFrom1.StartDrawElise(x,y, count: integer);
begin
  self.Canvas.brush.color:=clred;
  self.canvas.pen.color:=clred;

// устанавливаем параметры повторов 
  coorbx:=x; coorby:=y;
  maxcount:=30; currentcount:=0;
// и запускаем таймер рисования
  self.timer1.interval:=50;
  self.timer1.enable:=true;
end;
5. меняем код KeyDown на вызов метода StartDrawElipse
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);

begin
  if key = vk_left then
  begin
    StartDrawElipse(20,20,30);
  end;

end;
P.S. можно конечно не писать StartDrawElipse, а запихать ее код в FormKeydown, но ...
P.P.S. возможно исходная задача (рисования движущегося эллипса) понята не совсем верно.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.04.2014 в 11:04.
evg_m вне форума Ответить с цитированием
Старый 14.04.2014, 18:08   #4
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию архив

Вот в архиве есть программа, там самолет движется. Вот при нажатия пробела он стреляет, и когда он стреляет он не может двигаться.Как сделать так чтобы он двигался во время выстрелов?
Вложения
Тип файла: rar myPlane.rar (170.3 Кб, 15 просмотров)
aleksskay вне форума Ответить с цитированием
Старый 14.04.2014, 18:28   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Самолет живет своей жизнью, а выстрелы своей.
В одном цикле одновременно обработываете полет самолета и полет снарядов.
Код:
while LifeCycle do
begin
  {Пускай некий список 1
   Обрабрабатываем самолет(ы)
  }
  {Пускай некий список 2
   Обрабрабатываем выстрел(ы)
  }
end;
Как только самолет стреляет, его выстрел идет в список 2, и он как бы параллельно рисуется одним циклом вместе с движением самолета.
Человек_Борща вне форума Ответить с цитированием
Старый 14.04.2014, 22:02   #6
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию

Из чего список?
aleksskay вне форума Ответить с цитированием
Старый 14.04.2014, 22:29   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Ну хз, у меня бы он был из выстрелов. Какой танк, откуда, какая нач. скорость, направление и .тд. и т.п.
Человек_Борща вне форума Ответить с цитированием
Старый 15.04.2014, 17:36   #8
aleksskay
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 102
По умолчанию

не доходит
aleksskay вне форума Ответить с цитированием
Старый 15.04.2014, 21:41   #9
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Вот недавно побное же решал http://www.cyberforum.ru/delphi-mult...ad1126811.html могу и вложения сюда поскидать
Ключевая же мысль по вашей проблеме озвучена тут http://programmersforum.ru/showthread.php?p=1359370 (хоть и сишарп но понятно будет)

Последний раз редактировалось phomm; 15.04.2014 в 21:51.
phomm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одновременная трансляция Green4el Свободное общение 0 25.02.2013 15:33
одновременная работа с двумя DBGrid Vashkin БД в Delphi 5 16.12.2011 13:09
Одновременная работа с окнами Bezsmertniy Помощь студентам 0 04.11.2010 11:25
одновременная печать формы и Webbrowser tigr1991 Общие вопросы Delphi 5 01.10.2008 14:43