Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.403 c
15-1144929104
VID
2006-04-13 15:51
2006.05.07
Дебаггер в дельфи перестал реагировать на нажатия F7, F8, F9 и тд


15-1144770420
Grom PE
2006-04-11 19:47
2006.05.07
Эффект воды на Delphi


6-1132997056
MrTime
2005-11-26 12:24
2006.05.07
протокол FTP


3-1142560399
soi
2006-03-17 04:53
2006.05.07
Перехват момента добавления довой записи в DBF файл из внешней пр


11-1124588005
UFO
2005-08-21 05:33
2006.05.07
Декодер PNG размером 6-8 килобайт