Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет ввода символа для Memo 
:(
    Опции темы
Delphist
  Дата 15.3.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



В memo стоит следующая обработка на OnKeyDown:

Код


 procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
   Shift: TShiftState);
 begin

   if (Shift = [ssCtrl]) and (key = VK_SPACE) then begin
      Key:=0;
      SetCaretPos(Memo1.CaretPos.X-1, Memo1.CaretPos.Y);
   end;
end; 

Т.е. если нажимается клавиша Ctrl+пробел, то курсор memo должен оставаться на месте. Но мой код что-то не работает (хотя вроде бы всё правильно). Подскажите в чём проблема.

Это сообщение отредактировал(а) Delphist - 15.3.2006, 16:22


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Romikgy
Дата 15.3.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(Delphist @ 15.3.2006, 15:20 Найти цитируемый пост)
SetCaretPos(Memo1.CaretPos.X-1, Memo1.CaretPos.Y);

А это разве надо?

PS ты случаем на IDE среду пишешь?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Delphist
  Дата 15.3.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(Romikgy @ 15.3.2006, 16:30)
А это разве надо?

PS ты случаем на IDE среду пишешь?

1. Да в принципе и не надо. Вот только Key := 0 в KeyDown'e не обнуляет клавишу, почему не знаю.
2. Нет не пишу я среду IDE.



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Romikgy
Дата 15.3.2006, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(Delphist @ 15.3.2006, 16:00 Найти цитируемый пост)
Вот только Key := 0 в KeyDown'e не обнуляет клавишу, почему не знаю

Вот это странно!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Delphist
  Дата 15.3.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



Цитата(Romikgy @ 15.3.2006, 17:17)
Цитата(Delphist @  15.3.2006,  16:00 Найти цитируемый пост)
Вот только Key := 0 в KeyDown'e не обнуляет клавишу, почему не знаю

Вот это странно!

Ну и как с этим бороться.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Sunvas
Дата 16.3.2006, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Первое: Нужно писать Key:=#0
Второе: Нужно использовать событие onkeyPress

Это сообщение отредактировал(а) Sunvas - 16.3.2006, 08:43


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Romikgy
Дата 16.3.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(Sunvas @ 16.3.2006, 07:38 Найти цитируемый пост)
Нужно писать Key:=#0

это да
Цитата(Sunvas @ 16.3.2006, 07:38 Найти цитируемый пост)
Нужно использовать событие onkeyPress

а это необязательно


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
tigger
Дата 16.3.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



Конечный вид процедуры:

Код


procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
Shift: TShiftState;
begin
Shift := KeyDataToShiftState(0);
if (Shift = [ssCtrl]) and (key = Char(VK_SPACE)) then Key := #0;
end;




--------------------
user posted image
PM MAIL   Вверх
Snowy
Дата 16.3.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Char(VK_SPACE) это ' '
PM MAIL   Вверх
tigger
Дата 16.3.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 456
Регистрация: 30.4.2005

Репутация: нет
Всего: 4



Цитата(Snowy @ 16.3.2006, 13:03 Найти цитируемый пост)
Char(VK_SPACE) это ' '


это точно smile


--------------------
user posted image
PM MAIL   Вверх
Sunvas
Дата 18.3.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Romikgy @ 16.3.2006, 09:36 Найти цитируемый пост)
Цитата(Sunvas @ 16.3.2006, 07:38 )
Нужно писать Key:=#0

это да

Цитата(Sunvas @ 16.3.2006, 07:38 )
Нужно использовать событие onkeyPress 

а это необязательно


Если делать все это в процедуре OnkeyPress, то писать Key:=#0, чтобы обнулить значение нажатой кнопки это делать обязательно.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.