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

Вниз

Вопрос по свойству KeyPress   Найти похожие ветки 

 
MaxX   (2009-01-27 14:41) [0]

Можно ли запретить ввод символов, но при этом разрешить выполнять Copy/Paste в TEdit ?

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

 if not (Key in ["0","1","2","3","4","5","6","7","8","9"]) then
   Key:=#0;


 
Palladin ©   (2009-01-27 14:46) [1]

Копирование и вставка из буффера никоим образом события KeyPress не касается.


 
MaxX   (2009-01-27 14:53) [2]


> Копирование и вставка из буффера никоим образом события
> KeyPress не касается.


Он блокирует комбинации, Ctrl+X, Ctrl+V


 
{RASkov} ©   (2009-01-27 14:55) [3]

> if not (Key in ["0","1","2","3","4","5","6","7","8","9"])
> then

:)
Тоже самое:
if not (Key in ["0".."9"{, #8}]) then :)
Только нужно еще и бэкспэйс разрешить.... как-то с ним комфортнее) может и еще чего, например DecimalSeparator....

Ctrl+Ins и Shift+Ins работают :) Остальное тыж сам запретил)


 
Palladin ©   (2009-01-27 14:55) [4]

Не он, а ты. Соответственно неблокировать их - тоже в твоей власти.


 
Anatoly Podgoretsky ©   (2009-01-27 15:01) [5]

> MaxX  (27.01.2009 14:53:02)  [2]

Копируй мышкой или разрешай комбинации.


 
Palladin ©   (2009-01-27 15:04) [6]


> {RASkov} ©   (27.01.09 14:55) [3]

а ЗаднийПробел клавишей не считается и КлавишеДавилкой не ловится )


 
Palladin ©   (2009-01-27 15:05) [7]

ой... прошу прощенья... считается оказывается.. это Del не считается...


 
{RASkov} ©   (2009-01-27 15:06) [8]

Кстати если разрешишь данные сочетания, например так:
if not (Key in ["0".."9", CHR(24), CHR(22), #8]) then Key:=#0;
То тогда нафик вся затея с контролем ввода цифр рушится из-за того, что вставить можно все что угодно....
Впрочем у тебя сейчас так и есть :) См [5] про мышку, да и Shift+Ins тоже уже все портит...)


 
clickmaker ©   (2009-01-27 15:12) [9]

> запретить ввод символов, но при этом разрешить выполнять
> Copy/Paste

а какой в этом смысл?


 
{RASkov} ©   (2009-01-27 15:15) [10]

> [9] clickmaker ©   (27.01.09 15:12)
> а какой в этом смысл?

Нормальный :) Например в калькуляторе виндовом такая реализация есть)
Т.е. не совсем такая, но похожая.... Вставлять можно.... но только числа)


 
clickmaker ©   (2009-01-27 15:43) [11]

> Вставлять можно.... но только числа

вот и я о том же


 
MaxX   (2009-01-27 15:44) [12]


> Вставлять можно.... но только числа)


Кокраз это мне и нужно=)


 
{RASkov} ©   (2009-01-27 16:33) [13]

> [12] MaxX   (27.01.09 15:44)

Ну вот примерно так можно попробывать:
unit Unit2;
interface
uses Windows, Messages, StdCtrls;

const EM_AFTERPASTE = WM_USER+10;
     PASTE_CODE    = 22;
     MAX_LENGTH    = 10;

type
 TMyEdit = class(TEdit)
 protected
   procedure KeyPress(var Key: Char); override;
   procedure WndProc(var Mes: TMessage); override;
 end;

implementation

{ TMyEdit }
procedure TMyEdit.KeyPress(var Key: Char);
begin
 inherited;
 if ORD(Key) = PASTE_CODE then Exit;
 if not (Key in ["0".."9", #8]) then Key:=#0 else
  if ((Length(Text)>MAX_LENGTH-1) and (Key<>#8)) then
   if SelStart<MAX_LENGTH then SelLength:=1 else Key:=#0;
end;

procedure TMyEdit.WndProc(var Mes: TMessage);
var S: String; N: Integer;
begin
if Mes.Msg = WM_PASTE      then PostMessage(Handle, EM_AFTERPASTE, 0, 0);
if Mes.Msg = EM_AFTERPASTE then begin
 S:=Text;
 for N:= Length(S) downto 1  do if not (S[N] in ["0".."9"]) then Delete(S, N, 1);
 if Length(S)>MAX_LENGTH then SetLength(S, MAX_LENGTH);
 Text:=S;
end else inherited;
end;

end.



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

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

Наверх




Память: 0.47 MB
Время: 0.048 c
2-1232578253
RustB
2009-01-22 01:50
2009.03.15
Ошибка при добавлении записи в access


3-1216589956
Dmitry S
2008-07-21 01:39
2009.03.15
Помогите с запросом (бд MySQL)


15-1231588343
Кое кто
2009-01-10 14:52
2009.03.15
С помощью какой программы...


15-1231679344
Альф
2009-01-11 16:09
2009.03.15
Может ли программа определить, как её запустили ?


4-1206457103
Informer
2008-03-25 17:58
2009.03.15
Кнопка закрытия формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский