Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.15;
Скачать: CL | DM;

Вниз

Вопрос по свойству 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
8-1190734233
Xdebugger
2007-09-25 19:30
2009.03.15
Как программно выделить определённую частоту?


15-1231254060
@!!ex
2009-01-06 18:01
2009.03.15
Где можно купить Mac Book б/у??


3-1216156374
jane
2008-07-16 01:12
2009.03.15
метод Close для ADODataSet вызывает ошибку BOF или EOF имеет ...


15-1231177309
nonamez11
2009-01-05 20:41
2009.03.15
смена картинки при наведении


15-1231493354
Vainuu
2009-01-09 12:29
2009.03.15
Экзамен!!!!