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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2013, 21:17   #11
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,873
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
Вместо каких либо действий на кнопку Escape Написал простейший ShowMessage.
Проблема в том что ShowMessage Выбивает только после окончания цикла ( если он не бесконечен ). То есть я могу нажать на Esc в любое время, а действие выполнится только после этого цикла. И как с этим бороться?
"Волшебная строчка". См. выше.
А нажатие кнопки и какой-то там ShowMessage это две большие разницы.

[QUOTE]для какой формы писать само действие при нажатии кнопки?/QUOTE]
Для активной. Или регистрируй горячую клавишу.
northener вне форума Ответить с цитированием
Старый 06.08.2013, 21:21   #12
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

"Волшебную строчку написал" А ShowMessage я написал не просто так, а после нажатия кнопки чтобы выдавало. Вообщем предоставляю код.

Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Speed:Integer;
var tempSpeed:Integer;
var tempRepeats:Integer;
var Repeats:Integer;
var iRepeats:Integer;
var ii:Integer;
begin
StopCircle:=False;
if Memo1.Lines.Count=0 then
begin
   ShowMessage('Ââåäèòå êîîðäèíàòû!');
   Exit;
end;
tempSpeed:=StrToInt(SpinEdit1.Text);
if tempSpeed =1 then Speed:=2000;
if tempSpeed =2 then Speed:=1500;
if tempSpeed =3 then Speed:=1000;
if tempSpeed =4 then Speed:=500;
if tempSpeed =5 then Speed:=100;
if edit1.Text='' then
begin
ShowMessage('Óêàæèòå êîëè÷åñòâî ïîâòîðîâ!');
Exit;
end;
if (Edit1.Text = '0') or (Edit1.Text = '00') or (Edit1.Text = '000') or (Edit1.Text = '0000') or (Edit1.Text = '00000') then
begin
 ShowMessage('Ââåäèòå ïðàâèëüíîå êîëè÷åñòâî ïîâòîðîâ (îò 1 äî 99999)!');
 Exit;
end;
if Edit1.Text[1] = '0' then begin ShowMessage('Ââåäèòå ïðàâèëüíîå êîëè÷åñòâî ïîâòîðîâ (îò 1 äî 99999)!'); exit; end;
if checkbox1.Checked = false then
begin
  Repeats:=StrToInt(Edit1.Text);
end;

iRepeats:=0;

if checkbox1.Checked=true then


 while (iRepeats<>999999999) do
begin
  for ii := 0 to i - 1 do
    begin
      SetCursorPos(Point[ii].X, Point[ii].Y);
      mouse_event(MOUSEEVENTF_LEFTDOWN,Point[ii].X,Point[ii].Y,0,0);
      mouse_event(MOUSEEVENTF_LEFTUP,Point[ii].X,Point[ii].Y,0,0);
      Sleep(Speed);
      Application.ProcessMessages;
      if StopCircle then Exit;
    end;
    iRepeats := iRepeats + 1;
end

else


while (iRepeats<>Repeats) do
begin
  for ii := 0 to i - 1 do
    begin
      SetCursorPos(Point[ii].X, Point[ii].Y);
      mouse_event(MOUSEEVENTF_LEFTDOWN,Point[ii].X,Point[ii].Y,0,0);
      mouse_event(MOUSEEVENTF_LEFTUP,Point[ii].X,Point[ii].Y,0,0);
      Sleep(Speed);
    end;
    iRepeats := iRepeats + 1;

end;

end;
begin if key=VK_SPACE then begin inc(i); setlength(Point,i); GetCursorPos(Point[i-1]); Memo1.Lines.Add('(X=' + IntToStr(Point[i-1].X)+ ',Y='+ IntToStr(Point[i-1].Y)+')'); end; if key=VK_DELETE then begin Memo1.Clear; i := 0; SetLength(Point, i); Memo1.ScrollBars:=ssNone; end; if key=VK_ESCAPE then begin Application.ProcessMessages; ShowMessage('qq'); end;
Praud вне форума Ответить с цитированием
Старый 07.08.2013, 02:00   #13
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,873
По умолчанию

Цитата:
Сообщение от Praud Посмотреть сообщение
Проблема в том что ShowMessage Выбивает только после окончания цикла ( если он не бесконечен ). То есть я могу нажать на Esc в любое время, а действие выполнится только после этого цикла. И как с этим бороться?
В этой каше, которую вы назвали кодом есть два варианта цикла. Один работает если checkbox1.Checked=true:
Код:
while (iRepeats<>999999999) do
Это тот цикл, который вы называете "бесконечным". В нем есть волшебная строчка. И есть проверка флага StopCircle с процедурой выхода.
И есть второй вариант (не бесконечный цикл):
Код:
while (iRepeats<>Repeats) do
А в нем волшебной строчки нет как и проверки флага!
northener вне форума Ответить с цитированием
Старый 07.08.2013, 02:49   #14
Praud
Форумчанин
 
Аватар для Praud
 
Регистрация: 11.10.2012
Сообщений: 409
По умолчанию

Уже разобрался во всем, спасибо.
Цикл сделал бесконечный, это все писалось "абы заработало"
Praud вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Действие по времени Letnab Общие вопросы Delphi 2 20.03.2011 21:39
webbrowser и кнопка в нем, нажатие - действие grafgrial Общие вопросы Delphi 6 08.12.2010 14:03
Не повторяется действие waterya Общие вопросы Delphi 17 17.06.2010 15:24
выполнить действие. IVANSour Общие вопросы Delphi 6 01.02.2009 22:53