Source file: /~heha/messtech/motor.zip/SRC/BEREICH.PAS

unit Bereich;
{Bereich-Einstell-Dialogfenster}
interface

uses WinProcs,WinTypes,OWindows,ODialogs,
 smsh,smsp;

const
 ID_BereichVon=101;
 ID_BereichBis=102;
 ID_BereichIn=103;
 ID_RbWeite=104;
 ID_RbSchritte=105;
 ID_RbTaste=106;
 ID_RbWarte=107;
 ID_Millisek=108;
 ID_Hilfe=3;

type
PBereichDlg=^TBereichDlg;
TBereichDlg=object(TDialog)
 A,E,X: TReal;	{Zwischenspeicher Anfang, Ende, Schrittweite}
 T: Word;	{Zwischenspeicher Zeit}
 procedure SetupWindow; virtual;
 procedure IDHilfe(var Msg:TMessage); virtual ID_First+ID_Hilfe;
 procedure IDRbWeite(var Msg:TMessage); virtual ID_First+ID_RbWeite;
 procedure IDRbSchritte(var Msg:TMessage); virtual ID_First+ID_RbSchritte;
 procedure IDRbTaste(var Msg:TMessage); virtual ID_First+ID_RbTaste;
 procedure IDRbWarte(var Msg:TMessage); virtual ID_First+ID_RbWarte;
 function GetX:boolean;
 function GetT:boolean;
 function GetAEXT:Boolean;
 procedure SetAEXT;
 function CanClose:Boolean; virtual;
end;

implementation

procedure TBereichDlg.SetupWindow;
 begin
  inherited SetupWindow;
  A:=BereichVon;
  E:=BereichBis;
  X:=BereichSchritt;
  T:=BereichWarte;
  SetAEXT;
  CheckRadioButton(HWindow,ID_RbWeite,ID_RbSchritte,
   ID_RbWeite+Word(BereichSchrittCheck));
  CheckRadioButton(HWindow,ID_RbTaste,ID_RbWarte,
   ID_RbTaste+Word(BereichWarteCheck));
  EnableWindow(GetDlgItem(HWindow,ID_Millisek),BereichWarteCheck);
 end;

procedure TBereichDlg.IDHilfe(var Msg:TMessage);
 var
  S: TS31;
 begin
  WinHelp(HWindow,HelpFileName,HELP_Context,ID_Bereich);
 end;

procedure TBereichDlg.IDRbWeite(var Msg:TMessage);
 begin
  if Msg.lParamHi=BN_Clicked then begin
   GetAEXT;
   BereichSchrittCheck:=false;
   SetAEXT;
  end;
 end;

procedure TBereichDlg.IDRbSchritte(var Msg:TMessage);
 begin
  if Msg.lParamHi=BN_Clicked then begin
   GetAEXT;
   BereichSchrittCheck:=true;
   SetAEXT;
  end;
 end;

procedure TBereichDlg.IDRbTaste(var Msg:TMessage);
 begin
  if Msg.lParamHi=BN_Clicked then begin
   BereichWarteCheck:=false;
   EnableWindow(GetDlgItem(HWindow,ID_Millisek),false);
  end;
 end;

procedure TBereichDlg.IDRbWarte(var Msg:TMessage);
 begin
  if Msg.lParamHi=BN_Clicked then begin
   BereichWarteCheck:=true;
   EnableWindow(GetDlgItem(HWindow,ID_Millisek),true);
   SetFocus(GetDlgItem(HWindow,ID_Millisek));
  end;
 end;

{Schrittweite ermitteln; A und E müssen eingelesen sein!}
function TBereichDlg.GetX:boolean;
 begin
  GetX:=false;
  if GetReal(HWindow,ID_BereichIn,X) then begin
   if BereichSchrittCheck then begin
    if X>0 then begin		{Nur positive Schritt-Zahlen}
     X:=(E-A)/X;
     GetX:=true;
    end;
   end else begin
    if (E-A)*X<0 then X:=-X;
    if (E-A)*X>0 then begin
     GetX:=true;		{okay wenn gleiche Richtung und wenn <>0}
    end;
   end;
  end;
 end;

function TBereichDlg.GetT:boolean;
 begin
  T:=GetDlgItemInt(HWindow,ID_Millisek,nil,false);
  GetT:= not BereichWarteCheck or (T<>0);
 end;

function TBereichDlg.GetAEXT:Boolean;
 begin
  GetAEXT:=GetReal(HWindow, ID_BereichVon,A)
       and GetReal(HWindow, ID_BereichBis,E)
       and GetX
       and GetT;
 end;

procedure TBereichDlg.SetAEXT;
 var
  S: TS31;
 begin
  Real2S(A,3,S);
  SetDlgItemText(HWindow,ID_BereichVon,S);
  Real2S(E,3,S);
  SetDlgItemText(HWindow,ID_BereichBis,S);
  if BereichSchrittCheck then
   Real2S((E-A)/X,0,S)
  else
   Real2S(X,3,S);
  SetDlgItemText(HWindow,ID_BereichIn,S);
  SetDlgItemInt(HWindow,ID_Millisek,T,false);
 end;

function TBereichDlg.CanClose:Boolean;
 begin
  if GetAEXT then begin
   BereichVon:=A;
   BereichBis:=E;
   BereichSchritt:=X;
   BereichWarte:=T;	{Alles rückschreiben}
   CanClose:=true;
  end else begin
   CanClose:=Hinweis1(HWindow,ST_BereichFehler,nil)=IDCancel;
  end;
 end;

end.
Detected encoding: OEM (CP437)1
Wrong umlauts? - Assume file is ANSI (CP1252) encoded