Finalize version.
[marekmrva_bc.git] / FloatEditClass.pas
blob82cf3c7bea1c97be0f51a99de7d1c0bf9d8c92a2
1 unit FloatEditClass;
3 interface
5 uses
6 CustomDataEditClass, FunctionsClass, ResourcesClass,
7 Classes, Controls, Forms, Graphics, StdCtrls;
9 type
11 { TFloatEdit }
13 TFLoatEdit = class(TCustomDataEdit)
14 private
15 pChange, pCancel: TButton;
16 pCheckBox: TCheckBox;
17 pFloatEdit, pHexEdit: TEdit;
18 pFloatLabel, pHexLabel: TLabel;
19 pFP: Pointer;
20 pSize: Integer;
21 pUserChange: Boolean;
22 procedure pFloatChange(Sender: TObject); virtual;
23 procedure pHexChange(Sender: TObject); virtual;
24 procedure pOnShow(Sender: TObject); virtual;
25 public
26 constructor Create(AOwner: TComponent); override;
27 function ShowBox(Input: Pointer; Size: Integer): Boolean; overload; override;
28 function ShowBox(Input: Pointer; Size: Integer; var Check: Boolean): Boolean; reintroduce; overload; virtual;
29 end;
31 implementation
33 // ************************************************************************** //
34 // * TFLoatEdit implementation * //
35 // ************************************************************************** //
37 procedure TFLoatEdit.pFloatChange(Sender: TObject);
38 begin
39 if not pUserChange then Exit;
40 pUserChange := False;
41 CustomStrToFloat(pFloatEdit.Text, pFP, pSize);
42 pHexEdit.Text := CustomDataToHex(pFP, pSize);
43 pUserChange := True;
44 end;
46 procedure TFLoatEdit.pHexChange(Sender: TObject);
47 begin
48 if not pUserChange then Exit;
49 pUserChange := False;
50 CustomHexToData(pHexEdit.Text, pFP, pSize);
51 pFloatEdit.Text := CustomFloatToStr(pFP, pSize);
52 pUserChange := True;
53 end;
55 procedure TFLoatEdit.pOnShow(Sender: TObject);
56 begin
57 pUserChange := False;
58 pFloatEdit.Text := CustomFloatToStr(pFP, pSize);
59 pHexEdit.Text := CustomDataToHex(pFP, pSize);
60 pFloatEdit.SelectAll;
61 pFloatEdit.SetFocus;
62 pUserChange := True;
63 end;
65 constructor TFLoatEdit.Create(AOwner: TComponent);
66 begin
67 inherited Create(AOwner);
68 ClientWidth := 231;
69 ClientHeight := 105;
70 BorderStyle := bsDialog;
71 OnShow := pOnShow;
72 pChange := TButton.Create(Self);
73 pFloatEdit := TEdit.Create(Self);
74 with pFloatEdit do
75 begin
76 Parent := Self;
77 Left := 41;
78 Top := 7;
79 Width := 186;
80 Height := 20;
81 OnChange := pFloatChange;
82 end;
83 pHexEdit := TEdit.Create(Self);
84 with pHexEdit do
85 begin
86 Parent := Self;
87 Left := 41;
88 Top := 31;
89 Width := 186;
90 Height := 20;
91 OnChange := pHexChange;
92 end;
93 pCheckBox := TCheckBox.Create(Self);
94 with pCheckBox do
95 begin
96 Parent := Self;
97 Caption := FL_EDIT_MODIFY_TAG;
98 Left := 9;
99 Top := 57;
100 Width := 200;
101 Height := 19;
102 end;
103 with pChange do
104 begin
105 Parent := Self;
106 Caption := FL_EDIT_OK;
107 Left := 77;
108 Top := 81;
109 Width := 72;
110 Height := 20;
111 ModalResult := mrOk;
112 Default := True;
113 end;
114 pCancel := TButton.Create(Self);
115 with pCancel do
116 begin
117 Parent := Self;
118 Caption := FL_EDIT_CANCEL;
119 Left := 153;
120 Top := 81;
121 Width := 72;
122 Height := 20;
123 ModalResult := mrCancel;
124 Cancel := True;
125 end;
126 pFloatLabel := TLabel.Create(Self);
127 with pFloatLabel do
128 begin
129 Parent := Self;
130 Caption := FL_EDIT_FLOAT;
131 Left := 9;
132 Top := 10;
133 Width := 309;
134 Height := 21;
135 end;
136 pHexLabel := TLabel.Create(Self);
137 with pHexLabel do
138 begin
139 Parent := Self;
140 Caption := FL_EDIT_HEX;
141 Left := 9;
142 Top := 34;
143 Width := 309;
144 Height := 21;
145 end;
146 pUserChange := True;
147 end;
149 function TFLoatEdit.ShowBox(Input: Pointer; Size: Integer): Boolean;
151 lcheck: Boolean;
152 begin
153 lcheck := False;
154 Result := ShowBox(Input, Size, lcheck);
155 end;
157 function TFLoatEdit.ShowBox(Input: Pointer; Size: Integer; var Check: Boolean
158 ): Boolean;
159 begin
160 Result := False;
161 if Check then
162 begin
163 ClientHeight := 105;
164 pChange.Top := 81;
165 pCancel.Top := 81;
166 pCheckBox.Checked := True;
167 pCheckBox.Visible := True;
169 else
170 begin
171 ClientHeight := 85;
172 pChange.Top := 61;
173 pCancel.Top := 61;
174 pCheckBox.Visible := False;
175 end;
176 pFP := Input;
177 if (Size in [4, 8, 10]) then
178 begin
179 pSize := Size;
180 if (ShowModal = mrOk) then Result := True;
181 Check := pCheckBox.Checked;
182 end;
183 end;
185 end.