Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

Удаление из TEdit   Найти похожие ветки 

 
yaric   (2004-09-23 17:46) [0]

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


 
Fay ©   (2004-09-23 17:47) [1]

TMaskEdit ?


 
yaric   (2004-09-23 17:48) [2]

Нет добавлять пользователь может а вот удалять нет


 
Fay ©   (2004-09-23 17:50) [3]

Блин! Даже не могу представить - нафинг это надо? 8)


 
yaric   (2004-09-23 17:52) [4]

Да надо в TEdit.Text прога заносит некоторые символы, а некоторые заносит пользователь так вот нужно чтобы пользователь не стер то чего прога занесла


 
Amoeba ©   (2004-09-23 17:54) [5]

А как собираешься отличать занесенное прогой от занесенного пользователем?


 
Sandman25 ©   (2004-09-23 17:55) [6]

Разбить на label и edit. Возможно на несколько.


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

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


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

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


 
Amoeba ©   (2004-09-23 17:59) [9]

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


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

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


 
Amoeba ©   (2004-09-23 18:07) [11]

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


 
Anatoly Podgoretsky ©   (2004-09-23 18:34) [12]

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


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

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


 
begin...end ©   (2004-09-23 19:07) [14]

Э-э... Я, может, чего-то не понял, к тому же 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;


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


 
Fay ©   (2004-09-23 19:11) [15]

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


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

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


 
begin...end ©   (2004-09-23 20:22) [17]


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


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

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


 
Defunct ©   (2004-09-23 20:39) [18]

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

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


 
Fay ©   (2004-09-23 20:44) [19]

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

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


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


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

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


 
Fay ©   (2004-09-23 20:46) [21]

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


 
Defunct ©   (2004-09-23 21:02) [22]

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

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

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


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

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


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

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

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

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


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

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


 
[lamer]Barmaglot ©   (2004-09-24 13:57) [26]

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.04 c
1-1095742277
Gero
2004-09-21 08:51
2004.10.10
Рисование на рамке закладки TTabControl


3-1095141819
Vigor
2004-09-14 10:03
2004.10.10
QRExpr


1-1095718048
VAmpiro$
2004-09-21 02:07
2004.10.10
Как записать в файл рисунок?


4-1092391573
Дмитрий Ботвин
2004-08-13 14:06
2004.10.10
Тип запуска службы


1-1095960132
lipskiy
2004-09-23 21:22
2004.10.10
Как назначить PopupMenu на один из пунктов MainMenu (Срочно!!!)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский