mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-11 17:55:55 +02:00
LCL: FloatSpinEdit uses double for internal representation, so that the full range of 32 bits integer can be represented without rounding problems (fixes #10844)
git-svn-id: trunk@15835 -
This commit is contained in:
parent
2996a3c332
commit
dcaa111227
@ -43,7 +43,7 @@ end;
|
||||
|
||||
procedure TCustomFloatSpinEdit.TextChanged;
|
||||
var
|
||||
PrevValue: Single;
|
||||
PrevValue: Double;
|
||||
begin
|
||||
PrevValue := FValue;
|
||||
FValueChanged := True;
|
||||
@ -58,7 +58,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCustomFloatSpinEdit.SetMaxValue(const AValue: Single);
|
||||
procedure TCustomFloatSpinEdit.SetMaxValue(const AValue: Double);
|
||||
begin
|
||||
if FMaxValue = AValue then Exit;
|
||||
FMaxValue := AValue;
|
||||
@ -71,7 +71,7 @@ begin
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
procedure TCustomFloatSpinEdit.SetMinValue(const AValue: Single);
|
||||
procedure TCustomFloatSpinEdit.SetMinValue(const AValue: Double);
|
||||
begin
|
||||
if FMinValue = AValue then Exit;
|
||||
FMinValue := AValue;
|
||||
@ -85,7 +85,7 @@ begin
|
||||
UpdateControl;
|
||||
end;
|
||||
|
||||
procedure TCustomFloatSpinEdit.SetIncrement(const AIncrement: Single);
|
||||
procedure TCustomFloatSpinEdit.SetIncrement(const AIncrement: Double);
|
||||
begin
|
||||
if AIncrement = FIncrement then Exit;
|
||||
FIncrement := AIncrement;
|
||||
@ -110,7 +110,7 @@ begin
|
||||
Result.Y:=23;
|
||||
end;
|
||||
|
||||
procedure TCustomFloatSpinEdit.SetValue(const AValue: Single);
|
||||
procedure TCustomFloatSpinEdit.SetValue(const AValue: Double);
|
||||
begin
|
||||
if FValue = AValue then Exit;
|
||||
FValue := AValue;
|
||||
@ -121,7 +121,7 @@ begin
|
||||
UpdateControl;
|
||||
end;
|
||||
|
||||
function TCustomFloatSpinEdit.GetValue: Single;
|
||||
function TCustomFloatSpinEdit.GetValue: Double;
|
||||
begin
|
||||
if HandleAllocated and FValueChanged
|
||||
and not (wcfCreatingHandle in FWinControlFlags) then
|
||||
@ -155,7 +155,7 @@ begin
|
||||
SetInitialBounds(0,0,GetControlClassDefaultSize.X,GetControlClassDefaultSize.Y);
|
||||
end;
|
||||
|
||||
function TCustomFloatSpinEdit.GetLimitedValue(const AValue: Single): Single;
|
||||
function TCustomFloatSpinEdit.GetLimitedValue(const AValue: Double): Double;
|
||||
begin
|
||||
Result := AValue;
|
||||
if FMaxValue > FMinValue then
|
||||
@ -165,12 +165,12 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TCustomFloatSpinEdit.ValueToStr(const AValue: Single): String;
|
||||
function TCustomFloatSpinEdit.ValueToStr(const AValue: Double): String;
|
||||
begin
|
||||
Result := FloatToStrF(GetLimitedValue(AValue), ffFixed, 20, DecimalPlaces);
|
||||
end;
|
||||
|
||||
function TCustomFloatSpinEdit.StrToValue(const S: String): Single;
|
||||
function TCustomFloatSpinEdit.StrToValue(const S: String): Double;
|
||||
begin
|
||||
try
|
||||
Result := GetLimitedValue(StrToFloatDef(S, FValue));
|
||||
|
@ -117,10 +117,10 @@ type
|
||||
TCarbonSpinEdit = class(TCarbonCustomEdit)
|
||||
private
|
||||
FUpDown: ControlRef;
|
||||
FValue: Single;
|
||||
FMin: Single;
|
||||
FMax: Single;
|
||||
FIncrement: Single;
|
||||
FValue: Double;
|
||||
FMin: Double;
|
||||
FMax: Double;
|
||||
FIncrement: Double;
|
||||
FDecimalPlaces: Integer;
|
||||
function UpDownThemeWidth: Integer;
|
||||
function FocusRectThemeOutset: Integer;
|
||||
@ -141,7 +141,7 @@ type
|
||||
function SetText(const S: String): Boolean; override;
|
||||
public
|
||||
procedure UpdateControl;
|
||||
property Value: Single read FValue;
|
||||
property Value: Double read FValue;
|
||||
end;
|
||||
|
||||
{ TCarbonEdit }
|
||||
|
@ -49,7 +49,7 @@ type
|
||||
protected
|
||||
public
|
||||
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Single; override;
|
||||
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
|
||||
class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override;
|
||||
end;
|
||||
|
||||
@ -88,7 +88,7 @@ end;
|
||||
Params: ACustomFloatSpinEdit - LCL custom float spin edit
|
||||
Returns: The float spin edit value
|
||||
------------------------------------------------------------------------------}
|
||||
class function TCarbonWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Single;
|
||||
class function TCarbonWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
|
||||
begin
|
||||
Result := 0;
|
||||
if not CheckHandle(ACustomFloatSpinEdit, Self, 'GetValue') then Exit;
|
||||
|
@ -34,7 +34,7 @@ uses
|
||||
glib, gdk, gtk,
|
||||
{$ENDIF}
|
||||
// RTL, FCL, LCL
|
||||
Controls, LCLType, LCLProc, Spin, StdCtrls,
|
||||
Math, Controls, LCLType, LCLProc, Spin, StdCtrls,
|
||||
// Widgetset
|
||||
GtkProc, GtkExtra, GtkDef, GtkInt, GtkWSControls, GtkWSStdCtrls,
|
||||
WSLCLClasses, WSSpin;
|
||||
@ -50,7 +50,7 @@ type
|
||||
public
|
||||
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 function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
|
||||
|
||||
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
|
||||
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
|
||||
@ -106,15 +106,9 @@ begin
|
||||
end;
|
||||
|
||||
class function TGtkWSCustomFloatSpinEdit.GetValue(
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single;
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
|
||||
begin
|
||||
{$IFDEF GTK2}
|
||||
// developer.gnome.org/doc/API/2.2/gtk/GtkSpinButton.html:
|
||||
// "function gtk_spin_button_get_value_as_float is deprecated, use gtk_spin_button_get_value() instead"
|
||||
Result:=Single(gtk_spin_button_get_value(PGtkSpinButton(ACustomFloatSpinEdit.Handle)));
|
||||
{$ELSE}
|
||||
Result:=gtk_spin_button_get_value_as_float(PGtkSpinButton(ACustomFloatSpinEdit.Handle));
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
class procedure TGtkWSCustomFloatSpinEdit.SetSelStart(const ACustomEdit: TCustomEdit;
|
||||
@ -136,7 +130,7 @@ var
|
||||
AnAdjustment: PGtkAdjustment;
|
||||
wHandle: HWND;
|
||||
SpinWidget: PGtkSpinButton;
|
||||
AMin, AMax: Single;
|
||||
AMin, AMax: Double;
|
||||
begin
|
||||
//DebugLn(['TGtkWSCustomFloatSpinEdit.UpdateControl ',dbgsName(ACustomFloatSpinEdit)]);
|
||||
wHandle := ACustomFloatSpinEdit.Handle;
|
||||
@ -149,8 +143,8 @@ begin
|
||||
end
|
||||
else
|
||||
begin
|
||||
AMin := -3.4E38; // min single
|
||||
AMax := 3.4E38; // max single
|
||||
AMin := -MaxDouble;
|
||||
AMax := MaxDouble;
|
||||
end;
|
||||
|
||||
AnAdjustment:=gtk_spin_button_get_adjustment(SpinWidget);
|
||||
|
@ -30,7 +30,7 @@ uses
|
||||
// Bindings
|
||||
glib2, gdk2pixbuf, gdk2, gtk2, Pango,
|
||||
// RTL, FCL, LCL
|
||||
Controls, LCLType, LCLProc, Spin, StdCtrls,
|
||||
Math, Controls, LCLType, LCLProc, Spin, StdCtrls,
|
||||
// Widgetset
|
||||
GtkProc, GtkExtra, GtkDef, Gtk2Int, Gtk2WSControls, Gtk2WSStdCtrls,
|
||||
Gtk2Proc, WSLCLClasses, WSSpin;
|
||||
@ -46,7 +46,7 @@ type
|
||||
public
|
||||
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 function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
|
||||
|
||||
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
|
||||
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
|
||||
@ -102,11 +102,11 @@ begin
|
||||
end;
|
||||
|
||||
class function TGtk2WSCustomFloatSpinEdit.GetValue(
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single;
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
|
||||
begin
|
||||
// developer.gnome.org/doc/API/2.2/gtk/GtkSpinButton.html:
|
||||
// "function gtk_spin_button_get_value_as_float is deprecated, use gtk_spin_button_get_value() instead"
|
||||
Result:=Single(gtk_spin_button_get_value(PGtkSpinButton(ACustomFloatSpinEdit.Handle)));
|
||||
Result:=gtk_spin_button_get_value(PGtkSpinButton(ACustomFloatSpinEdit.Handle));
|
||||
end;
|
||||
|
||||
class procedure TGtk2WSCustomFloatSpinEdit.SetSelStart(const ACustomEdit: TCustomEdit;
|
||||
@ -128,7 +128,7 @@ var
|
||||
AnAdjustment: PGtkAdjustment;
|
||||
wHandle: HWND;
|
||||
SpinWidget: PGtkSpinButton;
|
||||
AMin, AMax: Single;
|
||||
AMin, AMax: Double;
|
||||
begin
|
||||
//DebugLn(['TGtkWSCustomFloatSpinEdit.UpdateControl ',dbgsName(ACustomFloatSpinEdit)]);
|
||||
wHandle := ACustomFloatSpinEdit.Handle;
|
||||
@ -141,8 +141,8 @@ begin
|
||||
end
|
||||
else
|
||||
begin
|
||||
AMin := -3.4E38; // min single
|
||||
AMax := 3.4E38; // max single
|
||||
AMin := -MaxDouble;
|
||||
AMax := MaxDouble;
|
||||
end;
|
||||
|
||||
AnAdjustment:=gtk_spin_button_get_adjustment(SpinWidget);
|
||||
|
@ -716,16 +716,16 @@ type
|
||||
procedure setSelection(const AStart, ALength: Integer);
|
||||
procedure Undo;
|
||||
public
|
||||
function getValue: single; virtual; abstract;
|
||||
function getValue: Double; virtual; abstract;
|
||||
function getReadOnly: Boolean;
|
||||
function getText: WideString; override;
|
||||
function getTextStatic: Boolean; override;
|
||||
procedure setFocusPolicy(const APolicy: QtFocusPolicy); override;
|
||||
procedure setMinimum(const v: single); virtual; abstract;
|
||||
procedure setMaximum(const v: single); virtual; abstract;
|
||||
procedure setSingleStep(const v: single); virtual; abstract;
|
||||
procedure setMinimum(const v: Double); virtual; abstract;
|
||||
procedure setMaximum(const v: Double); virtual; abstract;
|
||||
procedure setSingleStep(const v: Double); virtual; abstract;
|
||||
procedure setReadOnly(const r: Boolean);
|
||||
procedure setValue(const v: single); virtual; abstract;
|
||||
procedure setValue(const v: Double); virtual; abstract;
|
||||
procedure setText(const W: WideString); override;
|
||||
|
||||
property LineEdit: QLineEditH read GetLineEdit;
|
||||
@ -744,12 +744,12 @@ type
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||
public
|
||||
function getValue: single; override;
|
||||
function getValue: Double; override;
|
||||
procedure setDecimals(const v: integer);
|
||||
procedure setMinimum(const v: single); override;
|
||||
procedure setMaximum(const v: single); override;
|
||||
procedure setSingleStep(const v: single); override;
|
||||
procedure setValue(const v: single); override;
|
||||
procedure setMinimum(const v: Double); override;
|
||||
procedure setMaximum(const v: Double); override;
|
||||
procedure setSingleStep(const v: Double); override;
|
||||
procedure setValue(const v: Double); override;
|
||||
public
|
||||
procedure AttachEvents; override;
|
||||
procedure DetachEvents; override;
|
||||
@ -765,11 +765,11 @@ type
|
||||
protected
|
||||
function CreateWidget(const AParams: TCreateParams):QWidgetH; override;
|
||||
public
|
||||
function getValue: single; override;
|
||||
procedure setMinimum(const v: single); override;
|
||||
procedure setMaximum(const v: single); override;
|
||||
procedure setSingleStep(const v: single); override;
|
||||
procedure setValue(const v: single); override;
|
||||
function getValue: Double; override;
|
||||
procedure setMinimum(const v: Double); override;
|
||||
procedure setMaximum(const v: Double); override;
|
||||
procedure setSingleStep(const v: Double); override;
|
||||
procedure setValue(const v: Double); override;
|
||||
public
|
||||
procedure AttachEvents; override;
|
||||
procedure DetachEvents; override;
|
||||
@ -5814,7 +5814,7 @@ begin
|
||||
Result := QDoubleSpinBox_create();
|
||||
end;
|
||||
|
||||
function TQtFloatSpinBox.getValue: single;
|
||||
function TQtFloatSpinBox.getValue: Double;
|
||||
begin
|
||||
Result := QDoubleSpinBox_value(QDoubleSpinBoxH(Widget));
|
||||
end;
|
||||
@ -5824,22 +5824,22 @@ begin
|
||||
QDoubleSpinBox_setDecimals(QDoubleSpinBoxH(Widget), v);
|
||||
end;
|
||||
|
||||
procedure TQtFloatSpinBox.setMinimum(const v: single);
|
||||
procedure TQtFloatSpinBox.setMinimum(const v: Double);
|
||||
begin
|
||||
QDoubleSpinBox_setMinimum(QDoubleSpinBoxH(Widget), v);
|
||||
end;
|
||||
|
||||
procedure TQtFloatSpinBox.setMaximum(const v: single);
|
||||
procedure TQtFloatSpinBox.setMaximum(const v: Double);
|
||||
begin
|
||||
QDoubleSpinBox_setMaximum(QDoubleSpinBoxH(Widget), v);
|
||||
end;
|
||||
|
||||
procedure TQtFloatSpinBox.setSingleStep(const v: single);
|
||||
procedure TQtFloatSpinBox.setSingleStep(const v: Double);
|
||||
begin
|
||||
QDoubleSpinBox_setSingleStep(QDoubleSpinBoxH(Widget), v);
|
||||
end;
|
||||
|
||||
procedure TQtFloatSpinBox.setValue(const v: single);
|
||||
procedure TQtFloatSpinBox.setValue(const v: Double);
|
||||
begin
|
||||
QDoubleSpinBox_setValue(QDoubleSpinBoxH(Widget), v);
|
||||
end;
|
||||
@ -5880,27 +5880,27 @@ begin
|
||||
Result := QSpinBox_create();
|
||||
end;
|
||||
|
||||
function TQtSpinBox.getValue: single;
|
||||
function TQtSpinBox.getValue: Double;
|
||||
begin
|
||||
Result := QSpinBox_value(QSpinBoxH(Widget));
|
||||
end;
|
||||
|
||||
procedure TQtSpinBox.setMinimum(const v: single);
|
||||
procedure TQtSpinBox.setMinimum(const v: Double);
|
||||
begin
|
||||
QSpinBox_setMinimum(QSpinBoxH(Widget), round(v));
|
||||
end;
|
||||
|
||||
procedure TQtSpinBox.setMaximum(const v: single);
|
||||
procedure TQtSpinBox.setMaximum(const v: Double);
|
||||
begin
|
||||
QSpinBox_setMaximum(QSpinBoxH(Widget), round(v));
|
||||
end;
|
||||
|
||||
procedure TQtSpinBox.setSingleStep(const v: single);
|
||||
procedure TQtSpinBox.setSingleStep(const v: Double);
|
||||
begin
|
||||
QSpinBox_setSingleStep(QSpinBoxH(Widget), round(v));
|
||||
end;
|
||||
|
||||
procedure TQtSpinBox.setValue(const v: single);
|
||||
procedure TQtSpinBox.setValue(const v: Double);
|
||||
begin
|
||||
QSpinBox_setValue(QSpinBoxH(Widget), round(v));
|
||||
end;
|
||||
|
@ -51,12 +51,12 @@ type
|
||||
const AParams: TCreateParams): TLCLIntfHandle; override;
|
||||
class procedure UpdateControl(const ACustomFloatSpinEdit: TCustomFloatSpinEdit); override;
|
||||
|
||||
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single; override;
|
||||
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
|
||||
|
||||
(*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;
|
||||
class procedure SetMaxValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: single); virtual;
|
||||
class procedure SetIncrement(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewIncrement: Double); virtual;
|
||||
class procedure SetMinValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: Double); virtual;
|
||||
class procedure SetMaxValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: Double); virtual;
|
||||
class procedure SetValueEmpty(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewEmpty: boolean); virtual;
|
||||
*)
|
||||
|
||||
@ -112,7 +112,7 @@ begin
|
||||
Result := TLCLIntfHandle(QtSpinBox);
|
||||
end;
|
||||
|
||||
class function TQtWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single;
|
||||
class function TQtWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
|
||||
begin
|
||||
Result := TQtAbstractSpinBox(ACustomFloatSpinEdit.Handle).getValue;
|
||||
end;
|
||||
|
@ -913,7 +913,7 @@ var
|
||||
var
|
||||
SpinEdit: TCustomFloatSpinEdit;
|
||||
spinHandle: HWND;
|
||||
newValue: single;
|
||||
newValue: Double;
|
||||
begin
|
||||
SpinEdit := TCustomFloatSpinEdit(WindowInfo^.WinControl);
|
||||
|
||||
|
@ -59,7 +59,7 @@ Type
|
||||
DrawItemSelected: boolean;// whether this item is selected LB_GETSEL not uptodate yet
|
||||
MouseX, MouseY: smallint; // noticing spurious WM_MOUSEMOVE messages
|
||||
case integer of
|
||||
0: (spinValue: single);
|
||||
0: (spinValue: Double);
|
||||
1: (
|
||||
TrackValid: Boolean; // Set when we have a valid trackpos
|
||||
TrackPos: Integer // keeps the thumb position while tracking
|
||||
|
@ -55,7 +55,7 @@ type
|
||||
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 function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
|
||||
|
||||
class procedure SetReadOnly(const ACustomEdit: TCustomEdit; NewReadOnly: boolean); override;
|
||||
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
|
||||
@ -76,7 +76,7 @@ type
|
||||
|
||||
|
||||
procedure UpdateFloatSpinEditText(const ASpinEdit: TCustomFloatSpinEdit;
|
||||
const ANewValue: single);
|
||||
const ANewValue: Double);
|
||||
|
||||
implementation
|
||||
|
||||
@ -121,7 +121,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure UpdateFloatSpinEditText(const ASpinEdit: TCustomFloatSpinEdit;
|
||||
const ANewValue: single);
|
||||
const ANewValue: Double);
|
||||
var
|
||||
editHandle: HWND;
|
||||
newValueText: string;
|
||||
@ -197,7 +197,7 @@ begin
|
||||
end;
|
||||
|
||||
class function TWin32WSCustomFloatSpinEdit.GetValue(
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single;
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
|
||||
begin
|
||||
Result := GetWindowInfo(ACustomFloatSpinEdit.Handle)^.spinValue;
|
||||
end;
|
||||
|
@ -776,7 +776,7 @@ Var
|
||||
{ procedure HandleSpinEditChange(ASpinEdit: TCustomFloatSpinEdit);
|
||||
var
|
||||
lWindowInfo: PWindowInfo;
|
||||
lNewValue: single;
|
||||
lNewValue: Double;
|
||||
begin
|
||||
lWindowInfo := GetWindowInfo(ASpinEdit.Handle);
|
||||
if lWindowInfo = @DefaultWindowInfo then exit;
|
||||
@ -792,7 +792,7 @@ Var
|
||||
var
|
||||
lSpinEdit: TCustomFloatSpinEdit;
|
||||
spinHandle: HWND;
|
||||
newValue: single;
|
||||
newValue: Double;
|
||||
begin
|
||||
lSpinEdit := TCustomFloatSpinEdit(WindowInfo^.WinControl);
|
||||
newValue := WindowInfo^.spinValue + AUpDownMsg^.iDelta * lSpinEdit.Increment;
|
||||
|
@ -41,7 +41,7 @@ Type
|
||||
myButton : HWND;
|
||||
MouseX, MouseY: word; // noticing spurious WM_MOUSEMOVE messages
|
||||
case integer of
|
||||
0: (spinValue: single);
|
||||
0: (spinValue: Double);
|
||||
1: (
|
||||
TrackValid: Boolean; // Set when we have a valid trackpos
|
||||
TrackPos: Integer // keeps the thumb position while tracking
|
||||
|
@ -52,7 +52,7 @@ type
|
||||
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 function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double; override;
|
||||
|
||||
class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override;
|
||||
class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override;
|
||||
@ -70,7 +70,7 @@ type
|
||||
end;
|
||||
|
||||
|
||||
procedure UpdateFloatSpinEditText(const ASpinHandle: HWND; const ANewValue: single;
|
||||
procedure UpdateFloatSpinEditText(const ASpinHandle: HWND; const ANewValue: Double;
|
||||
const ADecimalPlaces: integer);
|
||||
|
||||
implementation
|
||||
@ -98,7 +98,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure UpdateFloatSpinEditText(const ASpinHandle: HWND; const ANewValue: single;
|
||||
procedure UpdateFloatSpinEditText(const ASpinHandle: HWND; const ANewValue: Double;
|
||||
const ADecimalPlaces: integer);
|
||||
var
|
||||
editHandle: HWND;
|
||||
@ -175,7 +175,7 @@ begin
|
||||
end;
|
||||
|
||||
class function TWinCEWSCustomFloatSpinEdit.GetValue(
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single;
|
||||
const ACustomFloatSpinEdit: TCustomFloatSpinEdit): Double;
|
||||
begin
|
||||
Result := GetWindowInfo(ACustomFloatSpinEdit.Handle)^.spinValue;
|
||||
end;
|
||||
|
32
lcl/spin.pp
32
lcl/spin.pp
@ -37,16 +37,16 @@ type
|
||||
|
||||
TCustomFloatSpinEdit = class(TCustomEdit)
|
||||
private
|
||||
FIncrement: Single;
|
||||
FIncrement: Double;
|
||||
FDecimals: Integer;
|
||||
FMaxValue: Single;
|
||||
FMinValue: Single;
|
||||
FValue: Single;
|
||||
FMaxValue: Double;
|
||||
FMinValue: Double;
|
||||
FValue: Double;
|
||||
FValueEmpty: Boolean;
|
||||
FUpdatePending: Boolean;
|
||||
FValueChanged: Boolean;
|
||||
procedure SetMaxValue(const AValue: Single);
|
||||
procedure SetMinValue(const AValue: Single);
|
||||
procedure SetMaxValue(const AValue: Double);
|
||||
procedure SetMinValue(const AValue: Double);
|
||||
procedure SetValueEmpty(const AValue: Boolean);
|
||||
procedure UpdateControl;
|
||||
function IsStored: Boolean; // FPC bug workaround
|
||||
@ -54,24 +54,24 @@ type
|
||||
function RealGetText: TCaption; override;
|
||||
procedure TextChanged; override;
|
||||
procedure SetDecimals(ADecimals: Integer);
|
||||
function GetValue: Single;
|
||||
procedure SetValue(const AValue: Single);
|
||||
procedure SetIncrement(const AIncrement: Single);
|
||||
function GetValue: Double;
|
||||
procedure SetValue(const AValue: Double);
|
||||
procedure SetIncrement(const AIncrement: Double);
|
||||
procedure InitializeWnd; override;
|
||||
procedure FinalizeWnd; override;
|
||||
procedure Loaded; override;
|
||||
class function GetControlClassDefaultSize: TPoint; override;
|
||||
public
|
||||
constructor Create(TheOwner: TComponent); override;
|
||||
function GetLimitedValue(const AValue: Single): Single;
|
||||
function ValueToStr(const AValue: Single): String;
|
||||
function StrToValue(const S: String): Single;
|
||||
function GetLimitedValue(const AValue: Double): Double;
|
||||
function ValueToStr(const AValue: Double): String;
|
||||
function StrToValue(const S: String): Double;
|
||||
public
|
||||
property DecimalPlaces: Integer read FDecimals write SetDecimals default 2;
|
||||
property Increment: Single read FIncrement write SetIncrement stored IsStored default 1;
|
||||
property MinValue: Single read FMinValue write SetMinValue stored IsStored default 0;
|
||||
property MaxValue: Single read FMaxValue write SetMaxValue stored IsStored default 100;
|
||||
property Value: Single read GetValue write SetValue stored IsStored default 0;
|
||||
property Increment: Double read FIncrement write SetIncrement stored IsStored;
|
||||
property MinValue: Double read FMinValue write SetMinValue stored IsStored;
|
||||
property MaxValue: Double read FMaxValue write SetMaxValue stored IsStored;
|
||||
property Value: Double read GetValue write SetValue stored IsStored;
|
||||
property ValueEmpty: Boolean read FValueEmpty write SetValueEmpty default False;
|
||||
end;
|
||||
|
||||
|
@ -52,12 +52,12 @@ type
|
||||
{ TWSCustomFloatSpinEdit }
|
||||
|
||||
TWSCustomFloatSpinEdit = class(TWSCustomEdit)
|
||||
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single; virtual;
|
||||
class function GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): double; 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;
|
||||
class procedure SetMaxValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: single); virtual;
|
||||
class procedure SetIncrement(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewIncrement: Double); virtual;
|
||||
class procedure SetMinValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: Double); virtual;
|
||||
class procedure SetMaxValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewValue: Double); virtual;
|
||||
class procedure SetValueEmpty(const ACustomFloatSpinEdit: TCustomFloatSpinEdit; NewEmpty: boolean); virtual;
|
||||
*)
|
||||
|
||||
@ -75,7 +75,7 @@ implementation
|
||||
|
||||
{ TWSCustomFloatSpinEdit }
|
||||
|
||||
class function TWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): single;
|
||||
class function TWSCustomFloatSpinEdit.GetValue(const ACustomFloatSpinEdit: TCustomFloatSpinEdit): double;
|
||||
begin
|
||||
Result := 0.0;
|
||||
end;
|
||||
|
Loading…
Reference in New Issue
Block a user