Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.107.90] |
|
Сообщ.
#1
,
|
|
|
function NewEditProc(wnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):integer; stdcall; var s:string; i:integer; Data: THandle; begin case uMsg of WM_PASTE: if IsClipboardFormatAvailable(CF_TEXT) then if OpenClipboard(wnd) then begin Data := GetClipboardData(CF_TEXT); try if Data <> 0 then begin s := PChar(GlobalLock(Data)); for i:=1 to Length(s) do if (not (s[i] in ['0'..'9'])) then begin uMsg:=0; break end end finally if Data <> 0 then GlobalUnlock(Data); CloseClipboard end end; WM_SETTEXT: begin s := pchar(lParam); if s<>'' then for i:=1 to Length(s) do if (not (s[i] in ['0'..'9'])) then begin uMsg:=0; break end 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; Автор: Krid |