LCL: - derived T(Float)SpinEdit from TCustomEdit to remove redundant code

- removed obsolete TSpinEdit.ClimbRate

git-svn-id: trunk@11205 -
This commit is contained in:
tombo 2007-05-26 09:57:11 +00:00
parent bce8d0a4c6
commit 5bcdc4373e
8 changed files with 154 additions and 317 deletions

View File

@ -69,7 +69,7 @@ object TableForm: TTableForm
end
object SERows: TSpinEdit
BorderSpacing.OnChange = nil
ClimbRate = 1
Increment = 1
MaxValue = 100
TabOrder = 3
Left = 72
@ -79,7 +79,7 @@ object TableForm: TTableForm
end
object SEColumns: TSpinEdit
BorderSpacing.OnChange = nil
ClimbRate = 1
Increment = 1
MaxValue = 100
TabOrder = 4
Left = 72

View File

@ -16,154 +16,94 @@
}
{-----------------------------------------------------------------------------}
procedure TCustomFloatSpinEdit.UpdateControl;
begin
if MaxValue<MinValue then FMaxValue:=MinValue;
if (FMinValue<>0) and (FValue<FMinValue) then FValue:=fMinValue;
if (FMaxValue<>0) and (FValue>FMaxValue) then FValue:=fMaxValue;
if (not HandleAllocated) then exit;
if ([csLoading,csDestroying]*ComponentState<>[]) then
if MaxValue < MinValue then FMaxValue := MinValue;
if (FMinValue <> 0) and (FValue < FMinValue) then FValue := FMinValue;
if (FMaxValue <> 0) and (FValue > FMaxValue) then FValue := FMaxValue;
if (not HandleAllocated) then Exit;
if ([csLoading, csDestroying] * ComponentState <> []) then
FUpdatePending := True
else
begin
FUpdatePending := true;
exit;
TWSCustomFloatSpinEditClass(WidgetSetClass).UpdateControl(Self);
FValueChanged := True;
FUpdatePending := False;
end;
TWSCustomFloatSpinEditClass(WidgetSetClass).UpdateControl(Self);
FValueChanged := true;
FUpdatePending := false;
end;
function TCustomFloatSpinEdit.ValueIsStored: boolean;
function TCustomFloatSpinEdit.ValueIsStored: Boolean;
begin
Result:=true; // fpc bug, default value is always 0
Result := True; // fpc bug, default value is always 0
end;
function TCustomFloatSpinEdit.RealGetText: TCaption;
begin
if HandleAllocated then
Result:=inherited RealGetText
Result := inherited RealGetText
else
Result:=FloatToStrF(FValue, ffFixed, 20, DecimalPlaces);
Result := FloatToStrF(FValue, ffFixed, 20, DecimalPlaces);
end;
procedure TCustomFloatSpinEdit.TextChanged;
var
lPrevValue: single;
PrevValue: Single;
begin
lPrevValue := FValue;
FValueChanged := true;
if Value = lPrevValue then exit;
Modified := true;
FValueEmpty := false;
if HandleAllocated and (not (csLoading in ComponentState)) then Change;
inherited;
PrevValue := FValue;
FValueChanged := True;
if Value = PrevValue then Exit;
Modified := True;
FValueEmpty := False;
end;
procedure TCustomFloatSpinEdit.SetMaxValue(const AValue: single);
procedure TCustomFloatSpinEdit.SetMaxValue(const AValue: Single);
begin
if FMaxValue=AValue then exit;
FMaxValue:=AValue;
if FMaxValue = AValue then Exit;
FMaxValue := AValue;
UpdateControl;
end;
function TCustomFloatSpinEdit.GetModified: Boolean;
function TCustomFloatSpinEdit.MaxValueIsStored: Boolean;
begin
Result := FModified;
Result := True; // fpc bug, default value is always 0
end;
function TCustomFloatSpinEdit.GetSelLength: integer;
function TCustomFloatSpinEdit.MinValueIsStored: Boolean;
begin
if HandleAllocated then
FSelLength := TWSCustomFloatSpinEditClass(WidgetSetClass).GetSelLength(Self);
Result:= FSelLength;
Result := True; // fpc bug, default value is always 0
end;
function TCustomFloatSpinEdit.GetSelStart: integer;
procedure TCustomFloatSpinEdit.SetMinValue(const AValue: Single);
begin
if HandleAllocated then
FSelStart:= TWSCustomFloatSpinEditClass(WidgetSetClass).GetSelStart(Self);
Result:= FSelStart;
end;
function TCustomFloatSpinEdit.GetSelText: String;
begin
Result:= Copy(Text, SelStart + 1, SelLength)
end;
function TCustomFloatSpinEdit.MaxValueIsStored: boolean;
begin
Result:=true; // fpc bug, default value is always 0
end;
function TCustomFloatSpinEdit.MinValueIsStored: boolean;
begin
Result:=true; // fpc bug, default value is always 0
end;
{-----------------------------------------------------------------------------}
procedure TCustomFloatSpinEdit.SetMinValue(const AValue: single);
begin
if FMinValue=AValue then exit;
FMinValue:=AValue;
if FMinValue = AValue then Exit;
FMinValue := AValue;
UpdateControl;
end;
procedure TCustomFloatSpinEdit.SetModified(const AValue: Boolean);
procedure TCustomFloatSpinEdit.SetValueEmpty(const AValue: Boolean);
begin
FModified := AValue;
end;
procedure TCustomFloatSpinEdit.SetSelLength(const AValue: integer);
begin
FSelLength:= AValue;
if HandleAllocated then
TWSCustomFloatSpinEditClass(WidgetSetClass).SetSelLength(Self, FSelLength);
end;
procedure TCustomFloatSpinEdit.SetSelStart(const AValue: integer);
begin
FSelStart:= AValue;
if HandleAllocated then
TWSCustomFloatSpinEditClass(WidgetSetClass).SetSelStart(Self, FSelStart);
end;
procedure TCustomFloatSpinEdit.SetSelText(const AValue: String);
var
OldText, NewText: string;
begin
OldText:=Text;
NewText:=LeftStr(OldText,SelStart)+AValue
+RightStr(OldText,length(OldText)-SelStart-SelLength);
Text:=NewText;
end;
procedure TCustomFloatSpinEdit.SetValueEmpty(const AValue: boolean);
begin
if FValueEmpty=AValue then exit;
FValueEmpty:=AValue;
if FValueEmpty = AValue then Exit;
FValueEmpty := AValue;
UpdateControl;
end;
procedure TCustomFloatSpinEdit.SetIncrement(const NewIncrement: single);
procedure TCustomFloatSpinEdit.SetIncrement(const AIncrement: Single);
begin
if NewIncrement = FIncrement then exit;
FIncrement := NewIncrement;
if AIncrement = FIncrement then Exit;
FIncrement := AIncrement;
UpdateControl;
end;
procedure TCustomFloatSpinEdit.InitializeWnd;
var
ASelStart, ASelLength : integer;
begin
inherited InitializeWnd;
UpdateControl;
if FSelStart <> FSelLength then begin
ASelStart:= FSelStart;
ASelLength:= FSelLength;
SelStart:= ASelStart;
SelLength:= ASelLength;
end;
end;
procedure TCustomFloatSpinEdit.Loaded;
@ -172,67 +112,49 @@ begin
if FUpdatePending then UpdateControl;
end;
procedure TCustomFloatSpinEdit.Change;
procedure TCustomFloatSpinEdit.SetValue(const AValue: Single);
begin
if [csLoading,csDestroying,csDesigning]*ComponentState<>[] then exit;
EditingDone;
if Assigned(FOnChange) then FOnChange(Self);
end;
{-----------------------------------------------------------------------------}
Procedure TCustomFloatSpinEdit.SetValue(const num : Single);
begin
if FValue = Num then exit;
FValue := Num;
if FValue = AValue then Exit;
FValue := AValue;
// clear FValueChanged to prevent getting the old value from the widget
FValueChanged := false;
FUpdatePending := true;
FValueChanged := False;
FUpdatePending := True;
UpdateControl;
end;
{-----------------------------------------------------------------------------}
Function TCustomFloatSpinEdit.GetValue: Single;
function TCustomFloatSpinEdit.GetValue: Single;
begin
if HandleAllocated and FValueChanged
and not (wcfCreatingHandle in FWinControlFlags) then
begin
FValue := TWSCustomFloatSpinEditClass(WidgetSetClass).GetValue(Self);
FValueChanged := false;
FValueChanged := False;
end;
Result := fValue;
Result := FValue;
end;
{-----------------------------------------------------------------------------}
procedure TCustomFloatSpinEdit.SetDecimals(Num : Integer);
procedure TCustomFloatSpinEdit.SetDecimals(ADecimals: Integer);
begin
if fDecimals = Num then exit;
fDecimals := Num;
if FDecimals = ADecimals then Exit;
FDecimals := ADecimals;
UpdateControl;
end;
{-----------------------------------------------------------------------------}
constructor TCustomFloatSpinEdit.Create(TheOwner : TComponent);
constructor TCustomFloatSpinEdit.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
fCompStyle := csSpinEdit;
FCompStyle := csSpinEdit;
FIncrement := 1;
fDecimals := 2;
fValue := 0;
fMinValue := 0;
fMaxValue := 100;
FUpdatePending := true;
FValueChanged := true;
FDecimals := 2;
FValue := 0;
FMinValue := 0;
FMaxValue := 100;
FUpdatePending := True;
FValueChanged := True;
SetInitialBounds(0,0,50,23);
ParentColor := false;
TabStop := true;
end;
{-----------------------------------------------------------------------------}
destructor TCustomFloatSpinEdit.Destroy;
begin
inherited Destroy;
SetInitialBounds(0, 0, 50, 23);
end;
procedure TCustomFloatSpinEdit.FinalizeWnd;
@ -241,37 +163,6 @@ begin
inherited FinalizeWnd;
end;
procedure TCustomFloatSpinEdit.SelectAll;
begin
if Text <> '' then begin
SetSelStart(0);
SetSelLength(Length(Text));
end;
end;
procedure TCustomFloatSpinEdit.ClearSelection;
begin
if SelLength > 0 then
SelText := '';
end;
procedure TCustomFloatSpinEdit.CopyToClipboard;
begin
Clipboard.AsText := SelText;
end;
procedure TCustomFloatSpinEdit.CutToClipboard;
begin
CopyToClipboard;
ClearSelection;
end;
procedure TCustomFloatSpinEdit.PasteFromClipboard;
begin
if Clipboard.HasFormat(CF_TEXT) then
SelText := Clipboard.AsText;
end;
{ TCustomSpinEdit }
function TCustomSpinEdit.GetIncrement: integer;

View File

@ -33,8 +33,8 @@ uses
glib, gdk, gtk,
{$ENDIF}
GtkInt,
LCLProc, Spin, GtkProc, gtkExtra, GtkWSStdCtrls, WSSpin, WSLCLClasses, Controls,
LCLType;
LCLProc, Spin, StdCtrls, GtkProc, gtkExtra, GtkWSStdCtrls, WSSpin,
WSLCLClasses, Controls, LCLType;
type
@ -44,21 +44,21 @@ type
private
protected
public
class function GetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; override;
class function GetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; override;
class function GetSelStart(const ACustomEdit: TCustomEdit): integer; override;
class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override;
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single; override;
class procedure SetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer); override;
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override;
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
end;
function GetGtkSpinEntry(Spin: PGtkSpinButton): PGtkEntry;
function GetSpinGtkEntry(Spin: TCustomFloatSpinEdit): PGtkEntry;
function GetSpinGtkEntry(const Spin: TWinControl): PGtkEntry;
function GetGtkFloatSpinEditable(Spin: PGtkSpinButton): PGtkOldEditable;
function GetSpinGtkEditable(Spin: TCustomFloatSpinEdit): PGtkOldEditable;
function GetSpinGtkEditable(const Spin: TWinControl): PGtkOldEditable;
implementation
@ -67,7 +67,7 @@ begin
Result:=PGtkEntry(@(Spin^.entry));
end;
function GetSpinGtkEntry(Spin: TCustomFloatSpinEdit): PGtkEntry;
function GetSpinGtkEntry(const Spin: TWinControl): PGtkEntry;
begin
Result:=GetGtkSpinEntry(PGtkSpinButton(Spin.Handle));
end;
@ -77,24 +77,21 @@ begin
Result:=PGtkOldEditable(@(Spin^.entry));
end;
function GetSpinGtkEditable(Spin: TCustomFloatSpinEdit): PGtkOldEditable;
function GetSpinGtkEditable(const Spin: TWinControl): PGtkOldEditable;
begin
Result:=GetGtkFloatSpinEditable(PGtkSpinButton(Spin.Handle));
end;
{ TGtkWSCustomFloatSpinEdit }
class function TGtkWSCustomFloatSpinEdit.GetSelStart(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit
): integer;
class function TGtkWSCustomFloatSpinEdit.GetSelStart(const ACustomEdit: TCustomEdit): integer;
begin
Result :=WidgetGetSelStart(PGtkWidget(GetSpinGtkEntry(ACustomFloatSpinEdit)));
Result :=WidgetGetSelStart(PGtkWidget(GetSpinGtkEntry(ACustomEdit)));
end;
class function TGtkWSCustomFloatSpinEdit.GetSelLength(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer;
class function TGtkWSCustomFloatSpinEdit.GetSelLength(const ACustomEdit: TCustomEdit): integer;
begin
with GetSpinGtkEditable(ACustomFloatSpinEdit)^ do
with GetSpinGtkEditable(ACustomEdit)^ do
Result := Abs(integer(selection_end_pos)-integer(selection_start_pos));
end;
@ -105,16 +102,16 @@ begin
PGtkSpinButton(ACustomFloatSpinEdit.Handle));
end;
class procedure TGtkWSCustomFloatSpinEdit.SetSelStart(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer);
class procedure TGtkWSCustomFloatSpinEdit.SetSelStart(const ACustomEdit: TCustomEdit;
NewStart: integer);
begin
gtk_editable_set_position(GetSpinGtkEditable(ACustomFloatSpinEdit), NewStart);
gtk_editable_set_position(GetSpinGtkEditable(ACustomEdit), NewStart);
end;
class procedure TGtkWSCustomFloatSpinEdit.SetSelLength(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer);
class procedure TGtkWSCustomFloatSpinEdit.SetSelLength(const ACustomEdit: TCustomEdit;
NewLength: integer);
begin
WidgetSetSelLength(PGtkWidget(GetSpinGtkEntry(ACustomFloatSpinEdit)),
WidgetSetSelLength(PGtkWidget(GetSpinGtkEntry(ACustomEdit)),
NewLength);
end;

View File

@ -1126,19 +1126,22 @@ begin
BN_CLICKED: LMessage.Msg := LM_CLICKED;
BN_KILLFOCUS: LMessage.Msg := LM_EXIT;
end
else if (lWinControl is TCustomEdit) then
case HIWORD(WParam) of
EN_CHANGE: LMessage.Msg := CM_TEXTCHANGED;
end
else if (lWinControl is TCustomFloatSpinEdit) then
case HIWORD(WParam) of
EN_CHANGE: HandleSpinEditChange(TCustomFloatSpinEdit(lWinControl));
end
else if (lWinControl is TCustomMemo) then
else
if (lWinControl is TCustomEdit) then
begin
if (lWinControl is TCustomMemo) then
case HIWORD(WParam) of
// multiline edit doesn't send EN_CHANGE, so use EN_UPDATE
EN_UPDATE: LMessage.Msg := CM_TEXTCHANGED;
end
else
case HIWORD(WParam) of
EN_CHANGE:
if (lWinControl is TCustomFloatSpinEdit) then
HandleSpinEditChange(TCustomFloatSpinEdit(lWinControl))
else LMessage.Msg := CM_TEXTCHANGED;
end;
end
else if (lWinControl is TCustomListBox) then
case HIWORD(WParam) of
LBN_SELCHANGE: LMessage.Msg := LM_SELCHANGE;

View File

@ -33,7 +33,7 @@ uses
// To get as little as posible circles,
// uncomment only when needed for registration
////////////////////////////////////////////////////
Spin, Controls, LCLType,
Spin, Controls, StdCtrls, LCLType,
////////////////////////////////////////////////////
WSSpin, WSLCLClasses, Windows, Win32Int, WinExt, Win32Proc,
Win32WSStdCtrls, Win32WSControls;
@ -50,13 +50,13 @@ type
var Left, Top, Width, Height: integer; var SuppressMove: boolean); override;
class function CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): HWND; override;
class function GetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; override;
class function GetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; override;
class function GetSelStart(const ACustomEdit: TCustomEdit): integer; override;
class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override;
class function GetText(const AWinControl: TWinControl; var AText: String): Boolean; override;
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single; override;
class procedure SetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer); override;
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
class procedure ShowHide(const AWinControl: TWinControl); override;
class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override;
@ -163,16 +163,14 @@ begin
SuppressMove := true;
end;
class function TWin32WSCustomFloatSpinEdit.GetSelStart(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer;
class function TWin32WSCustomFloatSpinEdit.GetSelStart(const ACustomEdit: TCustomEdit): integer;
begin
Result := EditGetSelStart(GetBuddyWindow(ACustomFloatSpinEdit.Handle));
Result := EditGetSelStart(GetBuddyWindow(ACustomEdit.Handle));
end;
class function TWin32WSCustomFloatSpinEdit.GetSelLength(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer;
class function TWin32WSCustomFloatSpinEdit.GetSelLength(const ACustomEdit: TCustomEdit): integer;
begin
Result := EditGetSelLength(GetBuddyWindow(ACustomFloatSpinEdit.Handle));
Result := EditGetSelLength(GetBuddyWindow(ACustomEdit.Handle));
end;
class function TWin32WSCustomFloatSpinEdit.GetText(const AWinControl: TWinControl;
@ -190,16 +188,16 @@ begin
Result := GetWindowInfo(ACustomFloatSpinEdit.Handle)^.spinValue;
end;
class procedure TWin32WSCustomFloatSpinEdit.SetSelStart(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer);
class procedure TWin32WSCustomFloatSpinEdit.SetSelStart(const ACustomEdit: TCustomEdit;
NewStart: integer);
begin
EditSetSelStart(GetBuddyWindow(ACustomFloatSpinEdit.Handle), NewStart);
EditSetSelStart(GetBuddyWindow(ACustomEdit.Handle), NewStart);
end;
class procedure TWin32WSCustomFloatSpinEdit.SetSelLength(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer);
class procedure TWin32WSCustomFloatSpinEdit.SetSelLength(const ACustomEdit: TCustomEdit;
NewLength: integer);
begin
EditSetSelLength(GetBuddyWindow(ACustomFloatSpinEdit.Handle), NewLength);
EditSetSelLength(GetBuddyWindow(ACustomEdit.Handle), NewLength);
end;
class procedure TWin32WSCustomFloatSpinEdit.ShowHide(const AWinControl: TWinControl);

View File

@ -32,7 +32,7 @@ uses
// To get as little as posible circles,
// uncomment only when needed for registration
////////////////////////////////////////////////////
Spin, Controls, LCLType,
Spin, Controls, StdCtrls, LCLType,
////////////////////////////////////////////////////
WSSpin, WSLCLClasses, Windows, WinCEInt, WinCEProc,
WinCEWSStdCtrls, WinCEWSControls;
@ -49,13 +49,13 @@ type
var Left, Top, Width, Height: integer; var SuppressMove: boolean); override;
class function CreateHandle(const AWinControl: TWinControl;
const AParams: TCreateParams): HWND; override;
class function GetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; override;
class function GetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; override;
class function GetSelStart(const ACustomEdit: TCustomEdit): integer; override;
class function GetSelLength(const ACustomEdit: TCustomEdit): integer; override;
class function GetText(const AWinControl: TWinControl; var AText: String): Boolean; override;
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single; override;
class procedure SetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer); override;
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
class procedure ShowHide(const AWinControl: TWinControl); override;
class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override;
@ -154,16 +154,14 @@ begin
SuppressMove := true;
end;
class function TWinCEWSCustomFloatSpinEdit.GetSelStart(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer;
class function TWinCEWSCustomFloatSpinEdit.GetSelStart(const ACustomEdit: TCustomEdit): integer;
begin
Result := EditGetSelStart(GetBuddyWindow(ACustomFloatSpinEdit.Handle));
Result := EditGetSelStart(GetBuddyWindow(ACustomEdit.Handle));
end;
class function TWinCEWSCustomFloatSpinEdit.GetSelLength(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer;
class function TWinCEWSCustomFloatSpinEdit.GetSelLength(const ACustomEdit: TCustomEdit): integer;
begin
Result := EditGetSelLength(GetBuddyWindow(ACustomFloatSpinEdit.Handle));
Result := EditGetSelLength(GetBuddyWindow(ACustomEdit.Handle));
end;
class function TWinCEWSCustomFloatSpinEdit.GetText(const AWinControl: TWinControl;
@ -181,16 +179,16 @@ begin
Result := GetWindowInfo(ACustomFloatSpinEdit.Handle)^.spinValue;
end;
class procedure TWinCEWSCustomFloatSpinEdit.SetSelStart(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer);
class procedure TWinCEWSCustomFloatSpinEdit.SetSelStart(const ACustomEdit: TCustomEdit;
NewStart: integer);
begin
EditSetSelStart(GetBuddyWindow(ACustomFloatSpinEdit.Handle), NewStart);
EditSetSelStart(GetBuddyWindow(ACustomEdit.Handle), NewStart);
end;
class procedure TWinCEWSCustomFloatSpinEdit.SetSelLength(
const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer);
class procedure TWinCEWSCustomFloatSpinEdit.SetSelLength(const ACustomEdit: TCustomEdit;
NewLength: integer);
begin
EditSetSelLength(GetBuddyWindow(ACustomFloatSpinEdit.Handle), NewLength);
EditSetSelLength(GetBuddyWindow(ACustomEdit.Handle), NewLength);
end;
class procedure TWinCEWSCustomFloatSpinEdit.ShowHide(const AWinControl: TWinControl);

View File

@ -1,4 +1,4 @@
{
{
/***************************************************************************
Spin.pp
--------
@ -35,68 +35,42 @@ uses
type
{ TCustomFloatSpinEdit }
TCustomFloatSpinEdit = class(TWinControl)
TCustomFloatSpinEdit = class(TCustomEdit)
private
FIncrement: single;
FDecimals: integer;
FMaxValue: single;
FMinValue: single;
FModified: boolean;
FOnChange: TNotifyEvent;
FSelLength: integer;
FSelStart: integer;
FIncrement: Single;
FDecimals: Integer;
FMaxValue: Single;
FMinValue: Single;
FValue: Single;
FValueEmpty: boolean;
FUpdatePending: boolean;
FValueChanged: boolean;
function GetModified: Boolean;
function GetSelLength: integer;
function GetSelStart: integer;
function GetSelText: String;
function MaxValueIsStored: boolean;
function MinValueIsStored: boolean;
procedure SetMaxValue(const AValue: single);
procedure SetMinValue(const AValue: single);
procedure SetModified(const AValue: Boolean);
procedure SetSelLength(const AValue: integer);
procedure SetSelStart(const AValue: integer);
procedure SetSelText(const AValue: String);
procedure SetValueEmpty(const AValue: boolean);
Procedure UpdateControl;
function ValueIsStored: boolean;
FValueEmpty: Boolean;
FUpdatePending: Boolean;
FValueChanged: Boolean;
function MaxValueIsStored: Boolean;
function MinValueIsStored: Boolean;
procedure SetMaxValue(const AValue: Single);
procedure SetMinValue(const AValue: Single);
procedure SetValueEmpty(const AValue: Boolean);
procedure UpdateControl;
function ValueIsStored: Boolean;
protected
function RealGetText: TCaption; override;
procedure TextChanged; override;
procedure SetDecimals(Num: Integer);
procedure SetDecimals(ADecimals: Integer);
function GetValue: Single;
procedure SetValue(const Num: Single);
procedure SetIncrement(const NewIncrement: single);
procedure SetValue(const AValue: Single);
procedure SetIncrement(const AIncrement: Single);
procedure InitializeWnd; override;
procedure FinalizeWnd; override;
procedure Loaded; override;
procedure Change; dynamic;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
procedure SelectAll;
procedure ClearSelection; virtual;
procedure CopyToClipboard; virtual;
procedure CutToClipboard; virtual;
procedure PasteFromClipboard; virtual;
property SelLength: integer read GetSelLength write SetSelLength;
property SelStart: integer read GetSelStart write SetSelStart;
property SelText: String read GetSelText write SetSelText;
property Modified: Boolean read GetModified write SetModified;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property Text;
public
property DecimalPlaces: Integer read FDecimals write SetDecimals default 2;
property Increment: Single read FIncrement write SetIncrement default 1;
property MinValue: single read FMinValue write SetMinValue default 0;
property MaxValue: single read FMaxValue write SetMaxValue default 100;
property TabStop default true;
property MinValue: Single read FMinValue write SetMinValue default 0;
property MaxValue: Single read FMaxValue write SetMaxValue default 100;
property Value: Single read GetValue write SetValue default 0;
property ValueEmpty: boolean read FValueEmpty write SetValueEmpty default False;
property ValueEmpty: Boolean read FValueEmpty write SetValueEmpty default False;
end;
{ TFloatSpinEdit }
@ -165,7 +139,6 @@ type
property Anchors;
property AutoSize;
property BorderSpacing;
property ClimbRate: integer write SetIncrement stored false; // TODO: remove, deprecated
property Constraints;
property Enabled;
property Increment;
@ -203,7 +176,7 @@ uses
procedure Register;
begin
RegisterComponents('Misc',[TSpinEdit,TFloatSpinEdit]);
RegisterComponents('Misc', [TSpinEdit, TFloatSpinEdit]);
end;
{$I spinedit.inc}

View File

@ -46,19 +46,14 @@ uses
////////////////////////////////////////////////////
Spin,
////////////////////////////////////////////////////
WSLCLClasses, WSControls;
WSLCLClasses, WSControls, WSStdCtrls;
type
{ TWSCustomFloatSpinEdit }
TWSCustomFloatSpinEdit = class(TWSWinControl)
class function GetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; virtual;
class function GetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer; virtual;
TWSCustomFloatSpinEdit = class(TWSCustomEdit)
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single; virtual;
class procedure SetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer); virtual;
class procedure SetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer); virtual;
(* TODO: seperation into properties instead of bulk update
class procedure SetIncrement(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewIncrement: single); virtual;
class procedure SetMinValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: single); virtual;
@ -80,27 +75,9 @@ implementation
{ TWSCustomFloatSpinEdit }
class function TWSCustomFloatSpinEdit.GetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer;
begin
result := -1;
end;
class function TWSCustomFloatSpinEdit.GetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): integer;
begin
result := 0;
end;
class function TWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single;
begin
result := 0.0;
end;
class procedure TWSCustomFloatSpinEdit.SetSelStart(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewStart: integer);
begin
end;
class procedure TWSCustomFloatSpinEdit.SetSelLength(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewLength: integer);
begin
Result := 0.0;
end;
class procedure TWSCustomFloatSpinEdit.UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit);
@ -116,4 +93,4 @@ initialization
RegisterWSComponent(TCustomFloatSpinEdit, TWSCustomFloatSpinEdit);
// RegisterWSComponent(TFloatSpinEdit, TWSFloatSpinEdit);
////////////////////////////////////////////////////
end.
end.