-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFMain.pas
More file actions
261 lines (231 loc) · 6.51 KB
/
FMain.pas
File metadata and controls
261 lines (231 loc) · 6.51 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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
unit FMain;
interface
uses
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UHashTable, UInfo, ActnList, Menus, Grids, ImgList, ComCtrls,
ToolWin, UHashTableGUI, UHelpForm;
type
{ TFormMain }
TFormMain = class(TForm)
Menu: TMainMenu;
NFind: TMenuItem;
NFile: TMenuItem;
NEdit: TMenuItem;
NNew: TMenuItem;
NOpen: TMenuItem;
NSave: TMenuItem;
NSaveAs: TMenuItem;
NClose: TMenuItem;
NSeparator: TMenuItem;
NExit: TMenuItem;
NAdd: TMenuItem;
NDelete: TMenuItem;
NClear: TMenuItem;
actList: TActionList;
actNew: TAction;
actOpen: TAction;
actSave: TAction;
actSaveAs: TAction;
actClose: TAction;
actExit: TAction;
actAdd: TAction;
actDelete: TAction;
actClear: TAction;
actFind: TAction;
SGMain: TStringGrid;
imgList: TImageList;
tlbMain: TToolBar;
btnOpen: TToolButton;
btnNew: TToolButton;
btnSave: TToolButton;
btnClose: TToolButton;
btnExit: TToolButton;
btn6: TToolButton;
btnAdd: TToolButton;
btnDelete: TToolButton;
btnClear: TToolButton;
btnFind: TToolButton;
dlgOpen: TOpenDialog;
dlgSave: TSaveDialog;
procedure actFindExecute(Sender: TObject);
procedure actNewExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure actOpenExecute(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure actSaveExecute(Sender: TObject);
procedure actSaveAsExecute(Sender: TObject);
procedure actCloseExecute(Sender: TObject);
procedure actExitExecute(Sender: TObject);
procedure actAddExecute(Sender: TObject);
procedure actDeleteExecute(Sender: TObject);
procedure actClearExecute(Sender: TObject);
procedure actRunExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
procedure MyIdle(sender: TObject; var Done: Boolean);
public
{ Public declarations }
HashTable: THashTableGUI;
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
procedure TFormMain.actNewExecute(Sender: TObject);
begin
if HashTable <> nil then
actClose.Execute;
if HashTable = nil then
HashTable := THashTableGUI.Create(SGMain, 5, 6, 10);
end;
procedure TFormMain.actFindExecute(Sender: TObject);
var
number: string;
SearchedInfo: TInfo;
begin
if Dialogs.InputQuery('Ïîèñê ÷åëîâåêà ïî íîìåðó', 'Ââåäèòå íîìåð', number)
then
if HashTable.Find(number, SearchedInfo) then
with TfrmHelp.Create(nil) do
try
SetParams(SearchedInfo, true);
ShowModal;
finally
Free;
end
else
ShowMessage('Çàïèñü íå íàéäåíà');
end;
procedure TFormMain.MyIdle(sender: TObject; var Done: Boolean);
var
HashTableExists, RecordsPresent: Boolean;
begin
HashTableExists := HashTable <> nil;
RecordsPresent := HashTableExists and not HashTable.IsEmpty;
SGMain.Visible := HashTableExists;
actSave.Enabled := HashTableExists;
actSaveAs.Enabled := HashTableExists;
actClose.Enabled := HashTableExists;
actAdd.Enabled := HashTableExists;
actDelete.Enabled := RecordsPresent;
actClear.Enabled := RecordsPresent;
actFind.Enabled := RecordsPresent;
end;
procedure TFormMain.FormCreate(Sender: TObject);
begin
HashTable := nil;
Application.OnIdle := MyIdle;
dlgOpen.InitialDir := ExtractFilePath(Application.ExeName);
dlgSave.InitialDir := ExtractFilePath(Application.ExeName);
end;
procedure TFormMain.actOpenExecute(Sender: TObject);
begin
if dlgOpen.Execute then
begin
if HashTable <> nil then
actClose.Execute;
if HashTable = nil then
begin
HashTable := THashTableGUI.Create(SGMain, 5, 6, 10);
if not HashTable.Load(dlgOpen.FileName, dlgOpen.filterIndex = 1) then
ShowMessage('Îøèáêà ïðè çàãðóçêå ôàéëà');
end;
end;
end;
procedure TFormMain.actSaveExecute(Sender: TObject);
begin
if HashTable.FileName = '' then
actSaveAs.Execute
else
HashTable.Save(HashTable.FileName, HashTable.IsTxt)
end;
procedure TFormMain.actSaveAsExecute(Sender: TObject);
begin
dlgSave.FileName := HashTable.FileName;
if dlgSave.Execute then
HashTable.Save(dlgSave.FileName, dlgSave.FilterIndex = 1);
end;
procedure TFormMain.actCloseExecute(Sender: TObject);
var
CanClose: Boolean;
begin
CanClose := true;
if (HashTable <> nil) and HashTable.Modified then
case MessageDlg('Ñîõðàíèòü èçìåíåíèÿ?', mtConfirmation, [mbYes, mbNo,
mbCancel], 0) of
mrCancel: CanClose := False;
mrYes:
begin
actSave.Execute;
CanClose := not HashTable.Modified;
end;
end;
if CanClose then
FreeAndNil(HashTable);
end;
procedure TFormMain.actExitExecute(Sender: TObject);
begin
Close;
end;
procedure TFormMain.actAddExecute(Sender: TObject);
begin
with TfrmHelp.Create(nil) do
try
SetParams(info, false);
if ShowModal = mrOk then
HashTable.Add(Info);
finally
Free;
end;
end;
procedure TFormMain.actDeleteExecute(Sender: TObject);
var
number: string;
begin
if Dialogs.InputQuery('Óäàëåíèå çàïèñè', 'Ââåäèòå íîìåð òåëåôîíà', number) then
if HashTable.Delete(number) then
ShowMessage('Çàïèñü óäàëåíà')
else
ShowMessage('Çàïèñü íå íàéäåíà')
end;
procedure TFormMain.actClearExecute(Sender: TObject);
begin
if MessageDlg('Âû äåéñòâèòåëüíî õîòèòå î÷èñòèòü òàáëèöó?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
HashTable.Clear;
end;
procedure TFormMain.actRunExecute(Sender: TObject);
var
number: string;
SearchedInfo: TInfo;
begin
if Dialogs.InputQuery('Ïîèñê ÷åëîâåêà ïî íîìåðó', 'Ââåäèòå íîìåð', number)
then
if HashTable.Find(number, SearchedInfo) then
with TfrmHelp.Create(nil) do
try
SetParams(SearchedInfo, true);
ShowModal;
finally
Free;
end
else
ShowMessage('Çàïèñü íå íàéäåíà');
end;
procedure TFormMain.FormResize(Sender: TObject);
begin
with SGMain do
begin
ColWidths[0] := Width div 13;
ColWidths[1] := ColWidths[0] + Width div 7;
ColWidths[2] := ColWidths[1];
ColWidths[3] := ColWidths[0] * 6 + width div 58;
end;
end;
procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if HashTable <> nil then
actClose.Execute;
CanClose := HashTable = nil;
end;
end.