OSDN Git Service

・スキンのガイドラインに準拠。
[gikonavigoeson/gikonavi.git] / AbonUnit.pas
1 unit AbonUnit;
2
3 interface
4 uses
5     Windows,Messages, ShellAPI, SysUtils, Classes,StdCtrls,StrUtils;
6
7 type
8   TIndiviAbon = record
9         Res: Integer;
10     option: Integer; // 0:\93§\96¾ 1:\92Ê\8fí\82 \82Ú\81[\82ñ
11   end;
12
13   TAbon = class(TObject)
14   private
15     { Private \90é\8c¾ }
16     Froot : String;
17     Flistpath : String;
18     FNGwordpath : String;
19     Ftokens : array of array of string;
20     FAbonRes : array of TIndiviAbon;
21     FAbonString : String;
22     FCutoffNum : Integer; //\82±\82Ì\90\94\88È\8fã\98A\91±\82·\82é\93¯\82\89p\8e\9a\82ðNG\83\8f\81[\83h\82Æ\82·\82é
23     FDeleterlo : Boolean; //&rlo;\82ð\8dí\82é\82©
24     FReplaceul :Boolean ; //<ul>\83^\83O\82ð<br>\83^\83O\82É\92u\8a·\82·\82é\82©
25     FReverse : Boolean ;  //NG\83\8f\81[\83h\82Å\82Ì\82 \82Ú\81`\82ñ\82Ì\8c\8b\89Ê\82ð\94½\93]\82³\82¹\82é\82©
26     FAbonPopupRes : Boolean; //\83\8c\83X\83|\83b\83v\83A\83b\83v\82Ì\8e\9e\82É\82 \82Ú\81[\82ñ\82·\82é\82©
27     FCreateNGwordFile : Boolean; //\8ew\92è\82³\82ê\82½path\82ÉNG\83\8f\81[\83htxt\82ª\96³\82©\82Á\82½\82Æ\82«\82É\8e©\93®\93I\82É\90\90¬\82·\82é\82©
28     FNGwordFileIndex : Integer; //\8c»\8dÝ\93Ç\82Ý\8d\9e\82ñ\82Å\82éNG\83\8f\81[\83h\82ªlist\82Ì\89½\8ds\96Ú\82©
29     FNGwordname : String; //\8c»\8dÝ\93Ç\82Ý\8d\9e\82ñ\82Å\82éNG\83\8f\81[\83h\82Ì\95\\8e¦\96¼
30     FIndividualFileName : String;       //\8cÂ\95Ê\82 \82Ú\81`\82ñ\82Ì\83t\83@\83C\83\8b\96¼
31     procedure SetTokens(index: integer ; argline:String);
32     function Getlistpath() : String;
33     procedure Setlistpath(const Value : String);
34     function LoadListFile(path :String;listStringList : TStringList) : Boolean;
35     function ReadNGwordslist(line : Integer) : Boolean;
36     function LoadFromSetResNumFile(SetResNumFile : String) : Boolean;
37   public
38     { Public \90é\8c¾ }
39     constructor Create; // \83R\83\93\83X\83g\83\89\83N\83^
40     destructor Destroy; override; // \83f\83X\83g\83\89\83N\83^
41     property Deleterlo: Boolean read FDeleterlo write FDeleterlo  default false;
42     property Replaceul: Boolean read FReplaceul write FReplaceul  default false;
43     property Reverse: Boolean read FReverse write FReverse  default false;
44     property CreateNGwordFile: Boolean read FCreateNGwordFile write FCreateNGwordFile;
45     property AbonString : String read FAbonString write FAbonString;
46     property  AbonPopupRes : Boolean read FAbonPopupRes write FAbonPopupRes default false;
47     property listpath : String read Getlistpath write Setlistpath;
48     property NGwordFileIndex : Integer read FNGwordFileIndex write FNGwordFileIndex default 0;
49     property NGwordname : String read FNGwordname write FNGwordname;
50     procedure Setroot(root :String);
51     function Getroot() : String;
52
53     function Getfullpath(argpath : String) : String;
54     procedure SetNGwordpath(path :String);
55     function GetNGwordpath() : String;
56     function LoadFromNGwordFile(path :String) : Boolean;
57     function ReLoadFromNGwordFile() : Boolean;
58     procedure LoadFromStringList( bufstl : TStringList );
59     function CheckAbonPopupRes(line : String) :Boolean;
60     function FindNGwords(line : String) : Boolean; //1\83\89\83C\83\93\82¸\82Â\97p\81B
61     function Cutoff(line : String) : Boolean; //CutOff\92l\88È\8fã\8cÂ\82Ì\93¯\82\89p\90\94\82ª\95À\82ñ\82Å\82¢\82½\82çtrue
62     //\82 \82Ú\81`\82ñ\8f\88\97\9d(NG\83\8f\81[\83h\82Å\82Ì\83t\83B\83\8b\83^\83\8a\83\93\83O)
63     procedure Execute(var ThreadStrings : TStringList); overload;
64     procedure Execute(var ThreadStrings : TStringList; NGwords : TStringList); overload;
65     procedure Execute(var ThreadStrings : TStringList; NGwords : TStrings); overload;
66     //\8cÂ\95Ê\82 \82Ú\81`\82ñ\82µ\82å\82è
67     procedure IndividualAbon(var ThreadStrings : TStringList; SetResNumFile : String);
68     procedure AddIndividualAbon( ResNum : Integer ; option : Integer);
69     procedure DeleteIndividualAbon( ResNum : Integer);
70     function GetAbonResCount() : Integer;
71     function GetAbonResString(Num : Integer) : String;
72     function CheckIndividualAbonList(ResNum : Integer) : Boolean;
73     //--
74     function ExecuteFile(datfilepath : String; NGwordpath : String) : Boolean; overload;//DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
75     function ExecuteFile(datfilepath : String; resnum : Integer) : Boolean; overload; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
76     function ExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean; overload; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
77     function ReverseExecuteFile(datfilepath : String) : Boolean; overload; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
78     function ReverseExecuteFile(datfilepath : String; resnum : Integer) : Boolean; overload; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
79     function ReverseExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean; overload; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
80     //--
81     procedure EditNGwords();  //NGword.txt\82ð\8aJ\82­\81B
82     function ShowAllTokens() : String;  //\83f\83o\83b\83O\97p
83     //--
84     procedure GoHome();//List\82Ì\82P\8ds\96Ú\82ð\93Ç\82Þ
85     function GoForward() : Boolean; //List\82Ì\88ê\82Â\8e\9f\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
86     function GoBack() : Boolean; //List\82Ì\88ê\82Â\91O\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
87   end;
88 var
89     Abon1 :TAbon;
90 const
91     NGwordListFileName : String = 'NGwords.list';
92
93 implementation
94
95 constructor TAbon.Create;
96 begin
97     // \8f\89\8aú\89»
98     FAbonString := '&nbsp;<>&nbsp;<>&nbsp;<>&nbsp;&nbsp;<><>';
99     FCreateNGwordFile := true;
100     SetLength(FAbonRes,1);
101     FAbonRes[0].Res := 0;
102     FAbonRes[0].option := -1;
103
104 end;
105
106 destructor TAbon.Destroy;
107 begin
108     inherited;
109 end;
110 //root\82ÍExe\config\NGwords\83t\83H\83\8b\83_
111 procedure TAbon.Setroot(root :String);
112 var
113     bufStringList : TStringList;
114 begin
115     bufStringList := TStringList.Create;
116     try
117         if not DirectoryExists(root) then begin
118             CreateDir(root);
119         end;
120         if root[Length(root)] <> '\' then begin
121             root := root + '\';
122         end;
123         Flistpath := root + NGwordListFileName;
124         LoadListFile(Flistpath, bufStringList);
125     finally
126         bufStringList.Free;
127     end;
128     Froot := root;
129 end;
130 function TAbon.Getroot() : String;
131 begin
132     Result := Froot;
133 end;
134 //NGwordpath\82ÍNGword.txt\82Ì\83t\83\8b\83p\83X
135 procedure TAbon.SetNGwordpath(path :String);
136 begin
137     FNGwordpath := Getfullpath(path);
138     LoadFromNGwordFile(FNGwordpath);
139 end;
140 function TAbon.GetNGwordpath() : String;
141 begin
142     Result :=  FNGwordpath;
143 end;
144 //\83t\83\8b\83p\83X\82Å\82È\82¯\82ê\82Î\83t\83\8b\83p\83X\82É\82µ\82Ä\95Ô\82·\81B
145 function TAbon.Getfullpath(argpath : String) : String;
146 begin
147     if AnsiPos(':\',argpath) <> 2 then begin  //\83h\83\89\83C\83u\82©\82ç\82Ì\83t\83\8b\83p\83X\82ª\96³\82¯\82ê\82Î
148         if Getroot() = '' then begin
149             Result := '';    //root\83p\83X\82ª\90Ý\92è\82³\82ê\82Ä\82È\82¢\82©\8bó\82É\82·\82é
150         end else begin
151             if (Froot[Length(Froot)] = '\') and (argpath[1] = '\') then begin  //\90æ\93ª\82Ì\\82ð\8dí\8f\9c
152                 Delete(argpath,1,1);
153             end;
154             Insert( Getroot(), argpath , 1);//root\83p\83X\82ð\91}\93ü
155             Result := argpath;
156         end;
157     end else begin
158         Result := argpath;
159     end;
160
161 end;
162 //NGword\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý
163 function TAbon.LoadFromNGwordFile(path :String) : boolean;
164 var
165     bufstl : TStringList;
166 begin
167     path := Getfullpath(path);
168     if path = '' then begin
169         Result := false;
170     end else begin
171         bufstl := TStringList.Create;
172         try
173             try
174                 bufstl.LoadFromFile(path);
175                 LoadFromStringList( bufstl );
176                 Result := true;
177             except
178                 if CreateNGwordFile = true then begin
179                     bufstl.SaveToFile(path);
180                 end;
181                 Result := false;
182             end;
183         finally
184             bufstl.Free;
185         end;
186     end;
187
188 end;
189 //NGword\83\8a\83X\83g\93Ç\82Ý\8d\9e\82Ý
190 procedure TAbon.LoadFromStringList( bufstl : TStringList );
191 var
192     i : integer;
193 begin
194     try
195         for i := bufstl.Count -1  downto 0 do begin
196             if bufstl.Strings[i] = '' then begin
197                 bufstl.Delete(i);
198             end;
199         end;
200         SetLength(Ftokens,bufstl.Count);
201         for i := 0  to bufstl.Count -1 do begin
202             SetTokens(i , bufstl.Strings[i]);
203         end;
204
205     except
206         Exit;
207     end;
208 end;
209 //NGwordpath\82ª\8aù\82É\90Ý\92è\82³\82ê\82Ä\82¢\82é\82Æ\82«\82Ì\83\8a\83\8d\81[\83h\97p\8aÖ\90\94
210 function TAbon.ReLoadFromNGwordFile() : boolean;
211 begin
212     if GetNGwordpath() ='' then begin
213         Result := false;
214     end else begin
215         Result := LoadFromNGwordFile( GetNGwordpath() );
216     end;
217 end;
218 function TAbon.Getlistpath() : String;
219 begin
220     Result := Flistpath;
221 end;
222 procedure TAbon.Setlistpath(const Value : String);
223 begin
224     Flistpath := Getfullpath(Value);
225 end;
226 //\88ê\8ds\82Ì\92\86\82Ì\83g\81[\83N\83\93\82ð\90Ø\82è\95ª\82¯\82Ä\83Z\83b\83g
227 procedure TAbon.SetTokens(index: integer ; argline : String);
228 var
229     ret : Integer;
230     bufstl : TStringList;
231     i : Integer;
232     pos : Integer;
233     buftoken : String;
234 begin
235     pos := 0;
236     bufstl := TStringList.Create;
237     try
238         if Length(argline) > 0 then begin
239                 pos := AnsiPos(#9,argline);
240             while pos <> 0 DO begin
241                 buftoken := Copy(argline,1,pos-1);
242                 Delete(argline,1,pos);
243                 if Length(buftoken) > 0 then begin
244                                 bufstl.Append(buftoken);
245                 end;
246                     pos := AnsiPos(#9,argline);
247             end;
248                 if Length(argline) > 0 then begin
249                         bufstl.Append(argline);
250             end;
251                 ret := bufstl.Count;
252                 SetLength(Ftokens[index],ret);
253                 for i := 0 to bufstl.Count - 1  do begin
254                         Ftokens[index][i] := bufstl.Strings[i];
255                 end;
256         end;
257     finally
258         bufstl.Free;
259     end;
260
261 end;
262 //Debug\97p\82¿\82á\82ñ\82ÆNG\83\8f\81[\83h\82ð\8fE\82¦\82Ä\82¢\82é\82©
263 function TAbon.ShowAllTokens() : String;
264 var
265     i : Integer;
266     j : Integer;
267     ret : String;
268 begin
269     for i := 0 to High(Ftokens) do begin
270         for j := 0 to High(Ftokens[i]) do begin
271             ret := ret + Ftokens[i][j];
272         end;
273     end;
274     Result := ret;
275
276
277
278 end;
279
280 //****************************************************************************//
281 //NG\83\8f\81[\83h\82ª\8aÜ\82Ü\82ê\82Ä\82½\82çtrue\82ð\95Ô\82·\81B
282 function TAbon.FindNGwords(line : String) : Boolean;
283 var
284     lines : Integer;
285     cells : Integer;
286     hit : Boolean;
287     bufline : String;
288 begin
289     hit := false;
290     if AnsiPos(FAbonString,line) <> 1 then begin
291         for lines := 0 to High(Ftokens) do begin
292                 hit := true;
293             bufline := line;
294             for cells := 0 to High(Ftokens[lines]) do begin
295                 if AnsiPos(Ftokens[lines][cells],bufline) = 0 then begin
296                         hit := false;
297                     break;
298                 end else begin
299                         Delete(bufline,AnsiPos(Ftokens[lines][cells],bufline),Length(Ftokens[lines][cells]));
300                 end;
301             end;
302             if hit = true then begin
303                 break;
304             end;
305         end;
306     end;
307     Result := hit;
308
309 end;
310 //CutOff\92l\88È\8fã\8cÂ\82Ì\93¯\82\89p\90\94\82ª\95À\82ñ\82Å\82¢\82½\82çtrue
311 function TAbon.Cutoff(line : String) : Boolean;
312 var
313     i : Integer;
314     sheed : AnsiChar;
315     buf : String;
316     ret : Bool;
317 begin
318     ret := false;
319     if FCutoffNum <> 0 then begin
320         for i := 65 to 90 do begin
321             sheed := Chr(i);
322             buf := DupeString(sheed, FCutoffNum);
323             if AnsiContainsText(line, buf) = true then begin
324                 ret := true;
325                 break;
326             end;
327         end;
328     end;
329     Result := ret;
330 end;
331 //\96\96\94ö\82Ì\83u\81[\83\8b\92l\82Ítrue\82¾\82Æ\81ANG\83\8f\81[\83h\82ð\8aÜ\82Þ\82à\82Ì\82¾\82¯\82ð\95Ô\82·\81B
332 procedure TAbon.Execute(var ThreadStrings : TStringList);
333 var
334     i : Integer;
335     bufline : String;
336 begin
337     //FRetStrings.Clear;
338
339     for i:=0 to ThreadStrings.Count - 1 do begin
340         if FindNGwords(ThreadStrings.Strings[i]) <> Reverse  then begin
341             ThreadStrings.Strings[i] := FAbonString;
342         end else begin
343             bufline := ThreadStrings.Strings[i];
344             if Deleterlo = true then begin
345                 bufline := AnsiReplaceText( bufline,'&rlo;','' );
346             end;
347             if Replaceul = true then begin
348                 bufline := AnsiReplaceText( bufline,'<ul>','<br>' );
349                 bufline := AnsiReplaceText( bufline,'</ul>','<br>' );
350             end;
351             ThreadStrings.Strings[i] := bufline;
352         end;
353     end;
354
355 end;
356 procedure TAbon.Execute(var ThreadStrings : TStringList; NGwords : TStringList);
357 var
358     i : Integer;
359 begin
360     SetLength(Ftokens,NGwords.Count);
361     for i := 0  to NGwords.Count -1 do begin
362         SetTokens(i , NGwords.Strings[i]);
363     end;
364     Execute(ThreadStrings);
365
366 end;
367 procedure TAbon.Execute(var ThreadStrings : TStringList; NGwords : TStrings);
368 var
369     i : Integer;
370     buf : TStringList;
371 begin
372     buf := TStringList.Create;
373     buf.AddStrings(NGwords);
374     SetLength(Ftokens,buf.Count);
375     for i := 0  to buf.Count -1 do begin
376         SetTokens(i , buf.Strings[i]);
377     end;
378     Execute(ThreadStrings);
379     buf.Free;
380 end;
381
382
383 //****************************************************************************//
384 //DAT\82ð\92¼\82É\82¢\82\82é\93z\82ç===========================================================
385 //NG\83\8f\81[\83h\82ð\8aÜ\82Þ\83\8c\83X\82Ì\90æ\93ª\82É\82 \82Ú\81[\82ñ\82ð\91}\93ü
386 function TAbon.ExecuteFile(datfilepath : String; NGwordpath : String) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
387 var
388     datstl : TStringList;
389     ret : Boolean;
390     i : Integer;
391 begin
392     datstl := TStringList.Create;
393     ret := true;
394     try
395         try
396             datstl.LoadFromFile(datfilepath);
397             for i := 0 to datstl.Count -1 do begin
398                 if FindNGwords(datstl.Strings[i]) = true  then begin
399                     datstl.Strings[i] := FAbonString + datstl.Strings[i]
400                 end;
401             end;
402
403             datstl.SaveToFile(datfilepath);
404         except
405             ret := false;
406         end;
407     finally
408         datstl.Free;
409     end;
410     Result := ret;
411
412 end;
413 //\8ew\92è\82³\82ê\82½\83\8c\83X\94Ô\82Ì\90æ\93ª\82É\82 \82Ú\81[\82ñ\91}\93ü
414 function TAbon.ExecuteFile(datfilepath : String; resnum : Integer) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
415 var
416     datstl : TStringList;
417     ret : Boolean;
418 begin
419     ret := true;
420     datstl := TStringList.Create;
421     try
422         try
423             datstl.LoadFromFile(datfilepath);
424             if (resnum > 0) and (resnum <= datstl.Count) then begin
425                 if AnsiPos(FAbonString, datstl.Strings[resnum-1]) <> 1 then begin
426                     datstl.Strings[resnum-1] := FAbonString + datstl.Strings[resnum-1];
427                 end;
428             end;
429             datstl.SaveToFile(datfilepath);
430         except
431             ret := false;
432         end;
433     finally
434         datstl.Free;
435     end;
436     Result := ret;
437 end;
438 //firstres\82©\82çcount\8cÂ\82Ì\83\8c\83X\82Ì\90æ\93ª\82É\82 \82Ú\81[\82ñ\91}\93ü
439 function TAbon.ExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
440 var
441     datstl : TStringList;
442     i : Integer;
443     endnum : Integer; //\8fI\82í\82è\82Ì\83\8c\83X\94Ô
444     ret : Boolean;
445 begin
446     ret := true;
447     datstl := TStringList.Create;
448     try
449         try
450             datstl.LoadFromFile(datfilepath);
451             if (firstres > 0) and (firstres <= datstl.Count) then begin
452                 if firstres + count -1 > datstl.Count then begin
453                     endnum := datstl.Count;
454                 end else if count <= 0 then begin
455                     endnum := firstres + 1;
456                 end else begin
457                     endnum := firstres + count -1;
458                 end;
459
460                 for i := firstres to endnum do begin
461                     if AnsiPos(FAbonString, datstl.Strings[i-1]) <> 1 then begin
462                         datstl.Strings[i-1] := FAbonString + datstl.Strings[i-1];
463                     end;
464                 end;
465             end;
466             datstl.SaveToFile(datfilepath);
467         except
468             ret := false;
469         end;
470     finally
471         datstl.Free;
472     end;
473     Result := ret;
474 end;
475 //DAT\82ð\92¼\82É\82¢\82\82é\93z\82ç==========\82±\82±\82Ü\82Å=========================================
476
477 //\8c³\82É\96ß\82·\93z\82ç==================================================================
478 function TAbon.ReverseExecuteFile(datfilepath : String) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
479 var
480     datstl : TStringList;
481     i : Integer;
482     buf : String;
483     ret : Boolean;
484 begin
485     ret := true;
486     datstl := TStringList.Create;
487     try
488         try
489             datstl.LoadFromFile(datfilepath);
490             for i:=0 to datstl.Count -1  do begin
491                 if AnsiPos(FAbonString, datstl.Strings[i]) = 1 then begin
492                     buf := datstl.Strings[i];
493                     Delete(buf,1,Length(FAbonString));
494                     datstl.Strings[i] := buf;
495                 end;
496             end;
497             datstl.SaveToFile(datfilepath);
498         except
499             ret := false;
500         end;
501     finally
502         datstl.Free;
503     end;
504     Result := ret;
505
506 end;
507 function TAbon.ReverseExecuteFile(datfilepath : String; resnum : Integer) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
508 var
509     datstl : TStringList;
510     buf : String;
511     ret : Boolean;
512 begin
513     ret := true;
514     datstl := TStringList.Create;
515     try
516         try
517             datstl.LoadFromFile(datfilepath);
518             if (resnum > 0) and (resnum <= datstl.Count) then begin
519                 if AnsiPos(FAbonString, datstl.Strings[resnum-1]) = 1 then begin
520                     buf := datstl.Strings[resnum-1];
521                     Delete(buf,1,Length(FAbonString));
522                     datstl.Strings[resnum-1] := buf;
523                 end;
524             end;
525             datstl.SaveToFile(datfilepath);
526         except
527             ret := false;
528         end;
529     finally
530         datstl.Free;
531     end;
532     Result := ret;
533
534 end;
535 function TAbon.ReverseExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean;//DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
536 var
537     datstl : TStringList;
538     i : Integer;
539     endnum : Integer; //\8fI\82í\82è\82Ì\83\8c\83X\94Ô
540     buf : String;
541     ret : Boolean;
542 begin
543     ret := true;
544     datstl := TStringList.Create;
545     try
546         try
547             datstl.LoadFromFile(datfilepath);
548             if (firstres > 0) and (firstres <= datstl.Count) then begin
549                 if firstres + count -1 > datstl.Count then begin
550                     endnum := datstl.Count;
551                 end else if count <= 0 then begin
552                     endnum := firstres + 1;
553                 end else begin
554                     endnum := firstres + count -1;
555                 end;
556                 for i := firstres to endnum do begin
557                     if AnsiPos(FAbonString, datstl.Strings[i-1]) = 1 then begin
558                         buf := datstl.Strings[i-1];
559                         Delete(buf,1,Length(FAbonString));
560                         datstl.Strings[i-1] := buf;
561                     end;
562                 end;
563             end;
564             datstl.SaveToFile(datfilepath);
565         except
566             ret := false;
567         end;
568     finally
569         datstl.Free;
570     end;
571     Result := ret;
572 end;
573 //\8c³\82É\96ß\82·\93z\82ç=================\82±\82±\82Ü\82Å=========================================
574 //\8c»\8dÝ\83Z\83b\83g\82³\82ê\82Ä\82¢\82éNGword.txt\82ð\8aJ\82­
575 procedure TAbon.EditNGwords();
576 begin
577     ShellExecute(0 ,nil,PChar(FNGwordpath),nil,nil,SW_SHOW);
578 end;
579 //\83|\83b\83v\83A\83b\83v\97p\94»\92è\8aÖ\90\94
580 function TAbon.CheckAbonPopupRes(line : String) :Boolean;
581 begin
582     if AbonPopupRes = true then begin
583         Result := FindNGwords(line);
584     end else begin
585         Result := false;
586     end;
587 end;
588 //\95¡\90\94\82ÌNG\83\8f\81[\83h\83e\83L\83X\83g\82ð\93Ç\82Ý\8d\9e\82Þ==============================================
589 //List\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
590 function TAbon.LoadListFile(path :String; listStringList : TStringList) : Boolean;
591 begin
592     try
593         listStringList.LoadFromFile(path);
594         Result := true;
595     except
596         listStringList.Append('\88ê\94Ê=NGword.txt');
597         listStringList.SaveToFile(path);
598         Result := false;
599     end;
600 end;
601 //List\82Ì\88ê\82Â\8e\9f\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
602 function TAbon.GoForward() : Boolean;
603 begin
604     FNGwordFileIndex := FNGwordFileIndex + 1;
605     Result := ReadNGwordslist(FNGwordFileIndex);
606 end;
607 //List\82Ì\88ê\82Â\91O\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
608 function TAbon.GoBack() : Boolean;
609 begin
610     FNGwordFileIndex := FNGwordFileIndex -1;
611     Result := ReadNGwordslist(FNGwordFileIndex);
612 end;
613 //List\82Ì\82P\8ds\96Ú\82ð\93Ç\82Þ
614 procedure TAbon.GoHome();
615 begin
616     FNGwordFileIndex := 0;
617     ReadNGwordslist(FNGwordFileIndex);
618 end;
619 //List\82Ìline\8ds\96Ú\82ð\93Ç\82Þ
620 function TAbon.ReadNGwordslist(line : Integer) : Boolean;
621 var
622     liststl : TStringList;
623     linebuf : String;
624 begin
625     liststl := TStringList.Create;
626     try
627         if LoadListFile(Flistpath,liststl) = true then begin
628             if line < 0 then begin
629                 line := liststl.Count - 1;
630                 FNGwordFileIndex := liststl.Count - 1;
631             end else if line > liststl.Count - 1 then begin
632                 line := 0;
633                 FNGwordFileIndex := 0;
634             end;
635             linebuf := liststl.Strings[line];
636             FNGwordname := Copy(linebuf,1,AnsiPos('=',linebuf)-1);
637             Delete(linebuf,1,AnsiPos('=',linebuf));
638             SetNGwordpath(linebuf);
639             Result := true;
640         end else begin
641             Result := false;
642         end
643     finally
644         liststl.Free;
645     end;
646
647 end;
648 //\95¡\90\94\82ÌNG\83\8f\81[\83h\83e\83L\83X\83g\82ð\93Ç\82Ý\8d\9e\82Þ=====\82±\82±\82Ü\82Å=================================
649 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\8eÀ\8ds\8aÖ\90\94
650 procedure TAbon.IndividualAbon(var ThreadStrings : TStringList; SetResNumFile : String);
651 var
652         i : Integer;
653 begin
654         if FileExists(SetResNumFile) = true then begin
655         if LoadFromSetResNumFile(SetResNumFile) = true then begin
656                 for i := 0 to High(FAbonRes) do begin
657                  if (FAbonRes[i].Res <= ThreadStrings.Count) and (FAbonRes[i].Res > 0) then begin
658                         if FAbonRes[i].option = 0 then begin
659                         ThreadStrings.Strings[FAbonRes[i].Res-1] := '';
660                     end else begin
661                         ThreadStrings.Strings[FAbonRes[i].Res-1] := '\82 \82Ú\81`\82ñ<>\82 \82Ú\81`\82ñ<>\82 \82Ú\81`\82ñ<>\82 \82Ú\81`\82ñ<>';
662                     end;
663                  end;
664
665             end;
666         end;
667     end else begin
668         FIndividualFileName := SetResNumFile;
669         SetLength(FAbonRes,1);
670         FAbonRes[0].Res := 0;
671         FAbonRes[0].option := -1;
672     end;
673 end;
674 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý\8aÖ\90\94
675 function TAbon.LoadFromSetResNumFile(SetResNumFile : String) : Boolean;
676 var
677         bufStringList : TStringList;
678     bufLine : String;
679     i : Integer;
680 begin
681     bufStringList := TStringList.Create;
682     try
683         try
684                 bufStringList.LoadFromFile(SetResNumFile);
685             FIndividualFileName := SetResNumFile;
686             //\8bó\8ds\8dí\8f\9c
687             for i := bufStringList.Count-1 downto 0 do begin
688                         if bufStringList.Strings[i] = '' then begin
689                         bufStringList.Delete(i);
690                     end;
691             end;
692
693             //\83\81\83\82\83\8a\8am\95Û
694                 SetLength(FAbonRes,bufStringList.Count);
695             //\91ã\93ü
696             for i :=0 to bufStringList.Count - 1 do begin
697                         bufLine := Trim(bufStringList.Strings[i]);
698                     FAbonRes[i].Res :=  StrToInt(Copy(bufLine,1,AnsiPos('-',bufLine)-1));
699                 FAbonRes[i].option := StrToInt(Copy(bufLine,AnsiPos('-',bufLine)+1,1));
700             end;
701         except
702                 Result := false;
703             Exit;
704         end;
705     finally
706         bufStringList.Free;
707     end;
708     Result := true;
709 end;
710 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\83t\83@\83C\83\8b\82É\92Ç\89Á
711 procedure TAbon.AddIndividualAbon( ResNum : Integer ; option : Integer);
712 var
713         IndividualFile : TStringList;
714     linebuf : String;
715     i : Integer;
716 begin
717     IndividualFile := TStringList.Create;
718         if FAbonRes[0].Res <> 0 then begin
719         for i := 0 to High(FAbonRes) do begin
720             if FAbonRes[i].Res <> ResNum then begin
721                         linebuf := IntToStr(FAbonRes[i].Res) + '-' + IntToStr(FabonRes[i].option);
722                 IndividualFile.Append(linebuf);
723             end;
724         end;
725     end;
726     linebuf := IntToStr(ResNum) + '-' + IntToStr(option);
727     IndividualFile.Append(linebuf);
728     try
729         IndividualFile.SaveToFile(FIndividualFileName);
730     finally
731         IndividualFile.Free;
732     end;
733 end;
734 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\83t\83@\83C\83\8b\82©\82ç\8dí\8f\9c
735 procedure TAbon.DeleteIndividualAbon( ResNum : Integer);
736 var
737         IndividualFile : TStringList;
738     linebuf : String;
739     i : Integer;
740 begin
741     IndividualFile := TStringList.Create;
742         if FAbonRes[0].Res <> 0 then begin
743         for i := 0 to High(FAbonRes) do begin
744             if FAbonRes[i].Res <> ResNum then begin
745                         linebuf := IntToStr(FAbonRes[i].Res) + '-' + IntToStr(FabonRes[i].option);
746                 IndividualFile.Append(linebuf);
747             end;
748         end;
749     end;
750         if IndividualFile.Count <> 0 then begin
751         try
752                 IndividualFile.SaveToFile(FIndividualFileName);
753         finally
754                 IndividualFile.Free;
755         end;
756     end else begin
757         if FileExists(FIndividualFileName) = true then begin
758                 DeleteFile(FIndividualFileName);
759         end;
760     end;
761 end;
762 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\82Ì\83\8a\83X\83g\82Ì\8cÂ\90\94\82ð\95Ô\82·
763 function TAbon.GetAbonResCount() : Integer;
764 var
765         i : Integer;
766 begin
767     if FAbonRes[0].Res = 0 then begin
768         Result := 0
769     end else begin
770                 i := High(FAbonRes);
771         Result := i+1;
772     end;
773 end;
774 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\82Ì\83\8a\83X\83g\82Ì\82\8e\8ds\96Ú\82Ì\83\8c\83X\82ð\95\8e\9a\97ñ\82Å\95Ô\82·
775 function TAbon.GetAbonResString(Num : Integer) : String;
776 begin
777         if (Num <= High(FAbonRes)) and (Num >= 0) then begin
778         Result := IntToStr(FAbonRes[Num].Res);
779     end else begin
780         Result := '';
781     end;
782 end;
783 //\83|\83b\83v\83A\83b\83v\82Ì\94»\92è\97p
784 function TAbon.CheckIndividualAbonList(ResNum : Integer) : Boolean;
785 var
786         i : Integer;
787 begin
788         if FAbonRes[0].Res <> 0 then begin
789         for i := 0 to High(FAbonRes) do begin
790                 if FAbonRes[i].Res = ResNum then begin
791                 Result := true;
792                 Exit;
793             end;
794         end;
795     end;
796     Result := false;
797     
798 end;
799 end.
800