OSDN Git Service

NGワードの拡張作業
authorh677 <h677>
Sun, 4 Feb 2007 14:12:52 +0000 (14:12 +0000)
committerh677 <h677>
Sun, 4 Feb 2007 14:12:52 +0000 (14:12 +0000)
GikoDataModule.dfm
GikoDataModule.pas
GikoSystem.pas
NGWordEdit.dfm [new file with mode: 0644]
NGWordEdit.pas [new file with mode: 0644]
NGWordUnit.pas [new file with mode: 0644]
gikoNavi.dpr
gikoNavi.res

index a1fdea9..7471bdc 100644 (file)
@@ -1311,6 +1311,12 @@ object GikoDM: TGikoDM
       Hint = #31227#36578#12375#12390#12356#12427#26495#12398'URL'#12434#26908#32034#12377#12427
       OnExecute = NewBoardSearchActionExecute
     end
+    object NGWordEditFormAction: TAction
+      Category = 'NGword'
+      Caption = 'NG'#12527#12540#12489#32232#38598#12501#12457#12540#12512
+      Hint = 'NG'#12527#12540#12489#32232#38598#12501#12457#12540#12512#12458#12540#12503#12531
+      OnExecute = NGWordEditFormActionExecute
+    end
   end
   object ToobarImageList: TImageList
     Left = 44
index 8d83cdf..5bf4dae 100644 (file)
@@ -231,6 +231,7 @@ type
     NewImageLinkToClipBoardAction: TAction;
     SetForcusForAddresBarAction: TAction;
     NewBoardSearchAction: TAction;
+    NGWordEditFormAction: TAction;
        procedure EditNGActionExecute(Sender: TObject);
        procedure ReloadActionExecute(Sender: TObject);
        procedure GoFowardActionExecute(Sender: TObject);
@@ -434,6 +435,7 @@ type
     procedure AllImageLinkToClipbordActionExecute(Sender: TObject);
     procedure SetForcusForAddresBarActionExecute(Sender: TObject);
     procedure NewBoardSearchActionExecute(Sender: TObject);
+    procedure NGWordEditFormActionExecute(Sender: TObject);
   private
        { Private \90é\8c¾ }
        procedure ClearResFilter;
@@ -486,7 +488,7 @@ uses
        GikoBayesian, About, ShellAPI,
        RoundName, RoundData, Menus, ListViewUtils,
        ThreadControl, GikoMessage, InputAssist,
-    DefaultFileManager, Forms, NewBoardURL;
+    DefaultFileManager, Forms, NewBoardURL, NGWordEdit;
 
 const
        MSG_ERROR : string = '\83G\83\89\81[';
@@ -4336,5 +4338,17 @@ begin
     end;
 end;
 
+procedure TGikoDM.NGWordEditFormActionExecute(Sender: TObject);
+var
+    form: TNGWordEditForm;
+begin
+    form := TNGWordEditForm.Create(Self);
+    try
+        form.ShowModal;
+    finally
+        form.Release;
+    end;
+end;
+
 end.
 
index 7dc995a..9e07506 100644 (file)
@@ -262,7 +262,7 @@ const
        ZERO_DATE: Integer      = 25569;
        BETA_VERSION_NAME_E = 'beta';
        BETA_VERSION_NAME_J = 'ÊÞÀ';
-       BETA_VERSION                            = 54;
+       BETA_VERSION                            = 55;
        BETA_VERSION_BUILD      = '';                           //!< debug\94Å\82È\82Ç
        APP_NAME                                                = 'gikoNavi';
        BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
diff --git a/NGWordEdit.dfm b/NGWordEdit.dfm
new file mode 100644 (file)
index 0000000..e1ec47b
--- /dev/null
@@ -0,0 +1,209 @@
+object NGWordEditForm: TNGWordEditForm
+  Left = 278
+  Top = 178
+  Width = 490
+  Height = 401
+  Caption = 'NGWordEditForm'
+  Color = clBtnFace
+  Font.Charset = SHIFTJIS_CHARSET
+  Font.Color = clWindowText
+  Font.Height = -12
+  Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
+  Font.Style = []
+  Menu = MainMenu1
+  OldCreateOrder = False
+  OnCreate = FormCreate
+  OnDestroy = FormDestroy
+  PixelsPerInch = 96
+  TextHeight = 12
+  object Panel1: TPanel
+    Left = 0
+    Top = 0
+    Width = 482
+    Height = 153
+    Align = alTop
+    BevelOuter = bvNone
+    Caption = 'Panel1'
+    TabOrder = 0
+    object Panel3: TPanel
+      Left = 359
+      Top = 0
+      Width = 123
+      Height = 153
+      Align = alRight
+      BevelOuter = bvLowered
+      Caption = 'Panel3'
+      TabOrder = 0
+      object AddButton: TButton
+        Left = 24
+        Top = 16
+        Width = 75
+        Height = 25
+        Caption = #36861#21152
+        TabOrder = 0
+        OnClick = AddButtonClick
+      end
+      object DeleteButton: TButton
+        Left = 24
+        Top = 40
+        Width = 75
+        Height = 25
+        Caption = #21066#38500
+        TabOrder = 1
+        OnClick = DeleteButtonClick
+      end
+      object Button3: TButton
+        Left = 24
+        Top = 80
+        Width = 75
+        Height = 25
+        Caption = 'Button3'
+        TabOrder = 2
+      end
+      object Button4: TButton
+        Left = 24
+        Top = 104
+        Width = 75
+        Height = 25
+        Caption = 'Button4'
+        TabOrder = 3
+      end
+    end
+    object GikoListView1: TGikoListView
+      Left = 0
+      Top = 0
+      Width = 359
+      Height = 153
+      Align = alClient
+      Checkboxes = True
+      Columns = <>
+      GridLines = True
+      ReadOnly = True
+      RowSelect = True
+      TabOrder = 1
+      ViewStyle = vsReport
+      OnSelectItem = GikoListView1SelectItem
+    end
+  end
+  object Panel2: TPanel
+    Left = 0
+    Top = 153
+    Width = 482
+    Height = 202
+    Align = alClient
+    BevelOuter = bvNone
+    Caption = 'Panel2'
+    TabOrder = 1
+    object Panel4: TPanel
+      Left = 0
+      Top = 0
+      Width = 482
+      Height = 41
+      Align = alTop
+      BevelOuter = bvNone
+      TabOrder = 0
+      object Label1: TLabel
+        Left = 16
+        Top = 8
+        Width = 48
+        Height = 12
+        Caption = #36969#21512#22580#25152
+      end
+      object Label2: TLabel
+        Left = 237
+        Top = 11
+        Width = 47
+        Height = 12
+        Caption = 'NG'#12527#12540#12489
+      end
+      object ComboBox1: TComboBox
+        Left = 80
+        Top = 8
+        Width = 145
+        Height = 20
+        ItemHeight = 12
+        ItemIndex = 0
+        TabOrder = 0
+        Text = #20840#12390
+        Items.Strings = (
+          #20840#12390
+          #21517#21069#27396
+          #12513#12540#12523#27396
+          #26085#20184#12539'ID'
+          #26412#25991)
+      end
+      object NGWordEdit: TEdit
+        Left = 296
+        Top = 8
+        Width = 161
+        Height = 20
+        TabOrder = 1
+        Text = 'NGWordEdit'
+      end
+    end
+    object Panel5: TPanel
+      Left = 359
+      Top = 41
+      Width = 123
+      Height = 161
+      Align = alRight
+      BevelOuter = bvLowered
+      Caption = 'Panel5'
+      TabOrder = 1
+      object ModifiedNGButton: TButton
+        Left = 24
+        Top = 65
+        Width = 75
+        Height = 25
+        Caption = #22793#26356
+        TabOrder = 0
+      end
+      object AddNGButton: TButton
+        Left = 24
+        Top = 16
+        Width = 75
+        Height = 25
+        Caption = #36861#21152
+        TabOrder = 1
+        OnClick = AddNGButtonClick
+      end
+      object DeleteNGButton: TButton
+        Left = 24
+        Top = 41
+        Width = 75
+        Height = 25
+        Caption = #21066#38500
+        TabOrder = 2
+        OnClick = DeleteNGButtonClick
+      end
+    end
+    object GikoListView2: TGikoListView
+      Left = 0
+      Top = 41
+      Width = 359
+      Height = 161
+      Align = alClient
+      Columns = <>
+      GridLines = True
+      ReadOnly = True
+      RowSelect = True
+      TabOrder = 2
+      ViewStyle = vsReport
+    end
+  end
+  object MainMenu1: TMainMenu
+    Left = 376
+    Top = 48
+    object File1: TMenuItem
+      Caption = 'File'
+      object Load1: TMenuItem
+        Caption = 'Load'
+        OnClick = Load1Click
+      end
+      object Save1: TMenuItem
+        Caption = 'Save'
+        OnClick = Save1Click
+      end
+    end
+  end
+end
diff --git a/NGWordEdit.pas b/NGWordEdit.pas
new file mode 100644 (file)
index 0000000..95708f5
--- /dev/null
@@ -0,0 +1,232 @@
+unit NGWordEdit;
+
+interface
+
+uses
+  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
+  Dialogs, ExtCtrls, StdCtrls, ComCtrls, GikoListView, Menus, GikoXMLDoc,
+  NGWordUnit;
+
+type
+  TNGWordEditForm = class(TForm)
+    Panel1: TPanel;
+    Panel2: TPanel;
+    Panel3: TPanel;
+    AddButton: TButton;
+    DeleteButton: TButton;
+    Button3: TButton;
+    Button4: TButton;
+    Panel4: TPanel;
+    Panel5: TPanel;
+    GikoListView2: TGikoListView;
+    GikoListView1: TGikoListView;
+    ComboBox1: TComboBox;
+    Label1: TLabel;
+    NGWordEdit: TEdit;
+    Label2: TLabel;
+    ModifiedNGButton: TButton;
+    AddNGButton: TButton;
+    DeleteNGButton: TButton;
+    MainMenu1: TMainMenu;
+    File1: TMenuItem;
+    Load1: TMenuItem;
+    Save1: TMenuItem;
+    procedure Load1Click(Sender: TObject);
+    procedure Save1Click(Sender: TObject);
+    procedure FormDestroy(Sender: TObject);
+    procedure FormCreate(Sender: TObject);
+    procedure GikoListView1SelectItem(Sender: TObject; Item: TListItem;
+      Selected: Boolean);
+    procedure AddNGButtonClick(Sender: TObject);
+    procedure DeleteNGButtonClick(Sender: TObject);
+    procedure AddButtonClick(Sender: TObject);
+    procedure DeleteButtonClick(Sender: TObject);
+  private
+    { Private \90é\8c¾ }
+    FNGWordList : TNGWordList;
+    function AddNGWord(ngWord: TNGWords): TListItem;
+    procedure AddWord(word: TNGWord);
+  public
+    { Public \90é\8c¾ }
+  end;
+
+var
+  NGWordEditForm: TNGWordEditForm;
+
+implementation
+
+uses
+    GikoSystem;
+{$R *.dfm}
+
+procedure TNGWordEditForm.Load1Click(Sender: TObject);
+var
+    fname : String;
+    i: Integer;
+begin
+    fname := GikoSys.GetAppDir + 'ngwords.xml';
+    if (FNGWordList <> nil) then begin
+        FNGWordList.Free;
+    end else begin
+        FNGWordList := TNGWordList.Create;
+    end;
+    FNGWordList.LoadFromFile(fname);
+    GikoListView1.Items.Clear;
+    for i :=0 to FNGWordList.Count - 1 do begin
+        AddNGWord(TNGWords(FNGWordList.Items[i]));
+    end;
+end;
+function TNGWordEditForm.AddNGWord(ngWord: TNGWords): TListItem;
+begin
+    Result := GikoListView1.Items.Add;
+    Result.ImageIndex := -1;
+    Result.Caption := '';
+    Result.SubItems.Clear;
+    Result.SubItems.Add(ngWord.ToString);
+    Result.Data := ngWord;
+end;
+
+procedure TNGWordEditForm.Save1Click(Sender: TObject);
+begin
+    if (FNGWordList <> nil) then begin
+        FNGWordList.SaveToFrile(GikoSys.GetAppDir + 'ngwords2.xml');
+    end;
+end;
+
+procedure TNGWordEditForm.FormDestroy(Sender: TObject);
+begin
+    if (FNGWordList <> nil) then begin
+        FreeAndNil(FNGWordList);
+    end;
+end;
+
+procedure TNGWordEditForm.FormCreate(Sender: TObject);
+var
+    column1,column2: TListColumn;
+begin
+     GikoListView1.Columns.BeginUpdate;
+       column1 := GikoListView1.Columns.Add;
+       column1.ImageIndex := -1;
+       column1.Caption := '\93§\96¾';
+    column1.DisplayName := '\93§\96¾';
+       column1.Width := 40;
+       column1 := GikoListView1.Columns.Add;
+       column1.ImageIndex := -1;
+       column1.Caption := 'NG\83\8f\81[\83h';
+    column1.DisplayName := 'NG\83\8f\81[\83h';
+       column1.Width := 250;
+    GikoListView1.Columns.EndUpdate;
+
+
+    GikoListView2.Columns.BeginUpdate;
+       column2 := GikoListView2.Columns.Add;
+       column2.ImageIndex := -1;
+       column2.Caption := '\93K\89\9e\8fê\8f\8a';
+    column2.DisplayName := '\93K\89\9e\8fê\8f\8a';
+       column2.Width := 100;
+       column2 := GikoListView2.Columns.Add;
+       column2.ImageIndex := -1;
+       column2.Caption := '\83\8f\81[\83h';
+    column2.DisplayName := '\83\8f\81[\83h';
+       column2.Width := 190;
+    GikoListView2.Columns.EndUpdate;
+
+end;
+// \8fã\95\94\83\8a\83X\83g\91I\91ð\83C\83x\83\93\83g
+procedure TNGWordEditForm.GikoListView1SelectItem(Sender: TObject;
+  Item: TListItem; Selected: Boolean);
+var
+    ngWord : TNGWords;
+    i: Integer;
+begin
+       if (Item <> nil) and (Item.Data <> nil) then begin
+        ngWord := TNGWords(item.Data);
+        GikoListView2.items.Clear;
+        for i := 0 to ngWord.Count - 1 do begin
+            AddWord( TNGWord(ngWord.Items[i]) );
+        end;
+       end;
+end;
+// \89º\95\94\83\8a\83X\83g\92Ç\89Á\83\81\83\\83b\83h
+procedure TNGWordEditForm.AddWord(word: TNGWord);
+var
+    litem: TListItem;
+begin
+    litem := GikoListView2.Items.Add;
+    litem.ImageIndex := -1;
+    case Integer(word.NGType) of
+        Integer(gntAll):   litem.Caption := '\91S\95\94';
+        Integer(gntName):  litem.Caption := '\96¼\91O\97\93';
+        Integer(gntMail):  litem.Caption := '\83\81\81[\83\8b\97\93';
+        Integer(gntDateId):litem.Caption := '\93ú\95tID\97\93';
+        Integer(gntBody):  litem.Caption := '\96{\95¶';
+    end;
+    litem.SubItems.Clear;
+    litem.SubItems.Add(word.Word);
+    litem.Data := word;
+end;
+//! NG\83\8f\81[\83h\92Ç\89Á\83{\83^\83\93
+procedure TNGWordEditForm.AddNGButtonClick(Sender: TObject);
+var
+    litem: TListItem;
+    word: TNGWord;
+begin
+    // \8c»\8dÝ\91I\91ð\82³\82ê\82Ä\82¢\82é\8ds\82ð\8eæ\93¾\82·\82é
+    litem := GikoListView1.Selected;
+    if (litem <> nil) then begin
+        if NGWordEdit.Text <> '' then begin
+            word := TNGWord.Create;
+            word.NGType := TGikoNGType(ComboBox1.ItemIndex);
+            word.Word := NGWordEdit.Text;
+            TNGWords(litem.Data).Add(word);
+            AddWord(word);
+            litem.SubItems.Clear;
+            litem.SubItems.Add(TNGWords(litem.Data).ToString);
+        end else begin
+            ShowMessage('NG\83\8f\81[\83h\82Í\8bó\97\93\82Å\93o\98^\82Å\82«\82Ü\82¹\82ñ');
+        end;
+    end;
+end;
+//! NG\83\8f\81[\83h\8dí\8f\9c\83{\83^\83\93
+procedure TNGWordEditForm.DeleteNGButtonClick(Sender: TObject);
+var
+    litem, litem2: TListItem;
+begin
+    // \8c»\8dÝ\91I\91ð\82³\82ê\82Ä\82¢\82é\8ds\82ð\8eæ\93¾\82·\82é
+    litem := GikoListView1.Selected;
+    if (litem <> nil) then begin
+        litem2 := GikoListView2.Selected;
+        if litem2 <> nil then begin
+            TNGWords(litem.Data).Delete(TNGWord(litem2.Data));
+            litem.Caption := TNGWords(litem.Data).ToString;
+        end;
+        GikoListView2.DeleteSelected;
+    end;
+end;
+//!
+procedure TNGWordEditForm.AddButtonClick(Sender: TObject);
+var
+    ngWords: TNGWords;
+begin
+    if (FNGWordList <> nil) then begin
+        ngWords := TNGWords.Create;
+        FNGWordList.Add(ngWords);
+        GikoListView1.Selected := AddNGWord(ngWords);
+        GikoListView1.SetFocus;
+    end;
+end;
+//!
+procedure TNGWordEditForm.DeleteButtonClick(Sender: TObject);
+var
+    litem: TListItem;
+begin
+    // \8c»\8dÝ\91I\91ð\82³\82ê\82Ä\82¢\82é\8ds\82ð\8eæ\93¾\82·\82é
+    litem := GikoListView1.Selected;
+    if (litem <> nil) and (FNGWordList <> nil) then begin
+        FNGWordList.Delte( TNGWords(litem.Data));
+        GikoListView1.DeleteSelected;
+    end;
+end;
+
+
+end.
diff --git a/NGWordUnit.pas b/NGWordUnit.pas
new file mode 100644 (file)
index 0000000..3cddef3
--- /dev/null
@@ -0,0 +1,257 @@
+unit NGWordUnit;
+
+interface
+uses
+    Windows,Messages, ShellAPI, SysUtils, Classes,StdCtrls,StrUtils,
+    GikoXMLDoc;
+
+type
+       //\83\8a\83X\83g\82Ì\95\\8e¦\83A\83C\83e\83\80\91I\91ð
+       TGikoNGType = (gntAll, gntName, gntMail, gntDateId, gntBody);
+
+    {\
+    NG\83\8f\81[\83h\83N\83\89\83X
+    }
+       TNGWord = class( TObject )
+       private
+        FRank : Integer;
+        FNGType : TGikoNGType;
+        FWord : String;
+       public
+        procedure ReadXMLElement(element :IXMLNode);
+        function ToXMLString(): String;
+        property Rank : Integer read FRank write FRank;
+        property NGType : TGikoNGType read FNGType write FNGType;
+        property Word :  String read FWord write FWord;
+       end;
+
+    {\
+    NG\83\8f\81[\83h\8fW\8d\87\83N\83\89\83X
+    }
+       TNGWords = class( TList )
+       private
+        FRank : Integer;
+        FInvisible: Boolean;
+       public
+        constructor Create;
+        procedure Free;
+        property Rank : Integer read FRank write FRank;
+        property Invisible : Boolean read FInvisible write FInvisible;
+        function ReadXMLElement(element :IXMLNode): Boolean;
+        function ToXMLString(): String;
+        function ToString(): String;
+        procedure Delete(word: TNGWord); overload;
+       end;
+
+    {\
+    NG\83\8f\81[\83h\8aÇ\97\9d\83N\83\89\83X
+    }
+    TNGWordList = class( TList )
+    private
+    public
+        procedure Free;
+        procedure LoadFromFile(fileName: String);
+        procedure SaveToFrile(fileName: String);
+        procedure Delte(NGWords: TNGWords); overload;
+    end;
+
+    function CompareRank(Item1, Item2: Pointer): Integer;
+
+implementation
+
+uses
+    MojuUtils, Sort;
+
+function CompareRank(Item1, Item2: Pointer): Integer;
+begin
+    if TObject(item1) is TNGWords then begin
+        Result := CompareInt(
+            TNGWords(Item1).Rank, TNGWords(Item2).Rank);
+    end else begin
+        Result := CompareInt(
+            TNGWord(Item1).Rank, TNGWord(Item2).Rank);
+    end;
+end;
+constructor TNGWords.Create;
+begin
+    FRank := 0;
+end;
+procedure TNGWords.Free;
+var
+    i: Integer;
+begin
+    for i := 0 to Count - 1 do begin
+        TObject(Items[i]).Free;
+    end;
+    inherited Free;
+end;
+function TNGWords.ReadXMLElement(element :IXMLNode): Boolean;
+var
+    i, bound : Integer;
+    NGWordNode: IXMLNode;
+    NG: TNGWord;
+begin
+    Result := False;
+    if element.NodeName = 'NGWords' then begin
+        Rank := StrToIntDef(element.Attributes['rank'],
+                MaxInt);
+        Invisible := StrToBoolDef(element.Attributes['invisible'],
+                False);
+        bound := element.ChildNodes.Count - 1;
+        for i := 0 to bound do begin
+            NGWordNode := element.ChildNodes[i];
+            if NGWordNode.NodeName = 'NGWord' then begin
+                NG := TNGWord.Create;
+                NG.ReadXMLElement( NGWordNode );
+                Add(NG);
+            end;
+        end;
+        Sort(@CompareRank);
+        Result := True;
+    end;
+end;
+function TNGWords.ToXMLString(): String;
+var
+    i: Integer;
+begin
+    Result := '<NGWords ' +
+        'rank="' + IntToStr(FRank) + '" ' +
+        'invisible="' + BoolToStr(Invisible) + '" >'#13#10;
+    for i := 0 to Count - 1 do begin
+        Result := Result + TNGWord(Items[i]).ToXMLString + #13#10;
+    end;
+    Result := Result + '</NGWords>';
+end;
+function TNGWords.ToString(): String;
+var
+    i: Integer;
+begin
+    Result := '';
+    for i := 0 to Count - 1 do begin
+        Result := Result + TNGWord(Items[i]).Word + ' , ';
+    end;
+end;
+procedure TNGWords.Delete(word: TNGWord);
+var
+    i: Integer;
+begin
+    for i := Count - 1 downto 0 do begin
+        if ( Items[i] = word ) then begin
+            TNGWord(Items[i]).Free;
+            Self.Delete(i);
+            break;
+        end;
+    end;
+end;
+procedure TNGWord.ReadXMLElement(element :IXMLNode);
+begin
+  FRank := StrToIntDef(element.Attributes['rank'],
+                MaxInt);
+  FNGType := TGikoNGType(StrToIntDef(
+      Trim(element.Attributes['ngtype']),
+      Integer(gntAll)));
+
+  FWord := Trim(element.Attributes['word']);
+  if FWord <> '' then begin
+    FWord := MojuUtils.UnSanitize( FWord );
+  end;
+end;
+function TNGWord.ToXMLString(): String;
+begin
+    Result := '<NGWord ' +
+        'rank="' + IntToStr(FRank) + '" ' +
+        'ngtype="' + IntToStr(Integer(FNGType)) + '" ' +
+        'word="' +  MojuUtils.Sanitize(FWord) + '" />';
+end;
+
+procedure TNGWordList.Free;
+var
+    i: Integer;
+begin
+    for i := Self.Count - 1 downto 0 do begin
+         TNGWords(Self.Items[i]).Free;
+    end;
+    inherited Free;
+end;
+
+procedure TNGWordList.SaveToFrile(fileName: String);
+var
+    xmlStrings: TStringList;
+    i: Integer;
+begin
+    xmlStrings := TStringList.Create;
+    try
+        xmlStrings.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
+        xmlStrings.Add('<root>');
+        for i := 0 to Self.Count - 1 do begin
+            xmlStrings.Add(
+                TNGWords(Self.Items[i]).ToXMLString);
+
+        end;
+        xmlStrings.Add('</root>');
+        xmlStrings.SaveToFile(fileName);
+    finally
+        xmlStrings.Free;
+    end;
+end;
+
+procedure TNGWordList.LoadFromFile(fileName: String);
+
+var
+       i, bound                : Integer;
+       XMLDoc                  : IXMLDocument;
+       XMLNode: IXMLNode;
+    NG : TNGWords;
+{$IFDEF DEBUG}
+       st, rt : Cardinal;
+{$ENDIF}
+begin
+{$IFDEF DEBUG}
+       st := GetTickCount;
+{$ENDIF}
+       if FileExists( FileName ) then begin
+        if (Self.Count > 0) then begin
+            Self.Free;
+            Self.Capacity := 0;
+        end;
+               try
+                       XMLDoc := IXMLDocument.Create;
+                       //XMLDoc := LoadXMLDocument(FileName);
+                       LoadXMLDocument(FileName, XMLDoc);
+                       try
+                               XMLNode := XMLDoc.DocumentElement;
+
+                               if XMLNode.NodeName = 'root' then begin
+                                       bound := XMLNode.ChildNodes.Count - 1;
+                                       for i := 0 to bound do begin
+                        NG := TNGWords.Create;
+                        if (NG.ReadXMLElement(XMLNode.ChildNodes[i])) then
+                            Self.Add(NG);
+                                       end;
+                               end;
+                Sort(@CompareRank);
+                       finally
+                               XMLDoc.Free;
+                       end;
+               except
+               end;
+       end;
+{$IFDEF DEBUG}
+       rt := GetTickCount - st;
+       Writeln('Runtime(Load NGWords) : ' + IntToStr(rt) + ' ms');
+{$ENDIF}
+end;
+procedure TNGWordList.Delte(NGWords: TNGWords);
+var
+    i: Integer;
+begin
+    for i := Count - 1 downto 0 do begin
+        if ( Items[i] = NGWords ) then begin
+            TNGWords(Items[i]).Free;
+            Self.Delete(i);
+            break;
+        end;
+    end;
+end;
+
+end.
index 8b3dfeb..7c4fa51 100644 (file)
@@ -76,7 +76,9 @@ uses
   MoveHistoryItem in 'MoveHistoryItem.pas',
   SambaTimer in 'SambaTimer.pas',
   HistoryList in 'HistoryList.pas',
-  NewBoardURL in 'NewBoardURL.pas' {NewBoardURLForm};
+  NewBoardURL in 'NewBoardURL.pas' {NewBoardURLForm},
+  NGWordUnit in 'NGWordUnit.pas',
+  NGWordEdit in 'NGWordEdit.pas' {NGWordEditForm};
 
 {$R *.RES}
 {$R gikoResource.res}
index 4d0dfdd..caf6b00 100644 (file)
Binary files a/gikoNavi.res and b/gikoNavi.res differ