The SpineDit control comes with Delphi is too ugly, write a replacement it.

xiaoxiao2021-03-06  118

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.

转载请注明原文地址:https://www.9cbs.com/read-99704.html

New Post(0)