forked from ref-xx/basinc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEvaluateBox.pas
More file actions
152 lines (133 loc) · 4.39 KB
/
EvaluateBox.pas
File metadata and controls
152 lines (133 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
unit EvaluateBox;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TEvaluationWindow = class(TForm)
Label1: TLabel;
ComboBox1: TComboBox;
Label2: TLabel;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
EvaluationWindow: TEvaluationWindow;
implementation
{$R *.DFM}
Uses Evaluate, Watches, BASinMain, Utility;
Procedure TEvaluationWindow.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Var
ExprResult: TExpression;
Expr: AnsiString;
Index: Integer;
begin
If Key = VK_RETURN Then Begin
Button1.Caption := 'Stop';
button2.Enabled := False;
Key := 0;
Expr := ComboBox1.Text;
Memo1.Lines.Clear;
If Expr <> '' Then Begin
Index := ComboBox1.Items.IndexOf(Expr);
If Index >= 0 Then
Combobox1.Items.Delete(Index);
ComboBox1.Items.Insert(0, Expr);
ExprResult.Expression := Expr;
ExprResult.SyntaxChecked := False;
EvaluateExpr(ExprResult);
If ExprResult.ResultType = 0 Then Begin
// AnsiString result
Memo1.Lines.BeginUpdate;
Memo1.Lines.Clear;
Memo1.Lines.Add('"'+ExprResult.ResultStr+'"');
Memo1.Lines.EndUpdate;
End Else If ExprResult.ResultType = 1 Then Begin
// Numeric result
Memo1.Lines.BeginUpdate;
Memo1.Lines.Clear;
Memo1.Lines.Add(FloatToStrEx(ExprResult.ResultNum));
Memo1.Lines.EndUpdate;
End Else Begin
// Error
Memo1.Lines.BeginUpdate;
Memo1.Lines.Clear;
Memo1.Lines.Add(Copy(ExprResult.ResultStr, 3, 9999));
Memo1.Lines.EndUpdate;
End;
Combobox1.Text := Expr;
ComboBox1.SelectAll;
End;
Button2.Enabled := True;
Button1.Caption := 'Evaluate';
End;
end;
procedure TEvaluationWindow.Button1Click(Sender: TObject);
Var
Key: Word;
begin
If Evaluating Then Begin
EvalAbort := True;
Button1.Caption := 'Evaluate';
button2.Enabled := True;
End Else Begin
Key := VK_RETURN;
ComboBox1KeyDown(Nil, Key, []);
End;
end;
procedure TEvaluationWindow.Button2Click(Sender: TObject);
begin
WatchWindow.CreateWatch(True, 0, 0, 0, 0, ComboBox1.Text, '', False);
end;
procedure TEvaluationWindow.ComboBox1Change(Sender: TObject);
begin
Button1.Enabled := ComboBox1.Text <> '';
Button2.Enabled := ComboBox1.Text <> '';
end;
procedure TEvaluationWindow.Button3Click(Sender: TObject);
begin
Close;
end;
procedure TEvaluationWindow.FormShow(Sender: TObject);
begin
Combobox1.Text := '';
Button1.Caption := 'Evaluate';
Button1.Enabled := False;
Button2.Enabled := False;
Memo1.Lines.Clear;
end;
procedure TEvaluationWindow.FormCreate(Sender: TObject);
begin
ComboBox1.SetBounds(8, ComboBox1.Top, ClientWidth - 16, ComboBox1.Height);
Memo1.SetBounds(8, Memo1.Top, ClientWidth - 16, ClientHeight - 16 - Button1.Height - Memo1.Top);
Button2.SetBounds(12 + Button1.Width, ClientHeight - Button2.Height - 8, Button2.Width, Button2.Height);
Button1.SetBounds(8, Button2.Top, Button1.Width, Button1.Height);
Button3.SetBounds(ClientWidth - 8 - Button3.Width, Button2.Top, Button3.Width, Button3.Height);
Button4.SetBounds(Button3.Left - Button4.Width - 4, Button3.Top, Button4.Width, Button3.Height);
ComboBox1Change(nil);
end;
procedure TEvaluationWindow.FormClose(Sender: TObject; var Action: TCloseAction);
begin
EvalAbort := True;
end;
procedure TEvaluationWindow.Button4Click(Sender: TObject);
begin
HtmlHelp(Application.Handle, PChar(BASinDir+'\BASin.chm::/topics/window_evaluator.html'), HH_DISPLAY_TOPIC, 0);
end;
end.