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 mssen 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 rckschreiben}
CanClose:=true;
end else begin
CanClose:=Hinweis1(HWindow,ST_BereichFehler,nil)=IDCancel;
end;
end;
end.
Detected encoding: UTF-8 | 0
|