Unit Updownedit; 인터페이스는 Windows, Sysutils, 클래스, 컨트롤, stdctrls, comctrls, message를 사용합니다 . tupdownedit = class (tcustomcontrol) private를 입력하십시오 {개인 선언} updown : Tupdown; 편집 : 테디; FMIN : 정수; FMAX : 정수; fonchange : tnotifyevent; fposition : 정수; 절차 wmsize ( var msg : twmsize); 메시지 wm_size; 절차 setMax ( const value : Integer); 절차 setMin ( const value : Integer); 절차 Editchange (발신자 : Tobject); 절차 editKeypress (발신자 : Tobject; var 키 : char); 프로 시저 updownclick (sender : tobject; 버튼 : tudbtntype); 절차 setPosition ( const 값 : 정수); 보호 {보호 선언} 공공의 {공개 선언} 생성자 생성 (aowner : tcomponent); 무시하고 ; 소멸자 파괴; 무시하고 ; 게시 {게시 된 선언} Property Max : Integer Read Fmax write setmax; 속성 최소 : 정수 읽기 fmin write setmin; 속성 위치 : 정수 읽기 foscip write setposition; 속성 onchange : tnotifyevent 읽기 fonchange write fonchange; 끝 ; 절차 레지스터 ; 구현 절차 레지스터 ; RegisterComponents ( 'Standard', [tupdownedit]); 끝 ; {tupdownedit} 생성자 tupdownedit.create (aowner : tcomponent); 상속 된 생성 (aowner)을 시작합니다 . setBounds (0, 0, 57, 21); 편집 : = tedit.create (self); edit.left : = 0; edit.top : = 0; edit.width : = 40; edit.align : = 고리; edit.parent : = 자기; edit.text : = '0'; // setwindowlong (edit.handle, gwl_style, getwindowlong (edit.handle, gwl_style) 또는 es_number); updown : = tupdown.create (self); updown.height : = 높이; // 20; updown.width : = 14; updown.left : = edit.width + 1; updown.parent : = 자기; fmin : = 0; fmax : = 100; edit.onchange : = editchange; edit.onkeypress : = editkeypress; updown.onclick : = updownclick; 끝 ; 소멸자 Tupdownedit.destroy; 편집을 시작하십시오 . updown.free; 상속 ; 끝 ; 절차 tupdownedit.editchange (발신자 : Tobject); 시작 updown.position : = strtointDef (edit.text, 0); foscip : = updown.position; 할당 된 경우 (Fonchange) Fonchange (self); 끝 ; 절차 tupdownedit.editkeypress (sender : tobject; var key : char); var s : 숯 세트 ; I : 정수; str, 텍스트 : 문자열 ; 시작 s : = [#8, '0'.. '9']; key = #8 이면 종료 ; 그렇지 않으면 (s in s) 시작 키 : = #0; 출구; 끝 ; //控制输入数字的大小tedit (sender) .sellength> 0 인 경우 텍스트 를 시작합니다 . = tedit (sender) .text; str : = copy (text, 1, tedit (sender) .selstart -1) + key + copy (text, tedit (sender) .selstart + tedit (sender) .sellength + 1, length (text)); i : = strtoint (str); i> fmax를 시작 하면 키를 시작합니다 . = #0; 출구; 끝 ; strtoint (tedit (sender) .text + key)> fmax if else if if if the strtoint if key : = #0; 출구; strtoint (tedit (sender) .text + key) <fmin을 시작하면 else else if strtoint (tedit (sender) .text + key)를 시작합니다 . 출구; 끝 ; 끝 ; 절차 tupdownedit.setmax ( const value : Integer); 시작 fmax : = value; updown.max : = fmax; strtointDef (edit.text, 0)> fmax 인 경우 updown.position : = fmax; edit.text : = inttostr (fmax); foscip : = updown.position; 끝 ; 끝 ; 절차 tupdownedit.setmin ( const value : Integer); 시작 fmin : = value; updown.min : = fmin; strtointDef (edit.text , 0) <fmin 이면 updown.position : = fmin; edit.text : = inttostr (fmin); foscip : = updown.position; 할당 된 경우 (Fonchange) Fonchange (self); 끝 ; 끝 ; 절차 tupdownedit.setposition ( const value : Integer); if (value> = fmin) 또는 (value <= fmax) 를 시작한 다음 fposition : = value; updown.position : = fposition; edit.text : = inttoStr (fospition); 할당 된 경우 (Fonchange) Fonchange (self); 끝 ; 끝 ; 절차 tupdownedit.updownclick (sender : tobject; button : tudbtntype); max = 0 이면 시작한 다음 max : = 100을 시작하십시오 . updown.max : = max; 끝 ; updown.min : = min; edit.text : = inttostr (updown.position); edit.setfocus; edit.selectall; 할당 된 경우 (Fonchange) Fonchange (self); foscip : = updown.position; 끝 ; 절차 tupdownedit.wmsize ( var msg : twmsize); 편집 시작 : = 너비 -15; updown.left : = edit.width + 1; updown.height : = 높이; 상속 ; 끝 ; 끝 .