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

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

Здравствуйте,господа!вопрос, как в 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


Наверх

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