unit tProbUnit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TTProbForm } TTProbForm = class(TForm) Bevel1: TBevel; CancelBtn: TButton; Panel1: TPanel; tValueEdit: TEdit; ComputeBtn: TButton; DFEdit: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; ProbEdit: TEdit; ResetBtn: TButton; ReturnBtn: TButton; procedure ComputeBtnClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure ResetBtnClick(Sender: TObject); private { private declarations } public { public declarations } end; var TProbForm: TTProbForm; implementation {$R *.lfm} uses Math, MathUnit, Utils; { TTProbForm } procedure TTProbForm.ResetBtnClick(Sender: TObject); begin tValueEdit.Text := ''; DFEdit.Text := ''; ProbEdit.Text := ''; end; procedure TTProbForm.ComputeBtnClick(Sender: TObject); var tvalue, prob: double; dfValue: Integer; begin if not MyTryStrToFloat(tValueEdit.Text, tvalue) then begin tValueEdit.SetFocus; ErrorMsg('No valid number.'); exit; end; if not TryStrToInt(DFEdit.Text, dfValue) then begin dfEdit.SetFocus; ErrorMsg('Not a valid integer (must be positive).'); exit; end; if tvalue >= 0.0 then prob := 0.5 * ProbT(tvalue, dfvalue) else if tvalue < 0.0 then prob := 1.0 - ProbT(tvalue, dfvalue) + (0.5 *ProbT(tvalue, dfvalue)) else prob := 0.50; ProbEdit.Text := Format('%6.4f', [prob]); end; procedure TTProbForm.FormActivate(Sender: TObject); var w: Integer; begin w := MaxValue([CancelBtn.Width, ResetBtn.Width, ComputeBtn.Width, ReturnBtn.Width]); CancelBtn.Constraints.MinWidth := w; ResetBtn.Constraints.MinWidth := w; ComputeBtn.Constraints.MinWidth := w; ReturnBtn.Constraints.MinWidth := w; end; end.