.

enum 15.04.2004 - 08:28 | Почему в делфи и Сбилдере сообщения keydown не анулируются процедурой abort. лажа какая то . я хотел сделать чтобы в едите нажатием ctrl-backspace удалялось предыдущее слово, как это сделано во всех нормальных прогах, хотя конечно понятно что там используется не едит а мемо, но у меня есть прога которая уже работает и там используется едиты причем их МНОГО, поэтому менять каждый на мемо это не серьезно. вот я и хотел путем обработки keydown убрать из едитов эту лажу которая там возникает после нажатия ctrl-backspace и удалить предыдущее слово. ан...нет...
нонейм 1 - 15.04.2004 - 15:47 | В едите, так же, как и в мемо, можно отлавливать и аннулировать любые нажатия любых клавиш. Нужно только слегка вылезти за пределы билдера в сторону Win32 API.
Delphist 2 - 15.04.2004 - 16:06 | Команда abort тут не при чем. Нужно просто сделать ... Key := #0; ... в теле обработчика OnKeyDown . Если едитов много, можно 1) создать свой класс с подавлением события keydown 2) сделать цикл for i := 0 to ComponentCount - 1 do if Components[i] is TEdit then (Components[i] as TEdit).OnKeyDown := MyKeyDownProc;
VaS 3 - 15.04.2004 - 21:46 | Вместо (Components[i] as TEdit).OnKeyDown лучше писать TEdit(Components[i]).OnKeyDown в данном случае
Наф 4 - 15.04.2004 - 23:06 | [3] Обоснуй, пожалуйста
enum 5 - 16.04.2004 - 05:07 | 2 - Пробовал (Key := #0; и даже Key := 0, т к он там типа word) не получается...
enum 6 - 16.04.2004 - 05:08 | 1 - приведи пример
OF 7 - 16.04.2004 - 10:49 | Чтобы перебить ввод символов - используй OnKeyPress
Тупой ламер 8 - 16.04.2004 - 11:39 | to Наф: VaS прав относительно предпочтения прямого приведения типа объекта заместо оператора <as>. если ты понимаешь, чем отличаются и как реализуются эти два метода - то объяснять тут нечего. <as> вообще нужно использовать очень осмотрительно - особенно если в проекте работаешь с COM-объектами или интерфейсами.
нонейм 9 - 16.04.2004 - 13:40 | 7: речь идет не о символах. 6: для дельфей не могу - паскаль не знаю на столько что бы что-то писать на нем :)) для билдера посоветую следующи вариант: создаешь компонент, наследованный от TEdit (TmyEdit, например), в котором перегружаешь функцию WndProc (и в этой функции отлавливаешь нужные тебе события и соответственно реагируешь на них). Инсталишь этот компонент, затем в объявлениях своего проекта меняешь везде TEdit на класс твоего компонента (TmyEdit), меняешь это так-же в .dfm файлах (менять нужно не из билдера, а каким-либо текстовым редактором, проект не должен быть открыт в билдере), затем открываешь проект и ребилдишь его. Я сделал для примера компонент TmyEdit, в котором при нажатии Control+BackSpace удаляется весь текст. Можешь взять его и вместо очистки текста сделать то что тебе нужно. Вот архив с .bpl и исходниками: http://www.neora.ru/ download/ myedit.rar (без пробелов).
Наф 10 - 16.04.2004 - 13:51 | [8] Попросил обосновать, а не рассказывать догмы :-))
Тупой ламер 11 - 16.04.2004 - 14:05 | (удивлённо приподнимая брови) А что тут обосновывать, не пойму? Если вам ясны механизмы обеих методов, то вопроса вообще нет, почему одно лучше другого в данном случае. Или вы считаете, что более медленный, избыточный (и в определённых ситуациях, не этой конкретной - ошибочный) метод лучше более быстрого и прямого?
FWP 12 - 16.04.2004 - 14:26 | 2 нонейм. Зачем огород городить, если Delphist уже все сказал. Ну м.б. действительно надо орабатывать OnKeyPress(). Ну еще м.б. в форме посмотреть свойство KeyPreview.
VaS 13 - 17.04.2004 - 08:03 | Наф: Посмотри ассемблерный код, формируемый компилятором в первом и во втором случае. Первый в несколько раз длиннее.
Delphist 14 - 17.04.2004 - 14:34 | 2 Наф: Да, оператор AS производит приведение типов с проверкой и вызывает Exception в случае отсутствия общих предков у текущего класса и приводимого. Тем более сначала идет проверка оператором IS. . Вот что значит бездумно переписывать примеры из книжек :))

>>