Unit updownedit;
Interface
Uses
Windows, Sysutils, Classes, Controls, Stdctrls, Comctrls, Messages;
Type
Tupdownedit = Class (TCUSTOMCONTROL)
Private
{Private Declarations}
Updown: tupdown;
Tedit;
FMIN: Integer;
FMAX: Integer;
FONCHANGE: TNOTIFYEVENT;
FPSITION: Integer;
Procedure WMSIZE (VAR Msg: Twmsize); Message WM_SIZE;
Procedure setmax (const value: integer);
Procedure setmin (const value: integer);
Procedure Editchange (Sender: TOBJECT);
Procedure EditKeypress (Sender: Tobject; Var Key: char);
Procedure Updownclick (Sender: TOBJECT; button: tudbtntype);
Procedure setPosition (const value: integer);
protected
{Protected Declarations}
public
{Public declarations}
Constructor Create (Aowner: Tcomponent); OVERRIDE;
DESTRUCTOR DESTROY; OVERRIDE;
Published
{Published Declarations}
Property Max: Integer Read FMAX Write SetMax;
Property min: integer read fmin write set
Property Position: Integer Read fposition Write setPosition;
Property Onchange: TNotifyEvent Read Fonchange Write Fonchange
END;
PROCEDURE register;
IMPLEMentation
PROCEDURE register;
Begin
RegisterComponents ('Standard', [Tupdownedit]);
END;
{Tupdownedit}
Constructor Tupdownedit.create (Aowner: Tcomponent);
Begin
Inherited Create (Aowner);
Setbounds (0, 0, 57, 21);
Edit: = Tedit.create (Self);
Edit.Left: = 0;
Edit.top: = 0;
Edit.width: = 40;
Edit.Align: = alleft;
Edit.Parent: = Self;
Edit.Text: = '0';
// setwindowlong (Edit.handle, GWL_Style, getWindowlong (edit.handle, gwl_style) or es_number);
Updown: = tupdown.create (Self);
Updown.height: = height; // 20;
Updown.width: = 14;
Updown.Left: = Edit.width 1;
Updown.parent: = Self; fmin: = 0;
FMAX: = 100;
Edit.onChange: = editchange;
Edit.onkeyPress: = EditKeyPress;
Updown.onclick: = updownclick;
END;
Destructor tupdownedit.destroy;
Begin
Edit.free;
Updown.free;
inherited;
END;
Procedure Tupdownedit.editchange (Sender: TOBJECT);
Begin
Updown.position: = startdef (edit.text, 0);
FPSITION: = Updown.Position;
IF assigned (fonchange) THEN
FONCHANGE (SELF);
END;
Procedure tuPdownedit.editKeyPress (Sender: Tobject; Var Key: char);
VAR
SET OF CHAR;
i: integer;
Str, Text: String;
Begin
s: = [# 8, '0' .. '9'];
IF key = # 8 kil1;
IF not (key in s)
Begin
Key: = # 0;
EXIT;
END;
/ / Control the size of the input number
IF TEDIT (SENDER). Sellength> 0 THEN
Begin
Text: = TEDIT (Sender) .Text;
Str: = COPY (Text, 1, Tedit (sender). SELSTART - 1)
Key
Copy (Text, Tedit (Sender). Selstart TEDIT (Sender) .sellength 1, Length (Text));
I: = start (STR);
IF i> Fmax Then
Begin
Key: = # 0;
EXIT;
END;
end
Else
IF strt (TEDIT (Sender) .Text Key> FMAX THEN
Begin
Key: = # 0;
EXIT;
end
Else
IF straToint (TEDIT (Sender) .Text Key) Begin Key: = # 0; EXIT; END; END; Procedure tuPdownedit.setmax (const value: integer); Begin FMAX: = VALUE; Updown.max: = fmax; IF strtointdef (edit.text, 0)> FMAX THEN Begin Updown.position: = fmax; Edit.Text: = INTTOSTR (FMAX); FPSITION: = Updown.Position; END; END; Procedure tuPdownedit.seTmin (Const value: integer); Begin FMIN: = Value; Updown.min: = fmin; IF strtointdef (edit.text, 0) Begin Updown.position: = fmin; Edit.Text: = INTTOSTR (FMIN); FPSITION: = Updown.Position; IF assigned (fonchange) THEN FONCHANGE (SELF); END; END; Procedure Tupdownedit.SetPosition (const value: integer); Begin IF (value> = fmin) or (value <= fmax) THEN Begin FPSITION: = Value; Updown.position: = fposition; Edit.Text: = INTTOSTR (FPSITION); IF assigned (fonchange) THEN FONCHANGE (SELF); END; END; Procedure tupdownedit.updownclick (sender: TOBJECT; button: tudbtntype); Begin IF max = 0 THEN Begin MAX: = 100; Updown.max: = max; END; Updown.min: = min; Edit.Text: = INTOSTR (Updown.Position); Edit.Setfocus; Edit.SelectAll; IF assigned (fonchange) THEN FONCHANGE (SELF); FPSITION: = Updown.Position; END; Procedure tupdownedit.wmsize (var msg: twmsize); Begin Edit.width: = Width - 15; Updown.Left: = Edit.width 1; Updown.height: = height; inherited; END; End.