📄 htmlsubs.pas
字号:
property ID: string read FID; {ID attribute of control}
property YValue: integer read FYValue;
property AttributeValue[const AttrName: string]: string read GetAttribute;
property Title: string read FTitle write FTitle;
end;
TImageFormControlObj = class(TFormControlObj)
private
MyImage: TImageObj;
public
XPos, YPos, XTmp, YTmp: integer; {click position}
constructor Create(AMasterList: TSectionList; Position: integer; L: TAttributeList);
procedure ProcessProperties(Prop: TProperties); override;
procedure ImageClick(Sender: TObject);
function GetSubmission(Index: integer; var S: string): boolean; override;
end;
THiddenFormControlObj = class(TFormControlObj)
function GetSubmission(Index: integer; var S: string): boolean; override;
procedure SetData(Index: integer; const V: String); override;
end;
TEditFormControlObj = class(TFormControlObj)
private
EnterContents: string;
tmAveCharWidth: integer;
protected
procedure DoOnChange; override;
procedure SaveContents; override;
public
EditSize: integer;
constructor Create(AMasterList: TSectionList; Position: integer;
L: TAttributeList; const Typ: string; Prop: TProperties);
procedure Draw(Canvas: TCanvas; X1, Y1: integer); override;
procedure ProcessProperties(Prop: TProperties); override;
procedure ResetToValue; override;
function GetSubmission(Index: integer; var S: string): boolean; override;
procedure SetData(Index: integer; const V: String); override;
procedure SetHeightWidth(Canvas: TCanvas); override;
end;
WhichType = (Submit, ResetB, Button, Browse);
TButtonFormControlObj = class(TFormControlObj)
public
Which: WhichType;
MyEdit: TEditFormControlObj;
constructor Create(AMasterList: TSectionList; Position: integer;
L: TAttributeList; const Typ: string; Prop: TProperties);
procedure Draw(Canvas: TCanvas; X1, Y1: integer); override;
procedure ButtonClick(Sender: TObject);
procedure SetHeightWidth(Canvas: TCanvas); override;
end;
TRadioButtonFormControlObj = class(TFormControlObj)
private
WasChecked: boolean;
protected
procedure DoOnChange; override;
procedure SaveContents; override;
function GetControl: TWinControl; override;
public
IsChecked: boolean;
MyCell: TCellBasic;
constructor Create(AMasterList: TSectionList; Position: integer;
L: TAttributeList; ACell: TCellBasic);
procedure Draw(Canvas: TCanvas; X1, Y1: integer); override;
procedure RadioClick(Sender: TObject);
procedure ResetToValue; override;
function GetSubmission(Index: integer; var S: string): boolean; override;
procedure SetData(Index: integer; const V: String); override;
end;
TCheckBoxFormControlObj = class(TFormControlObj)
private
WasChecked: boolean;
public
IsChecked: boolean;
constructor Create(AMasterList: TSectionList; Position: integer;
L: TAttributeList; Prop: TProperties);
procedure Draw(Canvas: TCanvas; X1, Y1: integer); override;
procedure ResetToValue; override;
function GetSubmission(Index: integer; var S: string): boolean; override;
procedure SetData(Index: integer; const V: String); override;
procedure SetDataInit; override;
protected
procedure DoOnChange; override;
procedure SaveContents; override;
end;
LineRec = class(TObject) {holds info on a line of text}
private
Start: PWideChar;
SpaceBefore, SpaceAfter,
LineHt, {total height of line}
LineImgHt, {top to bottom including any floating image}
Ln, {# chars in line}
Descent,
LineIndent : integer;
DrawXX, DrawWidth: integer;
DrawY: integer;
Spaces, Extra: integer;
BorderList: TFreeList; {List of inline borders {BorderRec's) in this Line}
FirstDraw: boolean; {set if border processing needs to be done when first drawn}
FirstX: integer; {x value at FirstDraw}
Shy: boolean;
public
constructor Create(SL: TSectionList);
procedure Clear;
destructor Destroy; override;
end;
TSectionBase = class(TIDObject) {abstract base for document sections}
protected
MyBlock: TBlock;
function GetYPosition: integer; override;
public
ParentSectionList: TSectionList; {what list it's in}
SectionHeight: integer; {pixel height of section}
DrawHeight: integer; {floating image may overhang}
StartCurs: integer;
Len: integer;
ZIndex: integer;
ContentTop, ContentBot, ContentLeft: integer;
DrawTop, DrawBot, YDraw: integer;
constructor Create(AMasterList: TSectionList);
constructor CreateCopy(AMasterList: TSectionList; T: TSectionBase); virtual;
procedure CopyToClipboard; virtual;
function DrawLogic(Canvas : TCanvas; X, Y, XRef, YRef, AWidth, AHeight, BlHt: integer; IMgr: IndentManager;
var MaxWidth: integer; var Curs: integer): integer; virtual;
function Draw1(Canvas: TCanvas; const ARect: TRect;
IMgr: IndentManager; X, XRef, YRef : integer) : integer; virtual;
function GetURL(Canvas: TCanvas; X: integer; Y: integer;
var UrlTarg: TUrlTarget; var FormControl: TImageFormControlObj;
var ATitle: string): guResultType; virtual;
function PtInObject(X : integer; Y: integer; var Obj: TObject;
var IX, IY: integer): boolean; virtual;
function FindCursor(Canvas: TCanvas; X: integer; Y: integer;
var XR: integer; var YR: integer; var CaretHt: integer;
var Intext: boolean): integer; virtual;
function FindString(From: integer; const ToFind: WideString; MatchCase: boolean): integer; virtual;
function FindStringR(From: integer; const ToFind: WideString; MatchCase: boolean): integer; virtual;
function FindSourcePos(DocPos: integer): integer; virtual;
function FindDocPos(SourcePos: integer; Prev: boolean): integer; virtual;
function CursorToXY(Canvas: TCanvas; Cursor: integer; var X: integer;
var Y: integer): boolean; virtual;
function GetChAtPos(Pos: integer; var Ch: WideChar; var Obj: TObject): boolean; virtual;
procedure SetParent(List: TSectionList);
procedure MinMaxWidth(Canvas: TCanvas; var Min, Max: integer); virtual;
procedure AddSectionsToList; virtual;
end;
TBlock = class(TSectionBase)
private
procedure DrawBlockBorder(Canvas: TCanvas; ORect, IRect: TRect); virtual;
public
MargArray: TMarginArray;
MyCell: TBlockCell;
EmSize, ExSize, FGColor: integer;
BorderStyle: BorderStyleType;
FloatLR: AlignmentType; {ALeft or ARight if floating}
ClearAttr: ClearAttrType;
IsListBlock: boolean;
PRec: PtPositionRec;
Positioning: PositionType; {posStatic, posAbsolute, posRelative}
Visibility: VisibilityType;
BottomAuto: boolean;
BreakBefore, BreakAfter, KeepIntact: boolean;
DisplayNone: boolean;
HideOverflow: boolean;
Justify: JustifyType;
Converted: boolean;
MargArrayO: TVMarginArray;
OwnerCell: TCellBasic;
TagClass: string; {debugging aid}
NewWidth: integer;
ClearAddon: integer;
Indent: integer;
NeedDoImageStuff: boolean;
BGImage: TImageObj;
TiledImage: TgpObject;
TiledMask, FullBG: TBitmap;
TopP, LeftP: integer;
DrawList: TList;
NoMask: boolean;
ClientContentBot: integer;
BlockTitle: string;
MyRect: TRect;
RefIMgr: IndentManager;
constructor Create(Master: TSectionList; Prop: TProperties; AnOwnerCell: TCellBasic; Attributes: TAttributeList);
constructor CreateCopy(AMasterList: TSectionList; T: TSectionBase); override;
destructor Destroy; override;
procedure CollapseMargins;
function FindWidth(Canvas: TCanvas; AWidth, AHeight, AutoCount: integer): integer; virtual;
function DrawLogic(Canvas : TCanvas; X, Y, XRef, YRef, AWidth, AHeight, BlHt: integer; IMgr: IndentManager;
var MaxWidth: integer; var Curs: integer): integer; override;
function Draw1(Canvas: TCanvas; const ARect: TRect;
IMgr: IndentManager; X , XRef, YRef : integer) : integer; override;
procedure DrawBlock(Canvas: TCanvas; const ARect: TRect;
IMgr: IndentManager; X, Y, XRef, YRef : integer);
procedure MinMaxWidth(Canvas: TCanvas; var Min, Max: integer); override;
function GetURL(Canvas: TCanvas; X: integer; Y: integer;
var UrlTarg: TUrlTarget; var FormControl: TImageFormControlObj;
var ATitle: string): guResultType; override;
function FindString(From: integer; const ToFind: WideString; MatchCase: boolean): integer; override;
function FindStringR(From: integer; const ToFind: WideString; MatchCase: boolean): integer; override;
function FindCursor(Canvas: TCanvas; X: integer; Y: integer;
var XR: integer; var YR: integer; var CaretHt: integer;
var Intext: boolean): integer; override;
function GetChAtPos(Pos: integer; var Ch: WideChar; var Obj: TObject): boolean; override;
function CursorToXY(Canvas: TCanvas; Cursor: integer; var X: integer;
var Y: integer): boolean; override;
function FindDocPos(SourcePos: integer; Prev: boolean): integer; override;
function FindSourcePos(DocPos: integer): integer; override;
procedure CopyToClipboard; override;
function PtInObject(X : integer; Y: integer; var Obj: TObject;
var IX, IY: integer): boolean; override;
procedure DrawSort;
procedure DrawTheList(Canvas: TCanvas; ARect: TRect; ClipWidth, X,
XRef, YRef :integer);
procedure AddSectionsToList; override;
procedure FormTree(Indent: string; var Tree: string);
end;
ListTypeType = (None, Ordered, Unordered, Definition, liAlone);
ThtmlTable = class;
TTableBlock = class(TBlock)
private
procedure DrawBlockBorder(Canvas: TCanvas; ORect, IRect: TRect); override;
public
Table: ThtmlTable;
WidthAttr: integer;
AsPercent: boolean;
BkColor: TColor;
BkGnd: boolean;
HSpace, VSpace: integer;
HasCaption: boolean;
TableBorder: boolean;
Justify: JustifyType;
TableIndent: integer;
constructor Create(Master: TSectionList; Prop: TProperties;
AnOwnerCell: TCellBasic; ATable: ThtmlTable; TableAttr: TAttributeList;
TableLevel: integer);
constructor CreateCopy(AMasterList: TSectionList; T: TSectionBase); override;
function DrawLogic(Canvas : TCanvas; X, Y, XRef, YRef, AWidth, AHeight, BlHt: integer; IMgr: IndentManager;
var MaxWidth: integer; var Curs: integer): integer; override;
function Draw1(Canvas: TCanvas; const ARect: TRect;
IMgr: IndentManager; X, XRef, YRef : integer) : integer; override;
procedure MinMaxWidth(Canvas: TCanvas; var Min, Max: integer); override;
function FindWidth(Canvas: TCanvas; AWidth, AHeight, AutoCount: integer): integer; override;
function FindWidth1(Canvas: TCanvas; AWidth, ExtMarg: integer): integer;
procedure AddSectionsToList; override;
end;
TTableAndCaptionBlock = class(TBlock)
private
procedure SetCaptionBlock(Value: TBlock);
public
TopCaption: boolean;
TableBlock: TTableBlock;
FCaptionBlock: TBlock;
Justify: JustifyType;
TableID: string;
constructor Create(Master: TSectionList; Prop: TProperties; AnOwnerCell: TCellBasic;
Attributes: TAttributeList; ATableBlock: TTableBlock);
constructor CreateCopy(AMasterList: TSectionList; T: TSectionBase); override;
procedure CancelUsage;
function FindWidth(Canvas: TCanvas; AWidth, AHeight, AutoCount: integer): integer; override;
procedure MinMaxWidth(Canvas: TCanvas; var Min, Max: integer); override;
function FindDocPos(SourcePos: integer; Prev: boolean): integer; override;
property CaptionBlock: TBlock read FCaptionBlock write SetCaptionBlock;
end;
THRBlock = class(TBlock)
public
Align: JustifyType;
MyHRule: TSectionBase;
constructor CreateCopy(AMasterList: TSectionList; T: TSectionBase); override;
function FindWidth(Canvas: TCanvas; AWidth, AHeight, AutoCount: integer): integer; override;
end;
TBlockLI = class(TBlock)
private
ListType: ListTypeType;
ListNumb: integer;
ListStyleType: ListBulletType;
ListFont: TFont;
Image: TImageObj;
FirstLineHt: integer;
public
constructor Create(Master: TSectionList; Prop: TProperties; AnOwnerCell: TCellBasic;
Sy: Symb; APlain: boolean; AIndexType: char;
AListNumb, ListLevel: integer; Attributes: TAttributeList);
constructor CreateCopy(AMasterList: TSectionList; T: TSectionBase); override;
destructor Destroy; override;
function DrawLogic(Canvas : TCanvas; X, Y, XRef, YRef, AWidth, AHeight, BlHt: integer; IMgr: IndentManager;
var MaxWidth: integer; var Curs: integer): integer; override;
function Draw1(Canvas: TCanvas; const ARect: TRect;
IMgr: IndentManager; X, XRef, YRef : integer) : integer; override;
end;
TBodyBlock = class(TBlock)
constructor Create(Master: TSectionList; Prop: TProperties;
AnOwnerCell: TCellBasic; Attributes: TAttributeList);
function GetURL(Canvas: TCanvas; X: integer; Y: integer;
var UrlTarg: TUrlTarget; var FormControl: TImageFormControlObj;
var ATitle: string): guResultType; override;
function DrawLogic(Canvas : TCanvas; X, Y, XRef, YRef, AWidth, AHeight, BlHt: integer; IMgr: IndentManager;
var MaxWidth: integer; var Curs: integer): integer; override;
function Draw1(Canvas: TCanvas; const ARect: TRect;
IMgr: IndentManager; X, XRef, YRef : integer) : integer; override;
end;
TCellObj = Class;
TCellList = class(TFreeList) {a list of TCellObj's to form a table row}
public
RowHeight: integer;
SpecRowHeight, SpecRowHeightPercent: integer;
RowSpanHeight: integer; {height of largest rowspan}
BkGnd: boolean;
BkColor: TColor;
BkImage: string;
APRec: PtPositionRec;
BreakBefore, BreakAfter, KeepIntact: boolean;
RowType: TRowType;
constructor Create(Attr: TAttributeList; Prop: TProperties);
constructor CreateCopy(AMasterList: TSectionList; T: TCellList);
procedure InitializeRow;
function DrawLogic1(Canvas : TCanvas; const Widths : array of integer; Span,
CellSpacing, AHeight: integer; var Desired: integer; var Spec, More: boolean): integer;
procedure DrawLogic2(Canvas : TCanvas; Y: integer;
CellSpacing: integer; var Curs: integer);
function Draw(Canvas: TCanvas; MasterList: TSectionList; const ARect: TRect;
const Widths : array of integer; X: integer; Y, YOffset: integer;
CellSpacing : integer; Border: boolean; Light, Dark: TColor;
MyRow: integer) : integer;
procedure Add(CellObj: TCellObj);
end;
TColObj = Class
colWidth: integer;
colAsPercent: boolean;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -