root/trunk/ASoundEditorForm.pas

Revision 4, 20.3 kB (checked in by sagrer, 1 year ago)

Исходник помещен в trunk

  • Property svnmailer:content-charset set to cp1251
Line 
1 ///////////////////////////////////////////////////////////
2 //                        EiEdit                         //
3 //      Ðåäàêòîð ÷àñòè ðåñóðñîâ Ïðîêëÿòûõ Çåìåëü         //
4 //             Copyright (C) 2002 Gipat Group            //
5 //              Ðàñïðîñòðàíÿåòñÿ íà óñëîâèÿõ             //
6 //    Gipat Group's opened EI-editor-utility license     //
7 //                      âåðñèè 1.0                       //
8 //                                                       //
9 //                  www.gipatgroup.org                   //
10 ///////////////////////////////////////////////////////////
11
12 //Ê ðàáîòå íàä äàííûì ôàéëîì ïðèëîæèëè ðóêè, íîãè.... êîðî÷å àôôòàðû:
13 // 1) Sagrer (sagrer@yandex.ru)
14
15 ////////////////////////////////////////////////////////////////////////
16
17 unit ASoundEditorForm;
18
19 interface
20
21 uses
22   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
23   Dialogs, Grids, ValEdit, StdCtrls, KOLFileInString, KOLTextFileInString,
24   Buttons;
25
26 type
27   TASoundEditorF = class(TForm)
28     Label1: TLabel;
29     Label2: TLabel;
30     MaskiBox: TComboBox;
31     FilesBox: TComboBox;
32     SaveBut: TButton;
33     OkBut: TButton;
34     CreateBut: TButton;
35     DeleteBut: TButton;
36     ValuesEd: TValueListEditor;
37     ZashablonitBut: TButton;
38     CacelBut: TButton;
39     UpBut: TBitBtn;
40     DownBut: TBitBtn;
41     ToNumerBut: TBitBtn;
42     procedure OkButClick(Sender: TObject);
43     procedure FormClose(Sender: TObject; var Action: TCloseAction);
44     procedure FormShow(Sender: TObject);
45     procedure MaskiBoxClick(Sender: TObject);
46     procedure FilesBoxClick(Sender: TObject);
47     procedure LoadMZ(Sender: TObject);
48     function SaveMZ(Sender: TObject) : boolean;
49     procedure SaveButClick(Sender: TObject);
50     procedure CreateButClick(Sender: TObject);
51     procedure DeleteButClick(Sender: TObject);
52     procedure CacelButClick(Sender: TObject);
53     procedure ZashablonitButClick(Sender: TObject);
54     procedure UpButClick(Sender: TObject);
55     procedure DownButClick(Sender: TObject);
56     procedure ToNumerButClick(Sender: TObject);
57   private
58     { Private declarations }
59     Function MakeShablon (Sender : TObject) : byte;
60     Function CheckCode(Sender : TObject; const Code : string) : boolean;
61     Procedure MoveElement (Sender : TObject; MoveTo : integer);
62     procedure RefreshBatoni(Sender: TObject);
63   public
64     { Public declarations }
65     InputStr : string;
66     OutputStr : string;
67     ModRes : byte;
68   end;
69
70 var
71   ASoundEditorF: TASoundEditorF;
72
73 implementation
74 uses initer, MySys, ShablonimForm, QskFnForm, CheckShablForm;
75
76 const
77 ArrCapac = 1000;
78
79 type
80   ASoundRec = record
81     StrFile : string;
82     IntUnknown1 : integer;
83     StrText : string;
84     StrCode : string;
85   end;
86
87 var
88   TheStr : String;
89   ASoundRecs : array[1..ArrCapac] of ASoundRec;
90   NumRecs, RecNum : integer;
91   MZLoaded : boolean;
92
93 {$R *.dfm}
94
95 Procedure LoadASoundStr(const Str : string);
96 var
97   I : integer;
98   TempStr, BufSt, BufSt2 : string;
99 begin
100   //Çàáðàòü èíôó èç ñòðîêè â ìàññèâ.
101   NumRecs := 0;   //Êîëè÷åñòâî ìèêðîçàïèñåé
102   TempStr := Str;  //Ïðèñâîèòü çíà÷åíèå ðàáî÷åé ñòðîêå
103   I := 0;  //Ñ÷åò÷èê
104   //È ïî÷èñòèòü ñïèñêè...
105   ASoundEditorF.MaskiBox.Items.Clear;
106   ASoundEditorF.FilesBox.Items.Clear;
107
108   If Length(TempStr) <> 0 then begin
109     //Åñëè â ñòðîêå ÷åòî åñòü...
110     repeat
111       I := I+1;
112       BufSt := OtkusitPodPole(@TempStr);
113       //Ïîäïîëå ïîëó÷åíî. Èç íåãî òåïåðü èçâëå÷ü âñå íóæíîå...
114
115       //TEXT. File.
116       BufSt2 := OtkusitPodPole(@BufSt);
117       ASoundRecs[I].StrFile := PzDbStrToStr(BufSt2);
118
119       //UnsLong. Unknown1.
120       BufSt2 := OtkusitPodPole(@BufSt);
121       ASoundRecs[I].IntUnknown1 := _4byteStrToUnsLong(BufSt2);
122
123       //TEXT. Text.
124       BufSt2 := OtkusitPodPole(@BufSt);
125       ASoundRecs[I].StrText := PzDbStrToStr(BufSt2);
126
127       //TEXT. Code.
128       BufSt2 := OtkusitPodPole(@BufSt);
129       ASoundRecs[I].StrCode := PzDbStrToStr(BufSt2);
130
131       NumRecs := I; //Òèïà â ìàññèâ äîáàâëåí ýëåìåíò.
132
133     until Length(TempStr) = 0;
134
135     //Çàïîëíèòü ñïèñêè...
136     For I := 1 to NumRecs do begin
137       ASoundEditorF.MaskiBox.Items.Add(ASoundRecs[I].StrCode);
138       ASoundEditorF.FilesBox.Items.Add(IntToStr(I)+'   '+ASoundRecs[I].StrText);
139     end;
140
141   end;
142
143 end;
144
145 Function SaveASoundStr : string;
146 var
147   I : integer;
148   TempStr, BufSt, BufSt2, BufSt3 : string;
149 begin
150   //Ïîëîæèòü èíôó èç ìàññèâà â ñòðîêó.
151  
152   BufSt := '';
153
154   If NumRecs <> 0 then begin
155     //Åñëè ìàññèâ íå ïóñòîé...
156     For I := 1 to NumRecs do begin
157       BufSt2 := '';
158
159       //TEXT. File.
160       BufSt3 := StrToPzDbStr2(ASoundRecs[I].StrFile);
161       BufSt2 := AddPodPole(BufSt2,BufSt3,1);
162
163       //UnsLong. Unknown1.
164       BufSt3 := UnsLongTo4byteStr(ASoundRecs[I].IntUnknown1);
165       BufSt2 := AddPodPole(BufSt2,BufSt3,2);
166
167       //TEXT. Text.
168       BufSt3 := StrToPzDbStr2(ASoundRecs[I].StrText);
169       BufSt2 := AddPodPole(BufSt2,BufSt3,3);
170
171       //TEXT. Code.
172       BufSt3 := StrToPzDbStr2(ASoundRecs[I].StrCode);
173       BufSt2 := AddPodPole(BufSt2,BufSt3,4);
174
175       //È äîáàâèòü òî ÷òî ïîëó÷èëîñü â îñíîâíóþ ñòðîêó.
176       BufSt := AddPodPole(BufSt,BufSt2,1);
177     end;
178   end;
179   Result := BufSt;
180 end;
181
182 procedure TASoundEditorF.OkButClick(Sender: TObject);
183 var
184   AllOk : boolean;
185 begin
186   AllOk := true;
187
188   //Çàñàâèòü òåêóùèé ýëåìåíò...
189   If MZLoaded = true then begin
190     //Åñëè óæå áûë îòêðûò ôàéë, òî ñåéâ åìó...
191     If SaveMZ(Sender) = false then begin
192       AllOk := false;
193       If MessageBox(Handle,'Îòêðûòûé ñåé÷àñ ýëåìåíò íå áûë ñîõðàíåí èç-çà îøèáêè. Âñåðàâíî ïðîäîëæèòü?','ÂÍÈÌÀÍÈÅ!!!',MB_ICONWARNING or MB_YESNO) = ID_YES then begin
194         //Íó òèïà þçâåðþ âñå ïîôèã...
195         AllOk := true;
196       end;
197     end;
198   end;
199
200   If AllOk = true then begin
201     Close;
202     ModRes := 1;
203   end; 
204 end;
205
206 procedure TASoundEditorF.FormClose(Sender: TObject;
207   var Action: TCloseAction);
208 begin
209   //Êîíåö ðàáîòû ôîðìû. Âåðíóòü ðåçóëüòàò.
210   {If MZLoaded = true then begin
211     //Åñëè óæå áûë îòêðûò ôàéë, òî ñåéâ åìó...
212     SaveMZ(Sender);
213   end;}
214
215   If ModRes = 1 then begin
216     //Âåðíóòü ðåçóëüòàò
217     OutputStr := SaveASoundStr;
218   end
219   else begin
220     //Çàêàíñåëèëè, âåðíóòü ôèãó.
221     OutputStr := 'NIL';
222   end;
223 end;
224
225 procedure TASoundEditorF.FormShow(Sender: TObject);
226 begin
227   //Íà÷àëî ðàáîòû.  Ïî÷èñòèòü ôîðìó...
228   ModRes := 0;
229   MaskiBox.Clear;
230   FilesBox.Clear;
231   ValuesEd.Cells[1,1] := '';
232   ValuesEd.Cells[1,2] := '';
233   ValuesEd.Cells[1,3] := '';
234   ValuesEd.Cells[1,4] := '';
235
236   //"Çàãðóçèòü" ñòðîêó...
237   LoadASoundStr(InputStr);
238
239   MZLoaded := false;    //Ýòî ïðî òî, ÷òî åùå ìèêðîçàïèñü íå îòêðûòà...
240   //Òåïåðü åñëè åñòü õîòü 1 ýëåìåíò, òî âûáðàòü ïåðâûé...
241   If NumRecs > 0 then begin
242     MaskiBox.ItemIndex := 0;
243     MaskiBoxClick(Sender);
244   end;
245
246   //È ðåôðåøíóòü êíîïêè.
247   RefreshBatoni(Sender); 
248 end;
249
250 procedure TASoundEditorF.MaskiBoxClick(Sender: TObject);
251 begin
252   {If MZLoaded = true then begin
253     //Åñëè óæå áûë îòêðûò ôàéë, òî ñåéâ åìó...
254     SaveMZ(Sender);
255   end;}
256   //Òèïà ñâÿçêà ñïèñêîâ
257   RecNum := MaskiBox.ItemIndex+1;
258   FilesBox.ItemIndex := MaskiBox.ItemIndex;
259   //è "çàãðóçêà" èíôû
260   LoadMZ(Sender);
261
262   //È ðåôðåøíóòü êíîïêè.
263   RefreshBatoni(Sender);
264 end;
265
266 procedure TASoundEditorF.FilesBoxClick(Sender: TObject);
267 begin
268   {If MZLoaded = true then begin
269     //Åñëè óæå áûë îòêðûò ôàéë, òî ñåéâ åìó...
270     SaveMZ(Sender);
271   end;}
272   //Òèïà ñâÿçêà ñïèñêîâ
273   RecNum := FilesBox.ItemIndex+1;
274   MaskiBox.ItemIndex := FilesBox.ItemIndex;
275   //è "çàãðóçêà" èíôû
276   LoadMZ(Sender);
277
278   //È ðåôðåøíóòü êíîïêè.
279   RefreshBatoni(Sender);
280 end;
281
282 procedure TASoundEditorF.LoadMZ(Sender: TObject);
283 begin
284   //Òèïà âûâîäà èíôû èç ìàññèâà â ôîðìó.
285   ValuesEd.Cells[1,1] := ASoundRecs[RecNum].StrFile;
286   ValuesEd.Cells[1,2] := IntToStr(ASoundRecs[RecNum].IntUnknown1);
287   ValuesEd.Cells[1,3] := ASoundRecs[RecNum].StrText;
288   ValuesEd.Cells[1,4] := ASoundRecs[RecNum].StrCode;
289
290   MZLoaded := true;  //Ìèêðîçàïèñü îòêðûòà.
291 end;
292
293 function TASoundEditorF.SaveMZ(Sender: TObject) : boolean;
294 begin
295   //Òèïà ñàâêà èíôû â ìàññèâ.
296   //Ïðîâåðèòü â íà÷àëå...
297   if CheckStrInt(ValuesEd.Cells[1,2]) = false then begin
298     ValuesEd.Selection := SelGridRect(1,2);
299     Beep;
300     MessageBox(Handle,'Âûäåëåííîå ïîëå èìååò íåïðàâèëüíûé ôîðìàò.','Îøèáêà',MB_ICONERROR or MB_OK);
301     Result := false;
302   end
303   else begin
304     ASoundRecs[RecNum].StrFile := ValuesEd.Cells[1,1];
305     ASoundRecs[RecNum].IntUnknown1 := StrToInt(ValuesEd.Cells[1,2]);
306     ASoundRecs[RecNum].StrText := ValuesEd.Cells[1,3];
307     ASoundRecs[RecNum].StrCode := ValuesEd.Cells[1,4];
308     result := true;
309   end; 
310 end;
311
312 procedure TASoundEditorF.SaveButClick(Sender: TObject);
313 begin
314   If SaveMZ(Sender) = true then begin
315     //Åñëè âñå íîðìàëüíî çàñàâèëîñü, òî
316     //ïîìåíÿòü â ñïèñêàõ òåêñò è êîä...
317     MaskiBox.Items.Strings[RecNum-1] := ValuesEd.Cells[1,4];
318     FilesBox.Items.Strings[RecNum-1] := IntToStr(RecNum)+'   '+ASoundRecs[RecNum].StrText;
319     //Òàê êàê ñïèñêè ñáèëèñü, çàíîâî âûñòàâèòü èõ.
320     MaskiBox.ItemIndex := RecNum-1;
321     FilesBox.ItemIndex := RecNum-1;
322   end;
323 end;
324
325 procedure TASoundEditorF.CreateButClick(Sender: TObject);
326 var
327   AllOk, ind1, ind2 : boolean;
328   Code, TempStr : string;
329   TextFil1 : TTextFileInString;
330
331 begin
332   AllOk := true;
333   {If MZLoaded = true then begin
334     //Åñëè óæå áûë îòêðûò ôàéë, òî ñåéâ åìó...
335     If SaveMZ(Sender) = false then begin
336       AllOk := false;
337       If MessageBox(Handle,'Îòêðûòûé ñåé÷àñ ýëåìåíò íå áûë ñîõðàíåí èç-çà îøèáêè. Âñåðàâíî ñîçäàòü íîâûé ýëåìåíò?','ÂÍÈÌÀÍÈÅ!!!',MB_ICONWARNING or MB_YESNO) = ID_YES then begin
338         //Íó òèïà þçâåðþ âñå ïîôèã...
339         AllOk := true;
340       end;
341     end;;
342   end;}
343
344   If AllOk = true then begin
345     //Ñîáñíî òî, ÷òî äîëæíà äåëàòü ôóíêà - ñîçäàâàòü íîâûé ýëåìåíò.
346     //Çàïðîñ Code, åñëè ÎÊ òî ïðîäîëæèòü...
347     ind1 := false;
348     repeat
349       AskFnForm.QuestionDial := 'Ââåäèòå çíà÷åíèå ïîëÿ Code äëÿ íîâîé çàïèñè:';
350       AskFnForm.ShowModal;
351       if AskFnForm.ModalResult = MrOk then begin
352         Code := AskFnForm.AnswerDial;
353         if CheckCode(Sender,Code) = true then begin
354           //Åñëè ìàñêà óíèêàëüíà.
355
356           //Òåïåðü íàäî âûáðàòü øàáëîí.
357           ShablonimF.ShablsPath := Path+'shablons\ASounds\';
358           CheckShablF.ShowModal;
359           //Åñëè øàáëîí áûë âûáðàí òî ïðîäîëæèòü
360           //èíà÷å - ïîëíàÿ îòìåíà.
361
362           If CheckShablF.ModalResult = mrOk then begin
363             //ShowMessage(ShablPath);
364             //Åñëè ÎÊíóëè...
365
366             //Òî - ñîçäàòü ïóñòîé ýëåàìåíò, îòêðûòü øàáëîí,
367             //è çàëîàäèòü â ýëåìåíò èç íåãî èíôó...
368             NumRecs := NumRecs+1;
369
370             TextFil1 := TTextFileInString.Init;
371             TextFil1.Load(ShablonimF.ShablPath);
372             TextFil1.Cursor := 1;
373             //ãðóçèì...
374             ASoundRecs[NumRecs].StrFile := TextFil1.CurReadLn;
375             ASoundRecs[NumRecs].IntUnknown1 := StrToInt(TextFil1.CurReadLn);
376             ASoundRecs[NumRecs].StrText := TextFil1.CurReadLn;
377             ASoundRecs[NumRecs].StrCode := Code;  //Êîä íå ãðóçèì, à áåðåì ââåäåíûé.
378             TextFil1.Free;
379
380             //Òèïà ãîòîâî. Òåïåðü ìîæíî ïðîñòî çàïîìíèòü ñòðîêó, ïåðåëîàäèòü ôîðìó,
381             //è âûñòàâèòü ïîòîì íóæíûé ýëåìåíò.
382
383             MaskiBox.Clear;    //Ýòè îïåðàòîðû - äëÿ ïîäãîòîâêè ôîðìû...
384             FilesBox.Clear;
385             MZLoaded := false;
386             RefreshBatoni(Sender);
387
388             TempStr := SaveASoundStr;  //ÍÀÄÎ ÷åðåç ïåðåìåííóþ, ò.ê. ýòà ôóíêà äîëæíà
389             //âûçûâàòüñÿ ïåðâîé!
390             LoadASoundStr(TempStr);  //Òèïà ðåëîàäà...
391
392             MaskiBox.ItemIndex := NumRecs-1;
393             MaskiBoxClick(Sender);
394
395             //Çàâåðøèòü öèêë èíäà1...
396             ind1 := true;
397           end
398           else begin
399             //Åñëè îòìåíèëè...
400             //Çàâåðøèòü öèêë èíäà1...
401             ind1 := true;
402           end;
403         end
404         else begin
405           //Åñëè ìàñêà ïîâòîðÿåòñÿ.
406           MessageDLG('ÎØÈÁÊÀ! Òàêàÿ çàïèñü óæå åñòü â áàçå! Ââåäèòå óíèêàëüíóþ ìàñêó!',mtError,[mbOk],0);
407         end;
408       end
409       else begin
410         //×òîá âûõîä ïî îòìåíå òîêà áûë
411         ind1 := true;
412       end;
413     until ind1 = true;
414   end;
415
416   //È ðåôðåøíóòü êíîïêè.
417   RefreshBatoni(Sender);
418 end;
419
420 procedure TASoundEditorF.RefreshBatoni(Sender: TObject);
421 begin
422   //Òèïà çàðåôðåøèòü áàòîíû ìëÿ...
423   If MZLoaded = false then begin
424     ZashablonitBut.Enabled := false;
425     SaveBut.Enabled := false;
426     DeleteBut.Enabled := false;
427     UpBut.Enabled := false;
428     DownBut.Enabled := false;
429     ToNumerBut.Enabled := false;
430   end
431   else begin
432     ZashablonitBut.Enabled := true;
433     SaveBut.Enabled := true;
434     DeleteBut.Enabled := true;
435
436     If RecNum = 1 then begin
437       //Âûøå ïîäíÿòü çàïèñü íåëüçÿ.
438       UpBut.Enabled := false;
439     end
440     else begin
441       //Âûøå ïîäíÿòü çàïèñü ìîæíî.
442       UpBut.Enabled := true;
443     end;
444
445     If RecNum = NumRecs then begin
446       //Íèæå îïóñòèòü çàïèñü íåëüçÿ.
447       DownBut.Enabled := false;
448     end
449     else begin
450       //Íèæå îïóñòèòü çàïèñü ìîæíî.
451       DownBut.Enabled := true;
452     end;
453
454     ToNumerBut.Enabled := true;
455
456   end;
457 end;
458
459 procedure TASoundEditorF.DeleteButClick(Sender: TObject);
460 var
461   I : integer;
462   TempStr : string;
463  
464 begin
465   If MessageBox(Handle,'Óâåðåíû???','Òèïà âîïðîñ...',MB_ICONQUESTION or MB_YESNO) = ID_YES then begin
466     //Òèïà óäàëèòü òåêóùèé ýëåìåíò èç ìàññèâà è èç ñïèñêîâ.
467     //Åñëè ýëåìåíò ïîñëåäíèé, òî ïðîñòî âûêèíóòü åãî, åñëè íå ïîñëåäíèé
468     //Òî ñíà÷àëà ñäâèíóòü ýëåìåíò íèæå íà åãî ìåñòî (è àíàëîãè÷íîð äî êîíöà),
469     //à ïîòîì îïÿòü æå âûêèíóòü ïîñëåäíèé ýëåìåíò (à åãî êîïèÿ óæå åñòü â ïðåäïîñëåäíåì ýëåìåíòà).
470
471     If RecNum <> NumRecs then begin
472       //Åñëè ýëåìåíò íå ïîñëåäíèé.
473       For I := RecNum to NumRecs-1 do begin
474         //Ïåðåäâèíóòü ýëåìåíòû...
475         ASoundRecs[I].StrFile := ASoundRecs[I+1].StrFile;
476         ASoundRecs[I].IntUnknown1 := ASoundRecs[I+1].IntUnknown1;
477         ASoundRecs[I].StrText := ASoundRecs[I+1].StrText;
478         ASoundRecs[I].StrCode := ASoundRecs[I+1].StrCode;
479       end;
480     end;
481
482     //Òåïåðü - ïî ëþáîìó êèëë ïîñëåäíåìó ýëåìåíòó. ×èñòèòü íåîáÿçàòåëüíî. Ïðîñòî
483     //èçìåíèòü êîëè÷åñòâî äîñòóïíûõ ýëåìåíòîâ.
484     NumRecs := NumRecs-1;
485
486     //Òèïà ãîòîâî. Òåïåðü ìîæíî ïðîñòî çàïîìíèòü ñòðîêó, ïåðåëîàäèòü ôîðìó,
487     //è âûñòàâèòü ïîòîì íóæíûé ýëåìåíò.
488     I := RecNum-1;     //Êîðî÷å òèïà çàïîìíèòü ãäå áûëè...
489     If I = 0 then I := 1;  //È åñëè ñàìûé âåðõ - âûøå íå äâèãàòüñÿ.
490
491     MaskiBox.Clear;    //Ýòè îïåðàòîðû - äëÿ ïîäãîòîâêè ôîðìû...
492     FilesBox.Clear;
493     MZLoaded := false;
494     RefreshBatoni(Sender);
495
496     TempStr := SaveASoundStr;  //ÍÀÄÎ ÷åðåç ïåðåìåííóþ, ò.ê. ýòà ôóíêà äîëæíà
497     //âûçûâàòüñÿ ïåðâîé!
498     LoadASoundStr(TempStr);  //Òèïà ðåëîàäà...
499
500     //À òåïåðü â çàâèñèìîñòè îò òîãî, îñòàëîñü ëè ÷òîòî â ïîëå...
501     If NumRecs <> 0 then begin
502       //Åñëè åñòü ÷åòî...
503       MaskiBox.ItemIndex := I-1;
504       MaskiBoxClick(Sender);
505     end
506     else begin
507       //Åñëè ïóñòî...
508
509     end;
510
511   end;
512   //È ðåôðåøíóòü êíîïêè.
513   RefreshBatoni(Sender);
514 end;
515
516 procedure TASoundEditorF.CacelButClick(Sender: TObject);
517 begin
518   ModRes := 0;
519   Close;
520 end;
521
522 Function TASoundEditorF.MakeShablon (Sender : TObject) : byte;
523 var
524   Fil1 : TTextFileInString;
525   AllOk : boolean;
526
527 begin
528   //Ôóíêà ãåíåðèò ôàéë òèïà ñ øàáëîíîì ýëåìåíòà.
529
530   AllOk := true;
531   //Ñäåëàòü òèïà ñåéâ... Êàê áû è ïðîâåðêà çàîäíî...
532   If SaveMZ(Sender) = false then begin
533     AllOk := false;
534     If MessageBox(Handle,'Îòêðûòûé ñåé÷àñ ýëåìåíò íå áûë ñîõðàíåí èç-çà îøèáêè. Âñåðàâíî ïðîäîëæèòü? (áóäåò èñïîëüçîâàí ïîñëåäíèé ñîõðàíåííûé âàðèàíò)','ÂÍÈÌÀÍÈÅ!!!',MB_ICONWARNING or MB_YESNO) = ID_YES then begin
535       //Íó òèïà þçâåðþ âñå ïîôèã...
536       AllOk := true;
537     end;
538   end;
539
540   //Ïîäãîòîâèòü îáüåêò êëàññà...
541   Fil1 := TTextFileInString.Init;
542   Fil1.MakNewFile;
543
544   //À òåïåðü âïèñûâàòü òóäû èíôó...
545   Fil1.AddStr(ASoundRecs[RecNum].StrFile);
546   Fil1.AddStr(IntToStr(ASoundRecs[RecNum].IntUnknown1));
547   Fil1.AddStr(ASoundRecs[RecNum].StrText);
548   Fil1.AddStr(ASoundRecs[RecNum].StrCode);
549
550   //Íó è ñàâàíóòü âèäèìî...
551
552   ShablonimF.ShablsPath := Path+'shablons\ASounds\';
553   ShablonimF.ShowModal;
554   If ShablonimF.ModalResult = mrOk then begin
555     //Â ôîðìå ÎÊíóëè..
556     Fil1.Save(ShablonimF.ShablPath);
557   end;
558
559   Result := 1;
560 end;
561
562 procedure TASoundEditorF.ZashablonitButClick(Sender: TObject);
563 begin
564   MakeShablon(Sender);
565 end;
566
567 Function TASoundEditorF.CheckCode(Sender : TObject; const Code : string) : boolean;
568 var
569   I : integer;
570 begin
571   result := true;
572   //Ïðîâåðÿëêà êîäà íà óíèêàëüíîñòü.
573   For I := 1 to NumRecs do begin
574     If ASoundRecs[I].StrCode = Code then begin
575       //Âñòðåòèëñÿ òàêîé êîä. Âñå, ïèïåö. Òèïà âåðíóòü ôàëüñó...
576       Result := false;
577       //È âûéòè èç öèêëà...
578       Exit //ñïåöèàëüíî áåç òî÷êè ñ çàïÿòîé.
579     end;
580   end;
581 end;
582
583 Procedure TASoundEditorF.MoveElement (Sender : TObject; MoveTo : integer);
584 var
585   I : integer;
586   TempStr : string;
587 begin
588   //Ôóíêà äëÿ ïåðåíîñà âûáðàííîãî ýëåìåíòà íà
589   //âûáðàííóþ ñòðîêó.
590
591   // íà÷àëå - çàïîìíèòü (â "ëèøíþþ" ñòðî÷êó ýëåìåíòíîãî ìàññèâà)
592   //âûáðàííûé ñåé÷àñ ýëåìåíò.
593
594   I := NumRecs+1;  //"ëèøíÿÿ" ñòðî÷êà...
595   ASoundRecs[I].StrFile := ASoundRecs[RecNum].StrFile;
596   ASoundRecs[I].IntUnknown1 := ASoundRecs[RecNum].IntUnknown1;
597   ASoundRecs[I].StrText := ASoundRecs[RecNum].StrText;
598   ASoundRecs[I].StrCode := ASoundRecs[RecNum].StrCode;
599
600   //Òåïåðü ïåðåòàùèòü (ñêîïèðîâàòü) íà âûáðàííîå ìåñòî ñòðî÷êó èç äðóãîãî ìåñòà...
601   ASoundRecs[RecNum].StrFile := ASoundRecs[MoveTo].StrFile;
602   ASoundRecs[RecNum].IntUnknown1 := ASoundRecs[MoveTo].IntUnknown1;
603   ASoundRecs[RecNum].StrText := ASoundRecs[MoveTo].StrText;
604   ASoundRecs[RecNum].StrCode := ASoundRecs[MoveTo].StrCode;
605
606   //Òåïåðü - ïåðåòàùèòü íà íóæíîå ìåñòî çàïîìíåííûé ðàíåå ýëåìåíò...
607   ASoundRecs[MoveTo].StrFile := ASoundRecs[I].StrFile;
608   ASoundRecs[MoveTo].IntUnknown1 := ASoundRecs[I].IntUnknown1;
609   ASoundRecs[MoveTo].StrText := ASoundRecs[I].StrText;
610   ASoundRecs[MoveTo].StrCode := ASoundRecs[I].StrCode;
611
612   //Òèïà ãîòîâî. Òåïåðü - òèïà ïåðåâûâîä ôîðìû, è âûáîð íóæíîé çàïèñè...
613
614   MaskiBox.Clear;    //Ýòè îïåðàòîðû - äëÿ ïîäãîòîâêè ôîðìû...
615   FilesBox.Clear;
616   MZLoaded := false;
617   RefreshBatoni(Sender);
618
619   TempStr := SaveASoundStr;  //ÍÀÄÎ ÷åðåç ïåðåìåííóþ, ò.ê. ýòà ôóíêà äîëæíà
620   //âûçûâàòüñÿ ïåðâîé!
621   LoadASoundStr(TempStr);  //Òèïà ðåëîàäà...
622
623   MaskiBox.ItemIndex := MoveTo-1;
624   MaskiBoxClick(Sender);
625 end;
626
627 procedure TASoundEditorF.UpButClick(Sender: TObject);
628 begin
629   //Ïîìåíÿòü âûáðàííûé ýëåìåíò è òîò ÷òî âûøå ìåñòàìè...
630   MoveElement(Sender,RecNum-1);
631 end;
632
633 procedure TASoundEditorF.DownButClick(Sender: TObject);
634 begin
635   //Ïîìåíÿòü âûáðàííûé ýëåìåíò è òîò ÷òî íèæå ìåñòàìè...
636   MoveElement(Sender,RecNum+1);
637 end;
638
639 procedure TASoundEditorF.ToNumerButClick(Sender: TObject);
640 var
641   MoveTo : integer;
642   Ind1 : boolean;
643
644 begin
645   //Íàäî ïîìåíÿòü ìåñòàìè âûáðàííûé ýëåìåíò
646   //è óêàçàííûé ïîëüçîâàòåëåì...
647
648   //Ïðèãîòîâèòü äèàëîã...
649   AskFnForm.QuestionDial := 'Ñ êàêèì ýëåìåíòîì ïîìåíÿòü âûáðàííûé ýëåìåíò?';
650   ind1 := false;
651   repeat
652     AskFnForm.ShowModal;
653     If AskFnForm.ModalResult = mrOK then begin
654       //Ïðîâåðèòü íà îøèáêó...
655       If CheckStrInt(AskFnForm.AnswerDial) = true then begin
656         //Åñëè ÷èñëî öåëî÷èñëåííîå...
657         MoveTo := StrToInt(AskFnForm.AnswerDial);
658         If (MoveTo >= 1) and (MoveTo <= NumRecs) and (MoveTo <> RecNum) then begin
659           //Åñëè ÷èñëî ïîäõîäèò...
660           //Òî ìîæíî ìåíÿòü ìåñòàìè...
661           MoveElement(Sender,MoveTo);
662
663           //è èç äèàëîãà ïîñëå âñåãî ìîæíî âûéòè...
664           ind1 := true;
665         end
666         else begin
667           //Åñëè ÷èñëî ïîïàëî â îãðàíè÷åíèÿ, òî ðóãíóòüñÿ...
668           MessageBox(Handle,PChar('×èñëî äîëæíî áûòü â ïðåäåëàõ îò 1 äî '+IntToStr(NumRecs)+', è íå äîëæíî áûòü ðàâíî '+IntToStr(RecNum)+'.'),'Îøèáêà!',MB_ICONERROR or MB_OK);
669         end;
670       end
671       else begin
672         //Òèïà îøèáêà, áðåä âñÿêèé íàïèñàí.
673         MessageBox(Handle,'Âû äîëæíû ââåñòè öåëî÷èñëåííîå ÷èñëî, "áóêîâêè" íå òðåáóþòñÿ ;)','Íå ïèøèòå áðåä!',MB_ICONERROR or MB_OK);
674       end;
675     end
676     else begin
677       //Åñëè îòìåíèëè, ëèáî íàæìàëè íà "êðåñòèê"...
678       ind1 := true;  //òèïà ìîæíî óéòè...
679     end;
680   until ind1 = true;  //Ïîâòîðÿòü, ëèáî ïîêà þçåð íå îòìåíèò,
681                       //ëèáî ïîêà íå îêíåò áåç îøèáîê.
682 end;
683
684 end.
Note: See TracBrowser for help on using the browser.