unit EditDouble; { Komponentti, jossa voidaan editoida reaalilukua. Vesa Lappalainen 17.12.1997 } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask; type TEditDouble = class(TEdit) private FOnChange : TNotifyEvent; FValue : double; protected public constructor Create(AOwner: TComponent); override; function GetValue : double; virtual; procedure SetValue(d:double); virtual; procedure EditChange(Sender: TObject); virtual; published property Value : double read FValue write SetValue; property OnChange:TNotifyEvent read FOnChange write FOnChange; end; procedure Register; implementation uses DoubleSt; function TEditDouble.GetValue : double; begin FValue := StrToDoubleDef(Text,FValue); Result := FValue; end; procedure TEditDouble.SetValue(d:double); begin if ( abs(d-FValue) < 0.00001*abs(d) ) then exit; // inherited OnChange := nil; Text := DoubleToStr(d); FValue := d; // inherited OnChange := EditChange; end; constructor TEditDouble.Create(AOwner: TComponent); begin inherited; inherited OnChange := EditChange; end; procedure TEditDouble.EditChange(Sender: TObject); begin FValue := GetValue; if assigned(OnChange) then OnChange(self); end; procedure Register; begin RegisterComponents('GKO97', [TEditDouble]); end; end.