UNIT Unit12_ValueEdit; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CrossEdit, Math; TYPE TForm12 = Class(TForm) group: TGroupBox; btn_ok: TButton; btn_cancel: TButton; lbl_current: TLabel; edit_current: TEdit; lbl_new: TLabel; lbl_offset: TLabel; lbl_datatype: TLabel; edit_offset: TEdit; edit_datatype: TEdit; edit_new: TCrossEdit; PROCEDURE btn_cancelClick(Sender: TObject); PROCEDURE btn_okClick(Sender: TObject); PROCEDURE MakeVarInput(objectname:String; offset:LongWord; datatype:Word; current:String; caller:TObject); PRIVATE PUBLIC END; VAR Form12: TForm12; IMPLEMENTATION USES Unit8_binedit, Unit13_rawedit,Unit9_data_structures, Unit1_main; {$R *.dfm} VAR caller_win_dat:TForm8; caller_win_raw:TForm13; _datatype:Word; _offset:LongWord; PROCEDURE TForm12.MakeVarInput(objectname:String; offset:LongWord; datatype:Word; current:String; caller:TObject); BEGIN caller_win_dat:=NIL; caller_win_raw:=NIL; IF Pos('rawedit',TComponent(caller).Name)>0 THEN caller_win_raw:=TForm13(caller) ELSE caller_win_dat:=TForm8(caller); Form1.Enabled:=False; Self.Visible:=True; group.Caption:='Edit value'; _datatype:=datatype; _offset:=offset; IF Length(objectname)>0 THEN group.Caption:=group.Caption+' for '+objectname; edit_offset.Text:='0x'+IntToHex(offset,8); edit_datatype.Text:=GetDataType(datatype); edit_current.Text:=current; edit_new.EditType:=etString; edit_new.Text:=''; edit_new.LimitCheck:=False; edit_new.MaxLength:=0; edit_new.Max:=0; edit_new.BorderStyle:=bsSingle; Form12.Width:=300; CASE datatype OF 1..4: BEGIN edit_new.EditType:=etUnsignedInt; edit_new.LimitCheck:=True; edit_new.Max:=Int(Power(256,datatype))-1; END; 5..8: BEGIN edit_new.MaxLength:=2*(datatype-4); edit_new.EditType:=etHex; END; 9: BEGIN edit_new.EditType:=etFloat; edit_new.LimitCheck:=False; END; 10: BEGIN edit_new.EditType:=etBinary; edit_new.LimitCheck:=False; edit_new.MaxLength:=8; END; 13..16: BEGIN Exit; edit_new.EditType:=etInteger; edit_new.LimitCheck:=True; edit_new.Max:=Int((Power(256,datatype-13)) / 2)-1; edit_new.Min:=1-Int((Power(256,datatype-13)) / 2)-1; END; 10000..65535: BEGIN edit_new.EditType:=etString; edit_new.LimitCheck:=False; edit_new.MaxLength:=datatype-10000; Form12.Width:=700; END; END; edit_new.SetFocus; edit_new.SelectAll; END; PROCEDURE TForm12.btn_okClick(Sender: TObject); BEGIN IF NOT edit_new.NoValidValue THEN BEGIN Form1.Enabled:=True; Self.Visible:=False; IF caller_win_dat=NIL THEN caller_win_raw.SetNewValue(_datatype,_offset,edit_new.Text) ELSE caller_win_dat.SetNewValue(_datatype,_offset,edit_new.Text); END; END; PROCEDURE TForm12.btn_cancelClick(Sender: TObject); BEGIN Form1.Enabled:=True; Self.Visible:=False; END; END.