?? uflagbase.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 + -