Форум: "Начинающим";
Текущий архив: 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