⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uflagbase.pas

📁 自己写的一个 RSS 阅读器
💻 PAS
字号:
unit uFlagBase;

interface

uses SysUtils,MSXML2_TLB,ComCtrls,Classes,Graphics;

type
  TFlagBase = class;
  TFlagItem = class;

  TFlagBase = class(TObject)
  private
    FDOC:IXMLDOMDocument2;
    FFlagNode:IXMLDOMNode;
    FItems:TList;
  protected
    function Get_Item(Index:Integer):TFlagItem;

    function Get_Count(): integer;
    function GetUnUsedID:Integer;
    function NumberInList(number:Integer):Boolean;
  public
    constructor Create(theDoc: IXMLDOMDocument2);
    function Get_ItemByFlagID(aID : integer): TFlagItem;
    function Add:TFlagItem;
    procedure Delete(Index:integer); overload;
    procedure Delete(Item:TFlagItem); overload;
    property Item[Index: Integer]: TFlagItem read Get_Item;
    property Count:Integer read Get_Count;
    procedure Save(AFileName:string);
  end;
  
  TFlagItem = class(TObject)
  private
    FNode:IXMLDOMNode;
    FFlagID,FImageIndex:Integer;
    FCaption,FFontColor,FBGColor:string;
  protected
    procedure Set_Caption(Value:String);
    procedure Set_FlagID(Value:Integer);
    procedure Set_ImageIndex(Value:integer);
    procedure Set_FontColor(Value:String);
    procedure Set_BGColor(Value:String);
  public
    constructor Create(theNode: IXMLDOMNode);
    property FlagID:Integer read FFlagID write Set_FlagID;
    property ImageIndex :Integer read FImageIndex write Set_ImageIndex;
    property Caption:string read FCaption write Set_Caption;

    property FontColor:string read FFontColor write Set_FontColor;
    property BGColor :string read FBGColor write Set_BGColor;
  end;

var
  FlagList:TFlagBase;
procedure GetFlagList(FileName:string);
implementation

uses uConstants;

procedure GetFlagList(FileName:string);
var Doc:IXMLDOMDocument2;
begin
  Doc:=CoDOMDocument.Create;
  Doc.load(FileName);
  FlagList := TFlagBase.Create(doc);
end;

{FlagBase}
constructor TFlagBase.Create(theDoc: IXMLDOMDocument2);
var
  ItemsNodes:IXMLDOMNodeList;
  i:Integer;
begin
  FDOC := theDoc;
  FItems := TList.Create;
  FItems.Clear;
  FFlagNode:=FDOC.selectSingleNode('flag');
  ItemsNodes := FFlagNode.selectNodes('item');
  if (ItemsNodes.length>0) then
  for i := 0 to ItemsNodes.length - 1 do    // Iterate
  begin
    FItems.Add(TFlagItem.Create(ItemsNodes.item[i]))
  end;    // for
end;

function TFlagBase.NumberInList(number:Integer):Boolean;
var i:Integer;
begin
  Result :=False;
  for i := 0 to FItems.Count - 1 do    // Iterate
    begin
      if number=TFlagItem(FItems.Items[i]).FlagID then
      begin
        Result := True;
        Break;
      end;
    end;    // for
end;

function TFlagBase.GetUnUsedID:Integer;
var i:Integer;
  ID_Array:array of Integer;
  UnUesedNumber:Integer;
begin
  SetLength(ID_Array,FItems.Count);
  for i := 0 to FItems.Count - 1 do    // Iterate
  begin
    ID_Array[i]:= TFlagItem(FItems.Items[i]).FlagID;
  end;    // for
  UnUesedNumber:=2;
  while NumberInList(UnUesedNumber)  do
  begin
    Inc(UnUesedNumber);
  end;
  Result := UnUesedNumber;
end;

function TFlagBase.Get_Item(Index:Integer):TFlagItem;
begin
  Result := TFlagItem(FItems.Items[Index]);
end;
function TFlagBase.Get_Count :Integer;
begin
  Result := FItems.Count;
end;
function TFlagBase.Get_ItemByFlagID(aID : integer): TFlagItem;
var i:Integer;
begin
  Result := nil;
  for i := 0 to FItems.Count - 1 do    // Iterate
  begin
    if TFlagItem(FItems.Items[i]).FlagID=aID then
    begin
       Result := TFlagItem(FItems.Items[i]);
       Break;
    end;
  end;    // for
end;

function TFlagBase.Add:TFlagItem;
var
  node:IXMLDOMNode;
  newItem:TFlagItem;
begin
  node:=FDOC.selectSingleNode('flag').appendChild(FDOC.createElement('item'));
  newItem := TFlagItem.Create(node);
  newItem.FlagID := GetUnUsedID;
  newItem.ImageIndex := 4;
  newItem.Caption:='New Caption';
  newItem.FontColor := 'clBlack';
  newItem.BGColor := 'clWhite';
  FItems.Add(newItem);
  Result := newItem;
end;

procedure TFlagBase.Save(AFileName:string);
begin
  FDOC.save(AFileName);
end;
procedure TFlagBase.Delete(Index:integer);
begin
  FFlagNode.removeChild(TFlagItem(FItems.Items[Index]).FNode);
  FItems.Delete(Index);
end;
procedure TFlagBase.Delete(Item:TFlagItem);
var i:Integer;
begin
  for i := 0 to FItems.Count - 1 do    // Iterate
    begin
      if TFlagItem(FItems.Items[i])=Item then
      begin
        Delete(i);
        Break;
      end;
    end;    // for
end;

{ITems}
constructor TFlagItem.Create(theNode: IXMLDOMNode);
begin
  FNode := theNode ;
  if GetNodeAttrVal(FNode,'flagID')='' then
    FFlagID := 0
  else
    FFlagID  := StrToInt(GetNodeAttrVal(FNode,'flagID'));
  if GetNodeAttrVal(FNode,'imageIndex')='' then
    FImageIndex := 4
  else
    FImageIndex  := StrToInt(GetNodeAttrVal(FNode,'imageIndex'));
  if FImageIndex<4 then
    FImageIndex := 4;
    
  FCaption := GetNodeAttrVal(FNode,'caption');
  FFontColor  := GetNodeAttrVal(FNode,'fontColor');
  FBGColor  := GetNodeAttrVal(FNode,'bgColor');
  if FFontColor='' then  FontColor:='clBlack';
  if FBGColor='' then  BGColor:='clWhite';
end;

procedure TFlagItem.Set_Caption(Value:string);
begin
  FCaption := Value;
  SetNodeAttrVal(FNode,'caption',Value);
end;
procedure TFlagItem.Set_FlagID(Value:Integer);
begin
  FFlagID := Value;
  SetNodeAttrVal(FNode,'flagID',IntToStr(Value));
end;
procedure TFlagItem.Set_ImageIndex(Value:integer);
begin
  FImageIndex := Value;
  SetNodeAttrVal(FNode,'imageIndex',IntToStr(Value));
end;
procedure TFlagItem.Set_FontColor(Value:string);
begin
  FFontColor := Value;
  SetNodeAttrVal(FNode,'fontColor',Value);
end;
procedure TFlagItem.Set_BGColor(Value:string);
begin
  FBGColor := Value;
  SetNodeAttrVal(FNode,'bgColor',Value);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -