Текущий архив: 2006.05.07;
Скачать: CL | DM;
ВнизЗдравствуйте,господа!вопрос, как в Delphi называется клавиша Ctrl Найти похожие ветки
← →
ян (2006-04-14 18:20) [0]Сабж
← →
BMP (2006-04-14 18:24) [1]#17, vk_control
← →
ян (2006-04-14 18:29) [2]Вернее, проблема такая:
if (ssctrl in Shift) and (key=vk_delete) then
key:=0;
в событии OnKeyDown запрещает удаление строки в DBGrid сочетанием Shift+Del
а как здесь заменить Shift на Ctrl?
← →
Ega23 © (2006-04-14 18:35) [3]Что здесь Shift? А Shift здесь имеет тип TShiftState.
Если соизволишь заглянуть в хелп по TShiftState, то получишь всю информацию.
← →
ян (2006-04-14 18:42) [4]Ээ.. ssCtrl тоже не работает
← →
Дарья (2006-04-14 19:20) [5]Двигаемся дальше. Основной параметр - это параметр 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 19:47) [6]Большое спасибо за такой ответ, но пишу
if (ssctrl in Shift) and (key=vk_delete) then
key:=0;
не работает...все равно успешно удаляет
← →
Дарья (2006-04-14 20:39) [7]key:=0; хм...
← →
Дарья (2006-04-14 20:41) [8]попробуй 46 или $2E хотя суть то не меняеться
тебе нужно чтоб удаляла или че?
← →
kilkennyCat © (2006-04-14 20:56) [9]А вдруг оно удаляется по Up ?
← →
Gero © (2006-04-15 01:23) [10]Клавиша Ctrl в Delphi называется точно также, как и в любом другом приложении.
← →
ян (2006-04-15 14:28) [11]Нужно чтоб не удаляла
а
if (ssctrl in Shift) and (key=vk_delete) then
key:=0;
не удаляет!!
← →
ян (2006-04-15 14:29) [12]удаляет в смысле!))
← →
Stakan © (2006-04-15 15:20) [13]ян (15.04.06 14:29) [12]
Попробуй вместо key:=0;
написать Abort;
← →
ян (2006-04-17 19:32) [14]Abort тоже не действует
как я понял, в проге стоит обработчик, который по нажатию Ctrl + Del
спрашивает "Удалить запись или нет?",причем он это событие отслеживает раньше, чем OnKeyDown.
так вот, где он может быть прописан, чтобы я смог его найти?
какие версии?
← →
ASoft (2006-04-18 03:58) [15]ян, отключите в опциях DBGrid dgConfirmDelete и не придумывайте. Ведь вам это надо, что бы по Ctrl+Del запись не удалялась?
← →
ян (2006-04-18 19:51) [16]Ага, попробуем!надо в зависимости от CheckBox"a(checked или unchecked).
но это мелочи...
а если отключить, не удалит ли он без подтверждения?
← →
ян (2006-04-19 20:10) [17]dgConfirmDelete даже с false спрашивает подтверждение на удаление!
← →
ASoft (2006-04-20 05:24) [18]
> а если отключить, не удалит ли он без подтверждения?
удалит без предупреждения, если в dataset установлен автоэдит, если таблица не стоит в readonly, если ttable не readonly и т.п. и т.д.
Страницы: 1 вся ветка
Текущий архив: 2006.05.07;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.011 c