193 lines
4.6 KiB
Plaintext
193 lines
4.6 KiB
Plaintext
Type TSDocxBorderRange = Class(TSDocxBorder)
|
|
Uses TSDocxEnumerations;
|
|
|
|
public
|
|
Function Init(rangeObj, borderType);
|
|
Function Apply();override;
|
|
|
|
private
|
|
Function GetBorderObjectByNode(node);
|
|
Function GetBorder(arr, hash);
|
|
Function CallFunction(fname, value);overload;
|
|
Function CallFunction(fname);overload;
|
|
Function SplitRun();
|
|
|
|
private
|
|
range_obj_;
|
|
border_type_;
|
|
|
|
public
|
|
Function WriteVisible(value);override;
|
|
Function ReadVisible();override;
|
|
Function WriteLineWidth(value);override;
|
|
Function ReadLineWidth();override;
|
|
Function WriteLineStyle(value);override;
|
|
Function ReadLineStyle();override;
|
|
Function WriteColorIndex(value);override;
|
|
Function ReadColorIndex();override;
|
|
Function WriteColor(value);override;
|
|
Function ReadColor();override;
|
|
Function WriteArtWidth(value);override;
|
|
Function ReadArtWidth();override;
|
|
Function WriteArtStyle(value);override;
|
|
Function ReadArtStyle();override;
|
|
|
|
End;
|
|
|
|
|
|
// ============== 实现 ================= //
|
|
Function TSDocxBorderRange.Init(rangeObj, borderType);
|
|
Begin
|
|
range_obj_ := rangeObj;
|
|
border_type_ := borderType;
|
|
class(TSDocxBorder).Init(nil);
|
|
End;
|
|
|
|
Function TSDocxBorderRange.Apply();override;
|
|
Begin
|
|
CallFunction(ThisFunction(class(TSDocxBorder).Apply));
|
|
End;
|
|
|
|
Function TSDocxBorderRange.SplitRun();
|
|
Begin
|
|
range_obj_.SplitRangeRun();
|
|
self.Parent.SetRangeObj(range_obj_);
|
|
End;
|
|
|
|
Function TSDocxBorderRange.GetBorder(arr, hash);
|
|
Begin
|
|
if arr.Entirety then
|
|
begin
|
|
if not ifnil(hash[arr.Entirety]) then nil;
|
|
hash[arr.Entirety] := true;
|
|
border := GetBorderObjectByNode(arr.Entirety);
|
|
end
|
|
else begin
|
|
trun := arr.TRun;
|
|
if not ifObj(trun.Root()) then return nil;
|
|
border := new TSDocxBorder(self.Application, self.Creator, self.Parent);
|
|
border.Init(trun.rPr.Bdr);
|
|
end
|
|
return border;
|
|
End;
|
|
|
|
Function TSDocxBorderRange.GetBorderObjectByNode(node);
|
|
Begin
|
|
name := node.GetName();
|
|
if name = "w:p" then
|
|
begin
|
|
obj := TOfficeObj("TParagraph");
|
|
obj.Init(node);
|
|
paragraph_obj := new TSDocxParagraph(self.Application, self.Creator, self.Parent);
|
|
paragraph_obj.Init(nil, obj, nil);
|
|
return paragraph_obj.Borders(border_type_);
|
|
end
|
|
else if name = "w:tbl" then
|
|
begin
|
|
obj := TOfficeObj("TTable");
|
|
obj.Init(node);
|
|
table_obj := new TSDocxTable(self.Application, self.Creator, self.Parent);
|
|
table_obj.Init(nil, obj);
|
|
return table_obj.Borders(border_type_);
|
|
end
|
|
else if name = "w:tc" then
|
|
begin
|
|
cell_obj := new TSDocxCell(self.Application, self.Creator, self.Parent);
|
|
cell_obj.Init(node);
|
|
return cell_obj.Borders(border_type_);
|
|
end
|
|
End;
|
|
|
|
Function TSDocxBorderRange.CallFunction(fname, value);overload;
|
|
Begin
|
|
SplitRun();
|
|
hash := array();
|
|
for i:=0 to range_obj_.Size()-1 do
|
|
begin
|
|
border := GetBorder(range_obj_[i], hash);
|
|
if ifnil(border) then continue;
|
|
pf := FindFunction(fname, border);
|
|
pf.Do(value);
|
|
end
|
|
End;
|
|
|
|
Function TSDocxBorderRange.CallFunction(fname);overload;
|
|
Begin
|
|
hash := array();
|
|
ret := nil;
|
|
for i:=0 to range_obj_.Size()-1 do
|
|
begin
|
|
border := GetBorder(range_obj_[i], hash);
|
|
if ifnil(border) then continue;
|
|
pf := FindFunction(fname, border);
|
|
r := pf.Do();
|
|
if ifnil(ret) then ret := r;
|
|
if ret <> r then return TSDocxEnumerations.WdUnderline();
|
|
end
|
|
return ret;
|
|
End;
|
|
|
|
// property
|
|
Function TSDocxBorderRange.WriteVisible(value);override;
|
|
Begin
|
|
CallFunction("WriteVisible", value);
|
|
End;
|
|
Function TSDocxBorderRange.ReadVisible();override;
|
|
Begin
|
|
return CallFunction("ReadVisible");
|
|
End;
|
|
|
|
Function TSDocxBorderRange.WriteLineWidth(value);override;
|
|
Begin
|
|
CallFunction("WriteLineWidth", value);
|
|
End;
|
|
Function TSDocxBorderRange.ReadLineWidth();override;
|
|
Begin
|
|
return CallFunction("ReadLineWidth");
|
|
End;
|
|
|
|
Function TSDocxBorderRange.WriteLineStyle(value);override;
|
|
Begin
|
|
CallFunction("WriteLineStyle", value);
|
|
End;
|
|
Function TSDocxBorderRange.ReadLineStyle();override;
|
|
Begin
|
|
return CallFunction("ReadLineStyle");
|
|
End;
|
|
|
|
Function TSDocxBorderRange.WriteColorIndex(value);override;
|
|
Begin
|
|
CallFunction("WriteColorIndex", value);
|
|
End;
|
|
Function TSDocxBorderRange.ReadColorIndex();override;
|
|
Begin
|
|
return CallFunction("ReadColorIndex");
|
|
End;
|
|
|
|
Function TSDocxBorderRange.WriteColor(value);override;
|
|
Begin
|
|
CallFunction("WriteColor", value);
|
|
End;
|
|
Function TSDocxBorderRange.ReadColor();override;
|
|
Begin
|
|
return CallFunction("ReadColor");
|
|
End;
|
|
|
|
Function TSDocxBorderRange.WriteArtWidth(value);override;
|
|
Begin
|
|
CallFunction("WriteArtWidth", value);
|
|
End;
|
|
Function TSDocxBorderRange.ReadArtWidth();override;
|
|
Begin
|
|
return CallFunction("ReadArtWidth");
|
|
End;
|
|
|
|
Function TSDocxBorderRange.WriteArtStyle(value);override;
|
|
Begin
|
|
CallFunction("WriteArtStyle", value);
|
|
End;
|
|
Function TSDocxBorderRange.ReadArtStyle();override;
|
|
Begin
|
|
return CallFunction("ReadArtStyle");
|
|
End;
|