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 begin
233     bufstl := TStringList.Create;
234     bufstl.Delimiter := #9;  //\8bæ\90Ø\82è\8eq\82ð\81f\83^\83u\81f\82É\90Ý\92è
235     bufstl.DelimitedText := argline;
236     ret := bufstl.Count;
237     SetLength(Ftokens[index],ret);
238     for i := 0 to bufstl.Count - 1  do begin
239         Ftokens[index][i] := bufstl.Strings[i];
240     end;
241     bufstl.Free;
242
243 end;
244 //Debug\97p\82¿\82á\82ñ\82ÆNG\83\8f\81[\83h\82ð\8fE\82¦\82Ä\82¢\82é\82©
245 function TAbon.ShowAllTokens() : String;
246 var
247     i : Integer;
248     j : Integer;
249     ret : String;
250 begin
251     for i := 0 to High(Ftokens) do begin
252         for j := 0 to High(Ftokens[i]) do begin
253             ret := ret + Ftokens[i][j];
254         end;
255     end;
256     Result := ret;
257
258
259
260 end;
261
262 //****************************************************************************//
263 //NG\83\8f\81[\83h\82ª\8aÜ\82Ü\82ê\82Ä\82½\82çtrue\82ð\95Ô\82·\81B
264 function TAbon.FindNGwords(line : String) : Boolean;
265 var
266     lines : Integer;
267     cells : Integer;
268     hit : Boolean;
269     bufline : String;
270 begin
271     hit := false;
272     if AnsiPos(FAbonString,line) <> 1 then begin
273         for lines := 0 to High(Ftokens) do begin
274             hit := true;
275             bufline := line;
276             for cells := 0 to High(Ftokens[lines]) do begin
277                 if AnsiPos(Ftokens[lines][cells],bufline) = 0 then begin
278                     hit := false;
279                     break;
280                 end else begin
281                     Delete(bufline,AnsiPos(Ftokens[lines][cells],bufline),Length(Ftokens[lines][cells]));
282                 end;
283             end;
284             if hit = true then begin
285                 break;
286             end;
287         end;
288     end;
289     Result := hit;
290
291 end;
292 //CutOff\92l\88È\8fã\8cÂ\82Ì\93¯\82\89p\90\94\82ª\95À\82ñ\82Å\82¢\82½\82çtrue
293 function TAbon.Cutoff(line : String) : Boolean;
294 var
295     i : Integer;
296     sheed : AnsiChar;
297     buf : String;
298     ret : Bool;
299 begin
300     ret := false;
301     if FCutoffNum <> 0 then begin
302         for i := 65 to 90 do begin
303             sheed := Chr(i);
304             buf := DupeString(sheed, FCutoffNum);
305             if AnsiContainsText(line, buf) = true then begin
306                 ret := true;
307                 break;
308             end;
309         end;
310     end;
311     Result := ret;
312 end;
313 //\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
314 procedure TAbon.Execute(var ThreadStrings : TStringList);
315 var
316     i : Integer;
317     bufline : String;
318 begin
319     //FRetStrings.Clear;
320
321     for i:=0 to ThreadStrings.Count - 1 do begin
322         if FindNGwords(ThreadStrings.Strings[i]) <> Reverse  then begin
323             ThreadStrings.Strings[i] := FAbonString;
324         end else begin
325             bufline := ThreadStrings.Strings[i];
326             if Deleterlo = true then begin
327                 bufline := AnsiReplaceText( bufline,'&rlo;','' );
328             end;
329             if Replaceul = true then begin
330                 bufline := AnsiReplaceText( bufline,'<ul>','<br>' );
331                 bufline := AnsiReplaceText( bufline,'</ul>','<br>' );
332             end;
333             ThreadStrings.Strings[i] := bufline;
334         end;
335     end;
336
337 end;
338 procedure TAbon.Execute(var ThreadStrings : TStringList; NGwords : TStringList);
339 var
340     i : Integer;
341 begin
342     SetLength(Ftokens,NGwords.Count);
343     for i := 0  to NGwords.Count -1 do begin
344         SetTokens(i , NGwords.Strings[i]);
345     end;
346     Execute(ThreadStrings);
347
348 end;
349 procedure TAbon.Execute(var ThreadStrings : TStringList; NGwords : TStrings);
350 var
351     i : Integer;
352     buf : TStringList;
353 begin
354     buf := TStringList.Create;
355     buf.AddStrings(NGwords);
356     SetLength(Ftokens,buf.Count);
357     for i := 0  to buf.Count -1 do begin
358         SetTokens(i , buf.Strings[i]);
359     end;
360     Execute(ThreadStrings);
361     buf.Free;
362 end;
363
364
365 //****************************************************************************//
366 //DAT\82ð\92¼\82É\82¢\82\82é\93z\82ç===========================================================
367 //NG\83\8f\81[\83h\82ð\8aÜ\82Þ\83\8c\83X\82Ì\90æ\93ª\82É\82 \82Ú\81[\82ñ\82ð\91}\93ü
368 function TAbon.ExecuteFile(datfilepath : String; NGwordpath : String) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
369 var
370     datstl : TStringList;
371     ret : Boolean;
372     i : Integer;
373 begin
374     datstl := TStringList.Create;
375     ret := true;
376     try
377         try
378             datstl.LoadFromFile(datfilepath);
379             for i := 0 to datstl.Count -1 do begin
380                 if FindNGwords(datstl.Strings[i]) = true  then begin
381                     datstl.Strings[i] := FAbonString + datstl.Strings[i]
382                 end;
383             end;
384
385             datstl.SaveToFile(datfilepath);
386         except
387             ret := false;
388         end;
389     finally
390         datstl.Free;
391     end;
392     Result := ret;
393
394 end;
395 //\8ew\92è\82³\82ê\82½\83\8c\83X\94Ô\82Ì\90æ\93ª\82É\82 \82Ú\81[\82ñ\91}\93ü
396 function TAbon.ExecuteFile(datfilepath : String; resnum : Integer) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
397 var
398     datstl : TStringList;
399     ret : Boolean;
400 begin
401     ret := true;
402     datstl := TStringList.Create;
403     try
404         try
405             datstl.LoadFromFile(datfilepath);
406             if (resnum > 0) and (resnum <= datstl.Count) then begin
407                 if AnsiPos(FAbonString, datstl.Strings[resnum-1]) <> 1 then begin
408                     datstl.Strings[resnum-1] := FAbonString + datstl.Strings[resnum-1];
409                 end;
410             end;
411             datstl.SaveToFile(datfilepath);
412         except
413             ret := false;
414         end;
415     finally
416         datstl.Free;
417     end;
418     Result := ret;
419 end;
420 //firstres\82©\82çcount\8cÂ\82Ì\83\8c\83X\82Ì\90æ\93ª\82É\82 \82Ú\81[\82ñ\91}\93ü
421 function TAbon.ExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
422 var
423     datstl : TStringList;
424     i : Integer;
425     endnum : Integer; //\8fI\82í\82è\82Ì\83\8c\83X\94Ô
426     ret : Boolean;
427 begin
428     ret := true;
429     datstl := TStringList.Create;
430     try
431         try
432             datstl.LoadFromFile(datfilepath);
433             if (firstres > 0) and (firstres <= datstl.Count) then begin
434                 if firstres + count -1 > datstl.Count then begin
435                     endnum := datstl.Count;
436                 end else if count <= 0 then begin
437                     endnum := firstres + 1;
438                 end else begin
439                     endnum := firstres + count -1;
440                 end;
441
442                 for i := firstres to endnum do begin
443                     if AnsiPos(FAbonString, datstl.Strings[i-1]) <> 1 then begin
444                         datstl.Strings[i-1] := FAbonString + datstl.Strings[i-1];
445                     end;
446                 end;
447             end;
448             datstl.SaveToFile(datfilepath);
449         except
450             ret := false;
451         end;
452     finally
453         datstl.Free;
454     end;
455     Result := ret;
456 end;
457 //DAT\82ð\92¼\82É\82¢\82\82é\93z\82ç==========\82±\82±\82Ü\82Å=========================================
458
459 //\8c³\82É\96ß\82·\93z\82ç==================================================================
460 function TAbon.ReverseExecuteFile(datfilepath : String) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
461 var
462     datstl : TStringList;
463     i : Integer;
464     buf : String;
465     ret : Boolean;
466 begin
467     ret := true;
468     datstl := TStringList.Create;
469     try
470         try
471             datstl.LoadFromFile(datfilepath);
472             for i:=0 to datstl.Count -1  do begin
473                 if AnsiPos(FAbonString, datstl.Strings[i]) = 1 then begin
474                     buf := datstl.Strings[i];
475                     Delete(buf,1,Length(FAbonString));
476                     datstl.Strings[i] := buf;
477                 end;
478             end;
479             datstl.SaveToFile(datfilepath);
480         except
481             ret := false;
482         end;
483     finally
484         datstl.Free;
485     end;
486     Result := ret;
487
488 end;
489 function TAbon.ReverseExecuteFile(datfilepath : String; resnum : Integer) : Boolean; //DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
490 var
491     datstl : TStringList;
492     buf : String;
493     ret : Boolean;
494 begin
495     ret := true;
496     datstl := TStringList.Create;
497     try
498         try
499             datstl.LoadFromFile(datfilepath);
500             if (resnum > 0) and (resnum <= datstl.Count) then begin
501                 if AnsiPos(FAbonString, datstl.Strings[resnum-1]) = 1 then begin
502                     buf := datstl.Strings[resnum-1];
503                     Delete(buf,1,Length(FAbonString));
504                     datstl.Strings[resnum-1] := buf;
505                 end;
506             end;
507             datstl.SaveToFile(datfilepath);
508         except
509             ret := false;
510         end;
511     finally
512         datstl.Free;
513     end;
514     Result := ret;
515
516 end;
517 function TAbon.ReverseExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean;//DAT\83t\83@\83C\83\8b\82ð\92¼\82É\82¢\82\82é
518 var
519     datstl : TStringList;
520     i : Integer;
521     endnum : Integer; //\8fI\82í\82è\82Ì\83\8c\83X\94Ô
522     buf : String;
523     ret : Boolean;
524 begin
525     ret := true;
526     datstl := TStringList.Create;
527     try
528         try
529             datstl.LoadFromFile(datfilepath);
530             if (firstres > 0) and (firstres <= datstl.Count) then begin
531                 if firstres + count -1 > datstl.Count then begin
532                     endnum := datstl.Count;
533                 end else if count <= 0 then begin
534                     endnum := firstres + 1;
535                 end else begin
536                     endnum := firstres + count -1;
537                 end;
538                 for i := firstres to endnum do begin
539                     if AnsiPos(FAbonString, datstl.Strings[i-1]) = 1 then begin
540                         buf := datstl.Strings[i-1];
541                         Delete(buf,1,Length(FAbonString));
542                         datstl.Strings[i-1] := buf;
543                     end;
544                 end;
545             end;
546             datstl.SaveToFile(datfilepath);
547         except
548             ret := false;
549         end;
550     finally
551         datstl.Free;
552     end;
553     Result := ret;
554 end;
555 //\8c³\82É\96ß\82·\93z\82ç=================\82±\82±\82Ü\82Å=========================================
556 //\8c»\8dÝ\83Z\83b\83g\82³\82ê\82Ä\82¢\82éNGword.txt\82ð\8aJ\82­
557 procedure TAbon.EditNGwords();
558 begin
559     ShellExecute(0 ,nil,PChar(FNGwordpath),nil,nil,SW_SHOW);
560 end;
561 //\83|\83b\83v\83A\83b\83v\97p\94»\92è\8aÖ\90\94
562 function TAbon.CheckAbonPopupRes(line : String) :Boolean;
563 begin
564     if AbonPopupRes = true then begin
565         Result := FindNGwords(line);
566     end else begin
567         Result := false;
568     end;
569 end;
570 //\95¡\90\94\82ÌNG\83\8f\81[\83h\83e\83L\83X\83g\82ð\93Ç\82Ý\8d\9e\82Þ==============================================
571 //List\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
572 function TAbon.LoadListFile(path :String; listStringList : TStringList) : Boolean;
573 begin
574     try
575         listStringList.LoadFromFile(path);
576         Result := true;
577     except
578         listStringList.Append('\88ê\94Ê=NGword.txt');
579         listStringList.SaveToFile(path);
580         Result := false;
581     end;
582 end;
583 //List\82Ì\88ê\82Â\8e\9f\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
584 function TAbon.GoForward() : Boolean;
585 begin
586     FNGwordFileIndex := FNGwordFileIndex + 1;
587     Result := ReadNGwordslist(FNGwordFileIndex);
588 end;
589 //List\82Ì\88ê\82Â\91O\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ
590 function TAbon.GoBack() : Boolean;
591 begin
592     FNGwordFileIndex := FNGwordFileIndex -1;
593     Result := ReadNGwordslist(FNGwordFileIndex);
594 end;
595 //List\82Ì\82P\8ds\96Ú\82ð\93Ç\82Þ
596 procedure TAbon.GoHome();
597 begin
598     FNGwordFileIndex := 0;
599     ReadNGwordslist(FNGwordFileIndex);
600 end;
601 //List\82Ìline\8ds\96Ú\82ð\93Ç\82Þ
602 function TAbon.ReadNGwordslist(line : Integer) : Boolean;
603 var
604     liststl : TStringList;
605     linebuf : String;
606 begin
607     liststl := TStringList.Create;
608     try
609         if LoadListFile(Flistpath,liststl) = true then begin
610             if line < 0 then begin
611                 line := liststl.Count - 1;
612                 FNGwordFileIndex := liststl.Count - 1;
613             end else if line > liststl.Count - 1 then begin
614                 line := 0;
615                 FNGwordFileIndex := 0;
616             end;
617             linebuf := liststl.Strings[line];
618             FNGwordname := Copy(linebuf,1,AnsiPos('=',linebuf)-1);
619             Delete(linebuf,1,AnsiPos('=',linebuf));
620             SetNGwordpath(linebuf);
621             Result := true;
622         end else begin
623             Result := false;
624         end
625     finally
626         liststl.Free;
627     end;
628
629 end;
630 //\95¡\90\94\82ÌNG\83\8f\81[\83h\83e\83L\83X\83g\82ð\93Ç\82Ý\8d\9e\82Þ=====\82±\82±\82Ü\82Å=================================
631 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\8eÀ\8ds\8aÖ\90\94
632 procedure TAbon.IndividualAbon(var ThreadStrings : TStringList; SetResNumFile : String);
633 var
634         i : Integer;
635 begin
636         if FileExists(SetResNumFile) = true then begin
637         if LoadFromSetResNumFile(SetResNumFile) = true then begin
638                 for i := 0 to High(FAbonRes) do begin
639                  if (FAbonRes[i].Res <= ThreadStrings.Count) and (FAbonRes[i].Res > 0) then begin
640                         if FAbonRes[i].option = 0 then begin
641                         ThreadStrings.Strings[FAbonRes[i].Res-1] := '';
642                     end else begin
643                         ThreadStrings.Strings[FAbonRes[i].Res-1] := '\82 \82Ú\81[\82ñ<>\82 \82Ú\81[\82ñ<>\82 \82Ú\81[\82ñ<>\82 \82Ú\81[\82ñ<>';
644                     end;
645                  end;
646
647             end;
648         end;
649     end else begin
650         FIndividualFileName := SetResNumFile;
651         SetLength(FAbonRes,1);
652         FAbonRes[0].Res := 0;
653         FAbonRes[0].option := -1;
654     end;
655 end;
656 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý\8aÖ\90\94
657 function TAbon.LoadFromSetResNumFile(SetResNumFile : String) : Boolean;
658 var
659         bufStringList : TStringList;
660     bufLine : String;
661     i : Integer;
662 begin
663     bufStringList := TStringList.Create;
664     try
665         try
666                 bufStringList.LoadFromFile(SetResNumFile);
667             FIndividualFileName := SetResNumFile;
668             //\8bó\8ds\8dí\8f\9c
669             for i := bufStringList.Count-1 downto 0 do begin
670                         if bufStringList.Strings[i] = '' then begin
671                         bufStringList.Delete(i);
672                     end;
673             end;
674
675             //\83\81\83\82\83\8a\8am\95Û
676                 SetLength(FAbonRes,bufStringList.Count);
677             //\91ã\93ü
678             for i :=0 to bufStringList.Count - 1 do begin
679                         bufLine := Trim(bufStringList.Strings[i]);
680                     FAbonRes[i].Res :=  StrToInt(Copy(bufLine,1,AnsiPos('-',bufLine)-1));
681                 FAbonRes[i].option := StrToInt(Copy(bufLine,AnsiPos('-',bufLine)+1,1));
682             end;
683         except
684                 Result := false;
685             Exit;
686         end;
687     finally
688         bufStringList.Free;
689     end;
690     Result := true;
691 end;
692 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\83t\83@\83C\83\8b\82É\92Ç\89Á
693 procedure TAbon.AddIndividualAbon( ResNum : Integer ; option : Integer);
694 var
695         IndividualFile : TStringList;
696     linebuf : String;
697     i : Integer;
698 begin
699     IndividualFile := TStringList.Create;
700         if FAbonRes[0].Res <> 0 then begin
701         for i := 0 to High(FAbonRes) do begin
702             if FAbonRes[i].Res <> ResNum then begin
703                         linebuf := IntToStr(FAbonRes[i].Res) + '-' + IntToStr(FabonRes[i].option);
704                 IndividualFile.Append(linebuf);
705             end;
706         end;
707     end;
708     linebuf := IntToStr(ResNum) + '-' + IntToStr(option);
709     IndividualFile.Append(linebuf);
710     try
711         IndividualFile.SaveToFile(FIndividualFileName);
712     finally
713         IndividualFile.Free;
714     end;
715 end;
716 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\83t\83@\83C\83\8b\82©\82ç\8dí\8f\9c
717 procedure TAbon.DeleteIndividualAbon( ResNum : Integer);
718 var
719         IndividualFile : TStringList;
720     linebuf : String;
721     i : Integer;
722 begin
723     IndividualFile := TStringList.Create;
724         if FAbonRes[0].Res <> 0 then begin
725         for i := 0 to High(FAbonRes) do begin
726             if FAbonRes[i].Res <> ResNum then begin
727                         linebuf := IntToStr(FAbonRes[i].Res) + '-' + IntToStr(FabonRes[i].option);
728                 IndividualFile.Append(linebuf);
729             end;
730         end;
731     end;
732         if IndividualFile.Count <> 0 then begin
733         try
734                 IndividualFile.SaveToFile(FIndividualFileName);
735         finally
736                 IndividualFile.Free;
737         end;
738     end else begin
739         if FileExists(FIndividualFileName) = true then begin
740                 DeleteFile(FIndividualFileName);
741         end;
742     end;
743 end;
744 //\8cÂ\95Ê\82 \82Ú\81`\82ñ\82Ì\83\8a\83X\83g\82Ì\8cÂ\90\94\82ð\95Ô\82·
745 function TAbon.GetAbonResCount() : Integer;
746 var
747         i : Integer;
748 begin
749     if FAbonRes[0].Res = 0 then begin
750         Result := 0
751     end else begin
752                 i := High(FAbonRes);
753         Result := i+1;
754     end;
755 end;
756 //\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·
757 function TAbon.GetAbonResString(Num : Integer) : String;
758 begin
759         if (Num <= High(FAbonRes)) and (Num >= 0) then begin
760         Result := IntToStr(FAbonRes[Num].Res);
761     end else begin
762         Result := '';
763     end;
764 end;
765 //\83|\83b\83v\83A\83b\83v\82Ì\94»\92è\97p
766 function TAbon.CheckIndividualAbonList(ResNum : Integer) : Boolean;
767 var
768         i : Integer;
769 begin
770         if FAbonRes[0].Res <> 0 then begin
771         for i := 0 to High(FAbonRes) do begin
772                 if FAbonRes[i].Res = ResNum then begin
773                 Result := true;
774                 Exit;
775             end;
776         end;
777     end;
778     Result := false;
779     
780 end;
781 end.
782