![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Здравствуйте,господа!вопрос, как в Delphi называется клавиша Ctrl
ян © (2006-04-14 18:20:00)Сабж
ASoft (2006-04-20 05:24:00) [1]
> а если отключить, не удалит ли он без подтверждения?
удалит без предупреждения, если в dataset установлен автоэдит, если таблица не стоит в readonly, если ttable не readonly и т.п. и т.д.
ян (2006-04-19 20:10:00) [2]dgConfirmDelete даже с false спрашивает подтверждение на удаление!
ян (2006-04-18 19:51:00) [3]Ага, попробуем!надо в зависимости от CheckBox'a(checked или unchecked).
но это мелочи...
а если отключить, не удалит ли он без подтверждения?
ASoft (2006-04-18 03:58:00) [4]ян, отключите в опциях DBGrid dgConfirmDelete и не придумывайте. Ведь вам это надо, что бы по Ctrl+Del запись не удалялась?
ян (2006-04-17 19:32:00) [5]Abort тоже не действует
как я понял, в проге стоит обработчик, который по нажатию Ctrl + Del
спрашивает "Удалить запись или нет?",причем он это событие отслеживает раньше, чем OnKeyDown.
так вот, где он может быть прописан, чтобы я смог его найти?
какие версии?
Stakan (2006-04-15 15:20:00) [6]ян (15.04.06 14:29) [12]
Попробуй вместо key:=0;
написать Abort;
ян (2006-04-15 14:29:00) [7]удаляет в смысле!))
ян (2006-04-15 14:28:00) [8]Нужно чтоб не удаляла
а
if (ssctrl in Shift) and (key=vk_delete) then
key:=0;
не удаляет!!
Gero (2006-04-15 01:23:00) [9]Клавиша Ctrl в Delphi называется точно также, как и в любом другом приложении.
kilkennyCat (2006-04-14 20:56:00) [10]А вдруг оно удаляется по Up ?
Дарья (2006-04-14 20:41:00) [11]попробуй 46 или $2E хотя суть то не меняеться
тебе нужно чтоб удаляла или че?
Дарья (2006-04-14 20:39:00) [12]key:=0; хм...
ян (2006-04-14 19:47:00) [13]Большое спасибо за такой ответ, но пишу
if (ssctrl in Shift) and (key=vk_delete) then
key:=0;
не работает...все равно успешно удаляет
Дарья (2006-04-14 19:20:00) [14]Двигаемся дальше. Основной параметр - это параметр Key. Параметр Key определяет нажатую в момент события клавишу клавиатуры. Проверять нажатую клавишу можно, сравнивая Key с целым десятичным кодом клавиши. В этом случае обработчик события OnKeyDown. Посмотрим это на примере:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (key = 13) then
close;
end;
В этом примере по нажатию клавиши "Enter" приложение закрывается.
Тот же самый пример можно записать так:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
//if (key = 13) then
//close;
if (key = $0D) then
close;
end;
Или так:
if (key = VK_RETURN) then close;
Для клавиш символов и цифр можно производить проверку сравнением с десятичным или шестнадцатеричным кодом, но это не удобно. Поэто легче в оспользоваться функцией ord параметра Key. Посмотрим на примере:
if (key = ord('W')) then close;
опять же по нажатию на "W" приложение закрывается. Ещё есть параметр "Shift" типа TshiftState определяет, какие вспомогательные клавиши на клавиатуре нажаты в момент нажатия другой клавиши. TShiftState (ssalt, ssctrl, ssleft, ssright, ssmiddle).
if ((key = ord('A')) and (ssalt in shift)) then close;
В этом примере по нажатию на "alt" и "a" приложение закрывается.
Теперь переходим к обработчику событий OnKeyPress. В данном случае в обработчик передается не вертуальный код клавиши, а символ, по которому можно определить, прописная это буква, или строчная, русская, или латинская. Пример:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ((key = 'Д') or (key = 'L')) then
close;
end;
а можно записать короче с помощью операцией "in":
if (key in ['Д','д']) then
close;
А вот с помощью вот следующего кода пользователь сможет писать в строковом поле только цифры, запаятые и пробелы:
if not (key in ['0'..'9', ' ', ',']) then key:=#0;
Как вы поняли "#0" это обнуление символа. Значит можно поменять "#0" на любой другой, например:
if not (key in ['0'..'9', ' ', ',']) then key:=#13;
Теперь не обнуляет, а делает переход на новую строку(enter). Так же можно добавить в обработчик звуковой сигнал при нажатии пользователем ошибочной клавиши:
if not (key in ['0'..'9', ' ', ',']) then
begin
key:=#0;
beep;
end;
Нуууссссс…..с обработчиками заканчиваю.
Теперь я покажу, как заблокировать клавиатуру. Мы будем использовать функцию WinExec. О функции WinExec я напишу позже. Вот код блокировки клавиатуры:
procedure TForm1.Button4Click(Sender: TObject);
begin
winexec(Pchar('rundll32 keyboard,disable'),sw_Show);
end;
Итак мы тут запускаем rundll32 и передаем keyboard,disable.
ян (2006-04-14 18:42:00) [15]Ээ.. ssCtrl тоже не работает
Ega23 (2006-04-14 18:35:00) [16]Что здесь Shift? А Shift здесь имеет тип TShiftState.
Если соизволишь заглянуть в хелп по TShiftState, то получишь всю информацию.
ян (2006-04-14 18:29:00) [17]Вернее, проблема такая:
if (ssctrl in Shift) and (key=vk_delete) then
key:=0;
в событии OnKeyDown запрещает удаление строки в DBGrid сочетанием Shift+Del
а как здесь заменить Shift на Ctrl?
BMP (2006-04-14 18:24:00) [18]#17, vk_control