MathgeomGLS

Форк
0
/
fBetween.pas 
328 строк · 7.8 Кб
1
unit fBetween;
2

3
interface
4

5
uses
6
  Winapi.Windows,
7
  Winapi.Messages,
8
  System.SysUtils,
9
  System.Variants,
10
  System.Classes,
11
  System.Math,
12
  Vcl.Clipbrd,
13
  Vcl.Graphics,
14
  Vcl.Controls,
15
  Vcl.Forms,
16
  Vcl.Dialogs,
17
  Vcl.StdCtrls,
18
  Vcl.Buttons,
19
  Vcl.ComCtrls,
20
  Vcl.Menus,
21
  Vcl.ExtCtrls,
22

23
  uParser,
24
  uGlobal;
25

26
type
27
  TBetweenForm = class(TForm)
28
    Label3: TLabel;
29
    Label4: TLabel;
30
    Label5: TLabel;
31
    Label6: TLabel;
32
    Label1: TLabel;
33
    Label2: TLabel;
34
    Label7: TLabel;
35
    Label8: TLabel;
36
    PositiveButton: TSpeedButton;
37
    NegativeButton: TSpeedButton;
38
    NegAreaLabel: TLabel;
39
    PosAreaLabel: TLabel;
40
    TotalAreaLabel: TLabel;
41
    EditIntegMin: TEdit;
42
    EditIntegMax: TEdit;
43
    EditCount: TEdit;
44
    UpDown1: TUpDown;
45
    EditOpacity: TEdit;
46
    UpDown2: TUpDown;
47
    RecalcBtn: TBitBtn;
48
    CloseBtn: TBitBtn;
49
    ColorDialog: TColorDialog;
50
    KeepRangeCheckBox: TCheckBox;
51
    PositivePanel: TPanel;
52
    NegativePanel: TPanel;
53
    SumAreaLabel: TLabel;
54
    procedure FormShow(Sender: TObject);
55
    procedure FormActivate(Sender: TObject);
56
    procedure FormKeyPress(Sender: TObject; var Key: Char);
57
    procedure FormDeactivate(Sender: TObject);
58
    procedure ParseKeyPress(Sender: TObject; var Key: Char);
59
    procedure IntKeyPress(Sender: TObject; var Key: Char);
60
    procedure EditIntegMinKeyUp(Sender: TObject; var Key: Word;
61
                                 Shift: TShiftState);
62
    procedure EditIntegMaxKeyUp(Sender: TObject; var Key: Word;
63
                                 Shift: TShiftState);
64
    procedure EditCountKeyUp(Sender: TObject; var Key: Word;
65
                              Shift: TShiftState);
66
    procedure EditOpacityKeyUp(Sender: TObject; var Key: Word;
67
                                Shift: TShiftState);
68
    procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
69
    procedure UpDown2Click(Sender: TObject; Button: TUDBtnType);
70
    procedure UpDown1MouseUp(Sender: TObject; Button: TMouseButton;
71
                              Shift: TShiftState; X, Y: Integer);
72
    procedure PositiveButtonClick(Sender: TObject);
73
    procedure NegativeButtonClick(Sender: TObject);
74
    procedure RecalcBtnClick(Sender: TObject);
75
    procedure CloseBtnClick(Sender: TObject);
76
    procedure IntegLabelClick(Sender: TObject);
77
    procedure KeepRangeCheckBoxClick(Sender: TObject);
78
  private
79
    procedure UpdateRangeData;
80
  public
81
    procedure ShowData;
82
  end;
83

84
var
85
  BetweenForm: TBetweenForm;
86

87
//================================================================
88
implementation
89
//================================================================
90

91
uses
92
  fFuncts,
93
  fPlot1D;
94

95
{$R *.dfm}
96

97
procedure TBetweenForm.FormShow(Sender: TObject);
98
begin
99
  KeepRangeCheckBox.Checked := KeepRange;
100
  ShowData;
101
end;
102

103
procedure TBetweenForm.FormActivate(Sender: TObject);
104
begin
105
  EditIntegMin.SetFocus;
106
  EditIntegMin.SelText;
107
end;
108

109
procedure TBetweenForm.FormKeyPress(Sender: TObject; var Key: Char);
110
begin
111
  case Key of
112
#13:begin
113
      RecalcBtnClick(Sender);
114
      Key := #0;
115
    end;
116
#27:begin
117
      Key := #0;
118
      Close;
119
    end;
120
  end;
121
end;
122

123
procedure TBetweenForm.FormDeactivate(Sender: TObject);
124
begin
125
  if KeepRange then UpdateRangeData;
126
end;
127

128
procedure TBetweenForm.ParseKeyPress(Sender: TObject; var Key: Char);
129
begin
130
  with Sender as TEdit do
131
  begin
132
    if not CharInSet(UpCase(Key),
133
   [' ', '!', '(', ')', '*', '+', '-', '.', ',', '/', '0'..'9',
134
    'A'..'C', 'E', 'G'..'I', 'L', 'N'..'T', 'X', '^', '`', #8]) then
135
    begin
136
      Key := #0;
137
      Exit;
138
    end;
139
    if Key = '`' then Key := '�';
140
  end;
141
end;
142

143
procedure TBetweenForm.IntKeyPress(Sender: TObject; var Key: Char);
144
begin
145
  with Sender as TEdit do
146
  if not CharInSet(Key, ['0'..'9', #8]) then Key := #0
147
end;
148

149
procedure TBetweenForm.EditIntegMinKeyUp(Sender: TObject; var Key: Word;
150
                                          Shift: TShiftState);
151
var
152
  s: string;
153
  e: byte;
154

155
begin
156
  s := ScanText(EditIntegMin.Text);
157
  IntegMin := ParseAndEvaluate(s, e);
158
//if isNAN(IntegMin) then IntegMin := 0;
159
//if e > 0 then IntegMin := 0;
160
  if isNAN(IntegMin) or isInfinite(IntegMin) or (e > 0) then IntegMin := 0;
161
end;
162

163
procedure TBetweenForm.EditIntegMaxKeyUp(Sender: TObject; var Key: Word;
164
                                          Shift: TShiftState);
165
var
166
  s: string;
167
  e: byte;
168

169
begin
170
  s := ScanText(EditIntegMax.Text);
171
  IntegMax := ParseAndEvaluate(s, e);
172
//if isNAN(IntegMax) then IntegMax := 0;
173
//if e > 0 then IntegMax := 0;
174
  if isNAN(IntegMax) or isInfinite(IntegMax) or (e > 0) then IntegMax := 0;
175
end;
176

177
procedure TBetweenForm.EditCountKeyUp(Sender: TObject; var Key: Word;
178
                                       Shift: TShiftState);
179
begin
180
  with GraphData do
181
  begin
182
    try
183
      IntegCount := StrToInt(EditCount.Text);
184
      if IntegCount = 0 then IntegCount := IntegCountPos;
185
    except
186
      IntegCount := IntegCountPos;
187
    end;
188
    if IntegCount > IntegCountMax then IntegCount := IntegCountMax;
189
  end;
190
  Altered := true;
191
end;
192

193
procedure TBetweenForm.EditOpacityKeyUp(Sender: TObject; var Key: Word;
194
                                         Shift: TShiftState);
195
var
196
  n: integer;
197

198
begin
199
  try
200
    n := StrToInt(EditOpacity.Text);
201
  except
202
    n := 1;
203
  end;
204
  GraphData.AreaAlpha := n/100;
205
  Altered := true;
206
  MainForm.GLViewer.Invalidate;
207
end;
208

209
procedure TBetweenForm.UpDown1Click(Sender: TObject; Button: TUDBtnType);
210
var
211
  k: word;
212

213
begin
214
  k := 0;
215
  EditCountKeyUp(Sender, k, []);
216
end;
217

218
procedure TBetweenForm.UpDown2Click(Sender: TObject; Button: TUDBtnType);
219
var
220
  k: word;
221

222
begin
223
  k := 0;
224
  EditOpacityKeyUp(Sender, k, []);
225
end;
226

227
procedure TBetweenForm.UpDown1MouseUp(Sender: TObject; Button: TMouseButton;
228
                                      Shift: TShiftState; X, Y: Integer);
229
begin
230
  RecalcBtnClick(Sender);
231
end;
232

233
procedure TBetweenForm.PositiveButtonClick(Sender: TObject);
234
begin
235
  ColorDialog.Color := GraphData.PosAreaColor;
236
  if ColorDialog.Execute then
237
  begin
238
    GraphData.PosAreaColor := ColorDialog.Color;
239
    PositivePanel.Color := GraphData.PosAreaColor;
240
    MainForm.GLViewer.Invalidate;
241
    Altered := TRUE
242
  end;
243
end;
244

245
procedure TBetweenForm.NegativeButtonClick(Sender: TObject);
246
begin
247
  ColorDialog.Color := GraphData.NegAreaColor;
248
  if ColorDialog.Execute then
249
  begin
250
    GraphData.NegAreaColor := ColorDialog.Color;
251
    NegativePanel.Color := GraphData.NegAreaColor;
252
    MainForm.GLViewer.Invalidate;
253
    Altered := TRUE
254
  end;
255
end;
256

257
procedure TBetweenForm.RecalcBtnClick(Sender: TObject);
258
begin
259
  MainForm.GLViewer.Invalidate;
260
end;
261

262
procedure TBetweenForm.IntegLabelClick(Sender: TObject);
263
begin
264
  Clipboard.Clear;
265
  with Sender as TLabel do
266
  Clipboard.AsText := Copy(Caption,  pos('=', Caption)+2, Length(Caption));
267
end;
268

269
procedure TBetweenForm.KeepRangeCheckBoxClick(Sender: TObject);
270
begin
271
  KeepRange := KeepRangeCheckBox.Checked;
272
end;
273

274
procedure TBetweenForm.CloseBtnClick(Sender: TObject);
275
begin
276
  Close;
277
end;
278

279
procedure TBetweenForm.UpdateRangeData;
280
begin
281
  KeptMin := IntegMin;
282
  KeptMax := IntegMax;
283
end;
284

285
procedure TBetweenForm.ShowData;
286
begin
287
  with GraphData, PlotData do
288
  begin
289
    EditCount.Text := IntToStr(IntegCount);
290
    UpDown2.Position := round(AreaAlpha*100);
291
    if TextStr = '' then Caption := '' else Caption := 'y = '+TextStr;
292

293
    KeepRangeCheckBox.Checked := KeepRange;
294
    PositivePanel.Color := PosAreaColor;
295
    NegativePanel.Color := NegAreaColor;
296

297
    if IsSegment then
298
    begin
299
      if KeepRange then
300
      begin
301
        IntegMin := KeptMin;
302
        IntegMax := KeptMax;
303
      end
304
      else
305
      begin
306
        IntegMin := SegMin;
307
        IntegMax := SegMax;
308
      end;
309
    end
310
    else
311
    begin
312
      if KeepRange then
313
      begin
314
        IntegMin := KeptMin;
315
        IntegMax := KeptMax;
316
      end
317
      else
318
      begin
319
        IntegMin := xMin;
320
        IntegMax := xMax;
321
      end;
322
    end;
323
  end;
324
  EditIntegMin.Text := FloatToStrF(IntegMin, ffGeneral, 13, 4);
325
  EditIntegMax.Text := FloatToStrF(IntegMax, ffGeneral, 13, 4);
326
end;
327

328
end.
329

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.