Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.175.180] |
|
Сообщ.
#1
,
|
|
|
еще такой вопрос:на форме 3 компонента(Edit1,Edit2,SpeedButton1).Необходимо сделать так, чтобы в Edit1 вводились только цифры, в Edit2-только буквы.а самое интересное, что после ввода данных в Edit1 курсрр должен переместиться в Edit2(при нажатии на enter), а затем на кнопку, и после этого снова в Edit1. О как:))) HELP,please:)))
Эта тема была разделена из темы "Помогите создать БД,срочно надо" |
Сообщ.
#3
,
|
|
|
В примере только цифры, но по аналогии можно переделать :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin // Key — символ, соответствующий нажатой клавише. // Если символ недопустимый, то процедура заменяет его // на символ с кодом 0. В результате этого символ в поле // редактирования не появляется, и у пользователя создается // впечатление, что программа не реагирует на нажатие некоторых // клавиш. case Key of '0'..'9': ; // цифра #8 : ; // клавиша <Back Space> #13 : Edit2.SetFocus ; // клавиша <Enter>, переводим фокус на второй Edit // остальные символы — запрещены else Key :=Chr(0); // символ не отображать end; end; Добавлено Вообщем обрабатывай событие OnKeyPress в обоих Edit'ах |
Сообщ.
#4
,
|
|
|
А как заблокировать вод нецифровых в Edit данных при copy/paste (shift+insert)?
|
Сообщ.
#5
,
|
|
|
Drabin сделать обработку WM_PASTE для edit'a
|
Сообщ.
#6
,
|
|
|
P.O.D, можно поподробней про эту обработку? Как ее сделать?
Добавлено Можно еще так procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if not(key in['a'..'z','A'..'Z','А'..'Я', 'а'..'я']) then key:=#0; //перечисление всех допустимых символов end; end; |
Сообщ.
#7
,
|
|
|
Цитата Drabin @ А как заблокировать вод нецифровых в Edit данных при copy/paste (shift+insert)? uses Clipbrd; function NewEditProc(wnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):integer; stdcall; var s:string; i:integer; begin if (uMsg=WM_PASTE) and Clipboard.HasFormat(CF_TEXT) then begin s := Clipboard.AsText; for i:=1 to Length(s) do if (not (s[i] in ['0'..'9'])) then begin uMsg:=0; break end end; result:=CallWindowProc(Pointer(GetWindowLong(wnd,GWL_USERDATA)),wnd,uMsg,wParam,lParam) end; procedure TForm1.FormCreate(Sender: TObject); begin SetWindowLong(Edit1.Handle,GWL_STYLE,GetWindowLong(Edit1.Handle,GWL_STYLE) or ES_NUMBER); SetWindowLong(Edit1.Handle,GWL_USERDATA,SetWindowLong(Edit1.Handle, GWL_WNDPROC, LPARAM(@NewEditProc))) end; |
Сообщ.
#8
,
|
|
|
Цитата Drabin @ А как заблокировать ввод нецифровых в Edit данных при copy/paste (shift+insert)? Дать Эдиту стиль ES_NUMBER. Дальше винда сама все сделает. |