![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление из TEdit [D7]
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]Разные диапазоны кодов символов