Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.04;
Скачать: CL | DM;

Вниз

Кнопка   Найти похожие ветки 

 
boogier   (2002-01-15 17:58) [0]

Как правильно сделать кнопку "Отмена" для прерывания вычислений и как обработать нажатие клавиши ESC?


 
Вадим   (2002-01-15 22:17) [1]

var
stop: boolean;

procedure XXX(...);
begin
Stop := False;
repeat
Application.ProcessMessages;
if stop then Exit;
until ...
end;

procedure Button1Click(...);
begin
Stop := True;
end;


 
Adder   (2002-01-16 08:45) [2]

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#27 then Ваши действия;
end;


 
boogier   (2002-01-16 14:14) [3]

Вадим ©
Понятно, а как сделать кнопку на прерывание выполняющегося запроса


 
kengura   (2002-01-16 18:56) [4]

Использовать Thread в который запихнуть выполнение запроса.


 
EsKor   (2002-01-17 07:23) [5]

>Adder © (16.01.02 08:45)
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#27 then Ваши действия;
end;
Эта процедура не работает, если вызывается длительный цикл вычислений щелчком на кнопке формы. Событие OnKeyPress для формы вообще не наступает. Не помогает и строка в цикле Form1.SetFocus.
Если этот обработчик назначить для события OnKeyPress этой кнопке, то обработка идет нормально, но до тех пор пока кнопка имеет фокус.
В связи с этим вопрос.
Как создать обработчик событий от клавиатуры не зависящий от расположения фокуса, или так - глобальный для данной формы, или м.б. для всего приложения?


 
panov   (2002-01-17 08:11) [6]

И вариант Вадим © (15.01.02 22:17),
и Adder © (16.01.02 08:45) работают.
Для обработки Keypress нужно, чтобы был установлено для формы
KeyPreview := True;


 
Anatoly Podgoretsky   (2002-01-17 10:01) [7]

Вадим © (15.01.02 22:17)

...
until stop;



 
Севостьянов Игорь   (2002-01-17 16:59) [8]

А можно еще поставить HOOK на клаву
Если речь идет о запросе из БД, то используя ассинхронный вид запроса ADO можно его прервать (TADOCommand)

Что-то типа этого

function RepaintScreen: Boolean;
var
Msg: TMsg;
begin
Result := False;
if PeekMessage(Msg, GetActiveWindow, 0, 0, PM_REMOVE) then
Case Msg.message of
WM_PAINT:begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
WM_KEYDOWN,
WM_KEYUP: if Msg.wParam = 27 then Result := True;
end;
end;

procedure TForm1.ExecuteCommand;
begin
with AdoCommand1 do
begin
CommandText := "spInsertNewUserDefaultInfo";
ADODataSet := Execute;
while States = stExecuting do WaitExecuteDone(AdoCommand1);
end;
end;

function TForm1.WaitExecuteDone(DataSet: TADOCommand): Boolean;
begin
if RepaintScreen then
begin
DataSet.Cancel;
raise EDatabaseError.Create("Операция отменена");
end;
end;


Пишу без делфей без проверки
Все вопросы по мылу




Страницы: 1 вся ветка

Текущий архив: 2002.02.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
1-8873
Turalyon
2002-01-15 09:44
2002.02.04
Динамические объекты


3-8781
Alexm
2002-01-07 16:06
2002.02.04
Вопрос!


1-8872
IronHawk
2002-01-15 18:30
2002.02.04
ОКРУГЛЕНИЕ ! ! ! . . .


7-9007
gunner
2001-10-25 18:30
2002.02.04
Работа с MCI устройством.... !


14-9000
Вадим
2001-12-12 18:21
2002.02.04
Не хорошо... :((