Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выход из цикла 
V
    Опции темы
NewDima
  Дата 2.3.2006, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 2
Всего: 12



Нужно предусмотреть выход из цикла при движении мышью или нажатии на любую клавишу smile
Repeat
...
...
...
Until ???.
Как это сделать?
PM ICQ   Вверх
Ozzя
Дата 2.3.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.7.2004

Репутация: нет
Всего: 1



Break (procedure)
Terminates a for, while, or repeat statement.


Remarks:

Causes the innermost enclosing for, while, or repeat statement to be exited
immediately.

Is similar to a goto statement addressing a label just after the end of the
innermost enclosing repetitive statement.

The compiler will report an error if a call to Break is not enclosed by a
for, while, or repeat statement.
PM MAIL   Вверх
Dian
Дата 2.3.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 2.1.2006

Репутация: нет
Всего: 1



Код

Repeat
...
...
...
Until Flag

Флаг ставишь по нажатию на кнопку и т.п.
Обрати внимание, что поток, выполняющий цикл будет занят. Если он единственный, то некому будет обрабатывать сообщения. Один из вариантов - явно вызывать Application.ProcessMessages в цикле
PM MAIL WWW   Вверх
Ozzя
Дата 2.3.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.7.2004

Репутация: нет
Всего: 1



Dian,
Для цикла repeat .. until есть нюанс - сначала выполняется тело цикла, и затем проверяется условие окончания цикла.
В данном случае, при выходе по флажку, может случиться так, что в координатах мыши (переменной, в которую будет занесено значение_нажатой_клавиши) окажутся последующие значения.
Добавлено @ 10:46
break же приводит к немедленному выходу из цикла.
PM MAIL   Вверх
Snowy
Дата 2.3.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код
var
  LastInput: TLastInputInfo;
  dwTime:    dword;
begin
  GetLastInputInfo(LastInput);
  dwTime := LastInput.dwTime;
  repeat
    ....
    GetLastInputInfo(LastInput);
  until LastInput.dwTime <> dwTime;

end;

PM MAIL   Вверх
Демо
Дата 2.3.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Автору ведь надо обрабатывать движение мыши.
Вот только что за цикл такой, который нужно прерывать при обращении пользователя к графическому интерфейсу.

Мне кажется, что такой цикл было бы логичнее вынести в Application.OnIdle. Например:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ComCtrls;

type

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure IdleHandler(Sender: TObject; var Done: Boolean);
    procedure Button1Click(Sender: TObject);
  private
    Flag: Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
begin
  if Flag then
  begin
    Form1.Tag := Form1.Tag + 1;
    Label1.Caption := IntToStr(Form1.Tag);
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Flag := False;
  Application.OnIdle := IdleHandler;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Flag := not Flag;
end;

end.




--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 2.3.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Демо @ 2.3.2006, 14:06 Найти цитируемый пост)
Автору ведь надо обрабатывать движение мыши.
В моем варианте ничего обрабатывать не нужно.
Система сама скажет, трогал юзер мышу или клаву или нет.
Остальное нам не интересно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.