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

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

Удаление из TEdit [D7]


Страницы:   1 2

yaric ©   (2004-09-23 17:46:00) 

Народ подскажите пожалуйста как мне реализовать такой механизм при работе с TEdit, а именно запретить удалять из него некоторые символы например буквы латиницы, а все остальные символы если они присутствуют в строке, которая находится в TEdit.Text удалять можно.


[lamer]Barmaglot   (2004-09-24 13:57:00) [1]

Насколько мне склероз не изменяет - это дельфовая оболочка для сообщения WM_Command...


yaric   (2004-09-24 13:52:00) [2]

Что это за событие такое CN_COMMAND что-то я никак инфы по нему
найти не могу в WindowsSDK.


KSergey   (2004-09-24 07:52:00) [3]

а) как и говорилось ппробоваьт прикрутить MaskEdit

б) в наследнике TEdit перекрыть обработчик CN_COMMAND. В нем отлавливать Msg.NotifyCode=CBN_EDITUPDATE (текст изменен (не важно как), но еще не отрисован чтобы морганий не было). Соответсвенно всегда сохранять весь старый текст во внутренней переменной (см. замечание [15]) и после изменения (в указанном обработчике) проверять: если изменения допустимы - ничего не делать (текст  измененный сохранить), не допустимы - ту же и восстановить. За одно не плохо бы кнопки забоя/удаления обработать, возможно флажки какие понадобятся.

PS
Сейчас на этом принципе сделал наследника TComboBox с дописыванием текста из имеющихся Items. Дошлифую - и возможно выложу, если кому интересно.


Fay   (2004-09-23 21:08:00) [4]

Так. Пора домой. Что-то я слишком угрюм - даже смайлики не действуют...
8)


Defunct   (2004-09-23 21:02:00) [5]

Fay ©   (23.09.04 20:44) [19]
О да..

Но, прошу заметить, конечно же слово ЖУЛЬНИЧЕСТВО не имеет никакого отношения к ВАМ, на ваш счет можно отнести лишь только предложенную оригинальную проверку;)

PS: LOL, писалось в хорошем настроении, так что советую перечитать тот пост тоже с юмором. и совместить с другой веткой там где SHARE_DELETE


Fay   (2004-09-23 20:46:00) [6]

Нет. Это "copy-paste" 8)


begin...end   (2004-09-23 20:46:00) [7]


> [18] Defunct ©   (23.09.04 20:39)

А это уже замена, а не удаление :-)))


Fay   (2004-09-23 20:44:00) [8]

2  [18] Defunct ©   (23.09.04 20:39)
Читая в плохом настроении, можно предположить, что Вы обвиняете меня в склонности к жульничеству. А Вы знаете, что бывает за такие слова, к тому же, высказаные публично?!
8)

P.S
Не откажусь от объяснений.


Defunct   (2004-09-23 20:39:00) [9]

> А что же будет, если не секрет?

Кол-во символов не изменится, но символ поменяется, в народе это называют ЖУЛЬНИЧЕСТВО!! ;)
Неудивительно, что именно Fay преложил такую проверку, он в этих делах Гуру ;)


begin...end   (2004-09-23 20:22:00) [10]


> [15] Fay ©   (23.09.04 19:11)


> А теперь выдели одну буковку и нажми какую-нибудь (к примеру, "Ы") кнопочку.

Я ж говорю: Delphi сейчас нету у меня.
А что же будет, если не секрет?


yaric   (2004-09-23 19:28:00) [11]

Вот я на onkeydown попробовал только что зделать чтобы "запретить", если определил что символ удалять нельзя


Fay   (2004-09-23 19:11:00) [12]

2  [14] begin...end ©   (23.09.04 19:07)
Ага. А теперь выдели одну буковку и нажми какую-нибудь (к примеру, "Ы") кнопочку.


begin...end   (2004-09-23 19:07:00) [13]

Э-э... Я, может, чего-то не понял, к тому же Delphi у меня сейчас под рукой нет, но, ИМХО, вот так можно попробовать:

var
 OldText: String;

procedure TFormName.EditNameChange(Sender: TObject);
var
 Index: Integer;
begin
 with EditName do
 begin
   if Length(Text) = Length(OldText) - 1 then
   // Т.е. если произошло удаление символа
   begin
     Index := 1;
     while (Index <= Length(Text)) and (OldText[Index] = Text[Index]) do
       Inc(Index);
     // Сейчас Index содержит номер удалённого символа
     if OldText[Index] in [множество запрещённых для удаления символов] then
       Text := OldText;
   end
 end
end;


Это, наверное, не будет работать, когда удалены были сразу несколько символов, но, думаю, можно это как-то доработать.


МЯУ   (2004-09-23 18:34:00) [14]

а че, onkeydown не пойдёт?
сморим символ перед курсором если backspace и за курсором, если delete. проверяем диапазон, или чё там ещё. если низя - запрещаем. можно - разрешаем.


Anatoly Podgoretsky   (2004-09-23 18:34:00) [15]

Бедные, бедные пользователи, как только программисты над ними не издеваются.


Amoeba   (2004-09-23 18:07:00) [16]

Запретить/разрешить ввод определенных символов - задача элементарная, причем никаких сообщений ловить не надо (все делается на уровне обработчиков событий компонента). А выборочныйзапрет удаления - это уже совсем другое.


yaric   (2004-09-23 18:01:00) [17]

Может как то событие какое-то виндозное ловить и взависимости от того какой код символа лупить его или нет


Amoeba   (2004-09-23 17:59:00) [18]

Невозможно запертить удаление символов только для определенного диапазона. Действует принцип "всё или ничего".


yaric   (2004-09-23 17:57:00) [19]

Ну это в смысле как различать буду,
а про label и edit я не понял текст ведь сплошной


yaric   (2004-09-23 17:55:00) [20]

Разные диапазоны кодов символов


Страницы:   1 2

Наверх

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