Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кнопка


boogier ©   (2002-01-15 17:58:00) 

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


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

А можно еще поставить 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;


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


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

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

...
until stop;


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

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


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

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


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

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


boogier   (2002-01-16 14:14:00) [6]

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


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

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


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

var
stop: boolean;

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо