Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
1-8909
ilg
2002-01-17 13:15
2002.02.04
Есть ли у панели канва?


1-8845
Eraser
2002-01-21 10:58
2002.02.04
Где sleep


1-8904
Filat
2002-01-14 20:50
2002.02.04
Как создать в Word и вывести на печать страницу


1-8874
Antoniz
2002-01-16 10:00
2002.02.04
Работа с потоками


3-8804
Potemkin
2002-01-03 09:55
2002.02.04
Вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский