//Advanced Delphi Systems Code: ads_Math
Unit Ads_Math;

{Copyright(c)2016 Advanced Delphi Systems

 Richard Maley
 Advanced Delphi Systems
 12613 Maidens Bower Drive
 Potomac, MD 20854 USA
 phone 301-840-1554
 dickmaley@advdelphisys.com

 The code herein can be used or modified by anyone.  Please retain references
 to Richard Maley at Advanced Delphi Systems.  If you make improvements to the
 code please send your improvements to dickmaley@advdelphisys.com so that the
 entire Delphi community can benefit.  All comments are welcome.
}

(*
UnitIndex Master Index Implementation Section Download Units
Description: ads_Math.pas
This unit contains the following routines.

Max   Min   Min_I   NumVal   Pi_Real   Rand   RandomInteger   SetIntegerHiAndLo   TEditKeyFilter.OnlyAToZ   TEditKeyFilter.OnlyNumbers   TEditKeyFilter.OnlyNumbersAbsolute   TPanel_Cmp_Sec_ads.ResizeShadowLabel 

*)
Interface

Uses
  SysUtils, ExtCtrls, StdCtrls, Ads_Strg, Ads_Misc;

Function SetIntegerHiAndLo(HiValue,LoValue: Byte): Integer;

{!~ Returns the larger of two numbers}
Function Max(Number1, Number2: Single): Single;

{!~ Returns the smaller of two numbers}
Function Min(Number1, Number2: Single): Single;

{!~
Returns the smaller of two integers
}
Function Min_I(Number1, Number2: Integer): Integer;

{!~ Converts a string to an Extended floating point number}
Function NumVal(InputString: String): Extended;

{!~ Returns the constant pi as a real number}
Function Pi_Real: Real;

{!~ Returns A PseudoRandom Number Between 0 And 1}
Function Rand: Integer;

{!~ Returns A Random Number}
Function RandomInteger(RandMin, RandMax: Integer): Integer;

implementation


Type
  TPanel_Cmp_Sec_ads = class(TPanel)
  Public
    procedure ResizeShadowLabel(Sender: TObject);
  End;

//
Unit Description UnitIndex Master Index
procedure TPanel_Cmp_Sec_ads.ResizeShadowLabel(
  Sender     : TObject);
Var
  PH, PW : Integer;
  LH, LW : Integer;
begin
  PH := TPanel(Sender).Height;
  PW := TPanel(Sender).Width;
  LH := TLabel(Controls[0]).Height;
  LW := TLabel(Controls[0]).Width;
  TLabel(Controls[0]).Top  := ((PH-LH) div 2)-3;
  TLabel(Controls[0]).Left := ((Pw-Lw) div 2)-3;
end;

Type
  TEditKeyFilter = Class(TEdit)
  Published
    {!~ Throws away all keys except 0-9,-,+,.}
    Procedure OnlyNumbers(Sender: TObject; var Key: Char);

    {!~ Throws away all keys except 0-9}
    Procedure OnlyNumbersAbsolute(Sender: TObject; var Key: Char);

    {!~ Throws away all keys except a-z and A-Z}
    Procedure OnlyAToZ(Sender: TObject; var Key: Char);

  End;

{!~ Throws away all keys except 0-9,-,+,.}
//
Unit Description UnitIndex Master Index
Procedure TEditKeyFilter.OnlyNumbers(Sender: TObject; var Key: Char);
Begin
  KeyPressOnlyNumbers(Key);
End;

{!~ Throws away all keys except 0-9}
//
Unit Description UnitIndex Master Index
Procedure TEditKeyFilter.OnlyNumbersAbsolute(Sender: TObject; var Key: Char);
Begin
  KeyPressOnlyNumbersAbsolute(Key);
End;

{!~ Throws away all keys except a-z and A-Z}
//
Unit Description UnitIndex Master Index
Procedure TEditKeyFilter.OnlyAToZ(Sender: TObject; var Key: Char);
Begin
  KeyPressOnlyAToZ(Key);
End;
{!~ Returns the larger of two numbers}
//
Unit Description UnitIndex Master Index
Function Max(Number1, Number2: Single): Single;
Begin
  If Number1 > Number2 Then
  Begin
    Result := Number1;
  End
  Else
  Begin
    Result := Number2;
  End;
End;

{!~ Returns the smaller of two numbers}
//
Unit Description UnitIndex Master Index
Function Min(Number1, Number2: Single): Single;
Begin
  If Number1 < Number2 Then
  Begin
    Result := Number1;
  End
  Else
  Begin
    Result := Number2;
  End;
End;

{!~
Returns the smaller of two integers
}
//
Unit Description UnitIndex Master Index
Function Min_I(Number1, Number2: Integer): Integer;
Begin
  If Number1 < Number2 Then
  Begin
    Result := Number1;
  End
  Else
  Begin
    Result := Number2;
  End;
End;

{!~ Converts a string to an Extended floating point number}
//
Unit Description UnitIndex Master Index
Function NumVal(InputString: String): Extended;
Begin
  Result      := 0;
  InputString := NumbersOnly(InputString);
  Try
    Result    := StrToFloat(InputString);
  Except
  End;
End;

{!~ Returns the constant pi as a real number}
//
Unit Description UnitIndex Master Index
Function Pi_Real: Real;
Begin
  Result := Pi;
End;

{!~ Returns A PseudoRandom Number Between 0 And 1}
//
Unit Description UnitIndex Master Index
Function Rand: Integer;
Begin
  Result := RandomInteger(0,1);
End;

{!~ Returns A Random Number}
//
Unit Description UnitIndex Master Index
Function RandomInteger(RandMin, RandMax: Integer): Integer;
Var
  RandRange: Integer;
  RandValue: Integer;
Begin
  If RandMax <= RandMin Then
  Begin
    Result := RandMin;
    Exit;
  End;

  Randomize;
  RandRange := RandMax-RandMin;
  RandValue := Random(RandRange);
  Result    := RandValue + RandMin;
End;

//
Unit Description UnitIndex Master Index
Function SetIntegerHiAndLo(HiValue,LoValue: Byte): Integer;
Var
  inLo     : Integer;
  inHi     : Integer;
  inResult : Integer;
Begin
  inLo     := LoValue;
  inHi     := HiValue;
  inResult := (256*inHi)+inLo;
  Result   := inResult;
End;

End.
//